【云原生】K8S--负载均衡详细介绍
一、K8S云原生服务集群问题
1、负载均衡原理
在之前的文章说过,每一个Pod都是独立的IP、HostName、存储,同时Pod是随时可以被动态创建和回收的,那么就有个问题,我们如何知道Pod的IP并进行访问的呢? 其实K8S是使用Service VIP技术的虚拟ip + kube-proxy来解决这个问题,其中service VIP用来转发请求,kube-proxy用来监控pod状态,并且会及时修改pod的ip。
service是K8S的资源对象,service资源对象运行在每一个node节点上,每一个node节点都有一个service进程,service有自己的IP地址(虚拟IP),而service VIP相当于一个网关,所有的请求都要经过service VIP,通过service VIP进行转发,从而实现负载均衡。
service VIP一旦被创建,是不会被修改的,除非删除service后重新创建service;同时由于service信息存储在高可用的etcd中,且service实例运行在多个node节点上,因此Service VIP不存在单点故障的问题;由于service VIP中使用的是虚拟IP,因此Service VIP只能在局域网内部进行访问,不能通过外网进行访问,如果想要进行外网访问,则需要借助物理网卡进行端口映射转发。
在K8S中IP资源的分类如下:
- Node IP:Node物理节点IP
- Pod IP:物理机内部运行的一个虚拟容器pod的ip
- cluster IP:集群IP,也是个虚拟IP,是K8S抽象出来的一个service的IP。此IP只能局域网内部访问,不能通过外网访问,如果要使用外网访问,就必须开辟nodeport类型的IP地址。如下图所示,外网访问物理IP,然后将访问请求映射到service VIP上,service VIP从etcd上获取endpoints中pod的IP,然后使用负载均衡策略选择一个pod进行调用
2、Pod服务发现
Pod服务发现借助kube-proxy实现,该组件实现了三件事情:监控pod;pod如果发生了变化,及时修改映射关系;修改映射关系的同时,修改路由规则,以便在负载均衡时可以选择到新的pod。
二、负载均衡方案(四层负载)
K8S的负载均衡方案有三种:kube-proxy(userspace)、iptables(防火墙)、ipvs。
1、kube-proxy
2、IPtables
3、IPVS
三、Ingress-nginx(七层负载均衡)
(1)为什么要使用Ingress
(2)Ingress-Nginx介绍
(3)部署Ingres及使用同一个域名访问不同服务
(4)不同域名访问不同服务
(5)Ingres和https
相关文章:
【云原生】K8S--负载均衡详细介绍;什么是K8S的负载均衡?
为者常成,行者常至
自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)