基于k8s部署的应用(服务)如何访问
当我们使用k8s部署了一套应用时(比如一个blog系统),要怎么访问它便成了我们最直接的问题,这里 的访问应该同时包括了对外(tomcat)和对内(mysql)服务。
要弄清楚这个问题,首先我们需要了解kubernetes网络模型设计的基础原则:
每个pod都拥有一个独立的ip地址,而且假定所有的pod都在一个直接连通的、扁平的网络空间中。
回到题目的问题,我们这里分两步分讨论:
1. 集群内部访问
1.1 通过pod的ip访问
通过这种方式访问是不可靠的,因为当pod重启后,它的ip会重新分配
1.1.1 因为pod中所有容器共享一个网络堆栈(pod的ip地址是docker0分配的),所以同一个pod中的容器可以通过localhost来互相访问
1.1.2 不同pod的容器访问可以使用endpoint方式:pod的ip+容器的端口
1.2 通过服务访问
通过创建service,可以为一组具有相同功能的容器应用提供一个统一的入口地址,这个地址不会因为pod的重启而发生改变,所以是可靠的。
访问方式:服务的clusterIP(这个是系统分配的全局唯一ip)+containerPort(应用容器的端口)
2. 集群外部访问
2.1 直接访问容器
在启动pod的rc/deployment中指定容器的hostport,并设置pod级别的hostwork=true,这样直接通过主机ip+hostport就可以实现访问
2.2 通过service访问
2.2.1 NodePort方式
在service.yaml中配置nodeport参数,这一集群会在每一个node上为需要外部访问的service开启一个TCP监听端口,外部系统只需要用任意一个Node的IP地址+具体的NodePort端口号就可访问此服务。不过这种方式没有解决node层负载均衡的问题(pod层kube-proxy会自动实现负载分发到多个pod上,但node层不能负载分发到多个node)
2.2.2 如果使用公有云平台(如aws、azure、openstack、gce等)部署时,可以用loadbalance方式,配置外部负载均衡器,对service的请求会通过loadbalance转发到后端pod
2.3 Ingress
Ingress也是k8s中单独定义的对象,它的作用就是实现对外暴露访问的负载均衡,它和Service本身LoadBalancer的区别在于:
- Ingress支持L4、L7负载均衡,LoadBalancer设计上只支持L4;
- Ingress基于Pod部署,并将Pod网络设置成external network;
- Ingress controller支持Nginx、Haproxy、GCE-L7,能够满足企业内部使用。
本文转自CSDN-基于k8s部署的应用(服务)如何访问
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
应用在k8s上运行的几种网络模式
应用部署在k8s上,首先想到的是应用k8s的默认service模式配置。 应用通过service向集群内部(ClusterIP)和集群外部(NodePort)暴露服务。k8s中的其他 应用通过kube-dns提供的dns解析功能,访问servicename:port即可访问service后面的pod的服务。这需要两个应用服务之间的交互不需要记录对方的hostname或者IP,例如,假如应用服务通过socket连接到另一个应用服务,并通过记录他的IP或者Hostname,以便下次连接时作为验证对方。这样的话会出现servicename:port与podname:port或者podIP:port不符。 k8s hostnetwork配置 解决servicename:port与podname:port或者podIP:port不符的问题,可以把被验证的应用使用hostnetwork。 应用与宿主机共享网络空间,也就是k8s节点的IP,端口占用与宿主机一样。这样应用的IP就是宿主机的IP,与另一个应用的连接也不经过service IP这一层。另一个应用仍然采用kubernetes的pod网络模型...
- 下一篇
离线安装k8s
一、环境信息: 环境信息(采用一个master节点+两个node节点) master 172.16.20.11 node1 172.16.20.12 node2 172.16.20.13 操作系统版本 CentOS Linux release 7.5.1804 (Core 二、下载离线包: 链接:https://pan.baidu.com/s/1sPSpccsv93iz3Lgmb_n3pg 密码:zgwf 三、各个节点通用操作 1、将离线包k8s-offline-install.zip 上传到各个节点上 # unzip k8s-offline-install.zip 2、安装docker-ce17.03(kubeadmv1.9最大支持docker-ce17.03) # yum localinstall docker-ce* 3、修改docker的镜像 源为国内的daocloud的。 #curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://a58c8480.m.daocloud.io 4、启动doc...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
-
Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8编译安装MySQL8.0.19
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
推荐阅读
最新文章
- CentOS6,CentOS7官方镜像安装Oracle11G
- Windows10,CentOS7,CentOS8安装Nodejs环境
- CentOS8编译安装MySQL8.0.19
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- 设置Eclipse缩进为4个空格,增强代码规范
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题