【云原生】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进行调用

file

2、Pod服务发现

Pod服务发现借助kube-proxy实现,该组件实现了三件事情:监控pod;pod如果发生了变化,及时修改映射关系;修改映射关系的同时,修改路由规则,以便在负载均衡时可以选择到新的pod。
file

二、负载均衡方案(四层负载)

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的负载均衡?

为者常成,行者常至