LoadBalancer 类型的 Service工作期间,kube-proxy做了什么?

kube-proxy 是 Kubernetes 集群中一个重要的组件,负责实现服务的网络代理和负载均衡功能。当创建一个 LoadBalancer 类型的 Service 时,kube-proxy 在整个过程中扮演了关键角色。以下是 kube-proxyLoadBalancer 类型 Service 创建和使用过程中所做的工作:

1. 监听 Service 和 Endpoint 变更

kube-proxy 运行在每个节点上,并持续监听 Kubernetes API 服务器上的 ServiceEndpoint 对象的变更。

  • 当创建一个 LoadBalancer 类型的 Service 时,kube-proxy 会收到关于这个新 Service 的通知。
  • ServiceEndpoint 发生变化(例如,匹配的 Pod 增加或减少)时,kube-proxy 也会收到相应的通知。

2. 更新 iptables 或 IPVS 规则

kube-proxy 使用两种主要的方式来处理网络代理和负载均衡:iptablesIPVS(IP Virtual Server)。默认情况下,kube-proxy 可能使用 iptables,但可以通过配置切换到 IPVS

a. 使用 iptables
  • kube-proxy 会在每个节点上更新 iptables 规则,将流量从 Service 的 ClusterIP 和端口转发到匹配的 Pod 的 IP 地址和端口。
  • 对于 LoadBalancer 类型的 Servicekube-proxy 还会配置 iptables 规则,将外部流量从负载均衡器的外部 IP 地址和端口转发到 Service 的 ClusterIP 和端口。
b. 使用 IPVS
  • kube-proxy 会在每个节点上维护一个 IPVS 表,将流量从 Service 的 ClusterIP 和端口转发到匹配的 Pod 的 IP 地址和端口。
  • 对于 LoadBalancer 类型的 Servicekube-proxy 还会配置 IPVS 规则,将外部流量从负载均衡器的外部 IP 地址和端口转发到 Service 的 ClusterIP 和端口。

3. 处理外部流量

当外部客户端通过负载均衡器的外部 IP 地址和端口访问服务时,kube-proxy 会根据配置的 iptablesIPVS 规则将流量转发到 Service 的 ClusterIP。

a. 内部转发
  • kube-proxy 会将接收到的流量从 Service 的 ClusterIP 转发到匹配的 Pod 的 IP 地址和端口。
  • 这个过程对于外部客户端是透明的,外部客户端只需要知道负载均衡器的外部 IP 地址和端口即可访问服务。

4. 处理内部流量

当集群内部的 Pod 访问 LoadBalancer 类型的 Service 时,kube-proxy 也会根据配置的 iptablesIPVS 规则将流量转发到匹配的 Pod。

5. 更新和删除规则

ServiceEndpoint 发生变化时,kube-proxy 会及时更新或删除相应的 iptablesIPVS 规则,以确保流量正确地转发到最新的 Pod。

总结

  • 监听变更kube-proxy 持续监听 ServiceEndpoint 对象的变更。
  • 更新规则kube-proxy 根据变更更新节点上的 iptablesIPVS 规则。
  • 处理流量kube-proxy 将外部流量从负载均衡器的外部 IP 地址和端口转发到 Service 的 ClusterIP,并进一步转发到匹配的 Pod。
  • 内部转发kube-proxy 也将集群内部的流量从 Service 的 ClusterIP 转发到匹配的 Pod。
  • 更新和删除kube-proxy 及时更新或删除规则,以应对 ServiceEndpoint 的变化。

通过这些操作,kube-proxy 确保了 LoadBalancer 类型的 Service 能够正确地处理和转发流量,提供了可靠的网络代理和负载均衡功能。

相关推荐
高旭博1 分钟前
10. kubernetes资源——statefulset有状态负载
云原生·容器·kubernetes
_Walli_26 分钟前
k8s集群搭建(七)-------- 微服务间的调用
微服务·容器·kubernetes
马达加斯加D1 小时前
k8s --- resource: Pod, ReplicaSet and Deployment
云原生·容器·kubernetes
ejinxian3 小时前
Linux 虚拟化技术 KVM/ESXI/Docker
linux·运维·docker·qemu·openvz
lxmyzzs5 小时前
vscode-ssh无法进入docker问题解决
vscode·docker·ssh
Candice_jy5 小时前
vscode运行ipynb文件:使用docker中的虚拟环境
服务器·ide·vscode·python·docker·容器·编辑器
roman_日积跬步-终至千里7 小时前
【Docker下部署高可用】StarRocks 存算一体架构高可用部署要点
docker·容器·架构
zmjjdank1ng7 小时前
k8s问答题(二)
云原生·容器·kubernetes
醉卧雕龙舫 、18 小时前
七.Docker网络
docker
小坏讲微服务18 小时前
五分钟使用 Docker-compose搭建 Redis 8.0 中间件
运维·redis·docker·中间件·容器·kubernetes·k8s