您的位置:

kubeproxy的功能、原理和运行机制分析

一、kubeproxy random

kubeproxy支持不同的服务发现方式,其中的random模式是默认的方式。

在该模式下,kubeproxy随机选择一个健康的pod来作为服务代理。当有新的pod加入或是旧的pod退出时,kubeproxy会自动更新负载均衡规则。


apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: MyApp
  ports:
    - protocol: TCP
      port: 80
      targetPort: 9376
  sessionAffinity: None  // 关闭session粘连

二、kubeproxy主要功能是什么

kubeproxy是一个独立部署的服务,主要实现了如下的功能:

  • 对外暴露kubernetes集群内的服务
  • 实现服务的负载均衡
  • 提供节点间的通信

三、kubeproxy原理

kubeproxy通过获取kubernetes集群状态来动态地维护和更新iptables规则,来实现服务的负载均衡和代理。他可以根据监听的service端口和容器端口来创建对应的iptables规则。


iptables -t nat -A PREROUTING -p tcp --dport 80 -j KUBE-SERVICES
iptables -t nat -A KUBE-SERVICES -d 10.0.0.10/32 -p tcp -m comment --comment "my-service: http" -j KUBE-MARK-MASQ
iptables -t nat -A KUBE-SERVICES -d 10.0.0.10/32 -p tcp -m comment --comment "my-service: http" -j KUBE-SVC-MYAPP

四、kubeproxy替代方案

替代kubeproxy的主要方案是采用Service Mesh的解决方案,如Istio。Service Mesh主要是通过sidecar代理来实现服务的负载均衡和流量控制,对于服务的细粒度控制更加易于管理。

五、kubeproxy运行机制分析

kubeproxy的运行机制如下:

  1. kubeproxy从apiserver获取到pods、services、nodes等kubernetes集群的信息
  2. kubeproxy通过监控objects的变化来动态更新iptables规则,同时监听apiserver的变化
  3. kubeproxy通过替换IP的方式实现容器之间的通信

//获取集群信息
curl -s -H "Authorization: Bearer ${TOKEN}" https://$APISERVER/api/v1/nodes | jq .

//动态更新iptables规则
iptables -t nat -A KUBE-SERVICES -d 10.0.0.10/32 -p tcp --dport 80 -j KUBE-MARK-MASQ
iptables -t nat -A KUBE-SERVICES -d 10.0.0.10/32 -p tcp --dport 80 -m comment --comment "my-service: http" -j KUBE-SVC-MYAPP

六、kubeproxy工作模式概述

kubeproxy的工作模式主要有如下几种:

  • User-Space代理模式: kubeproxy在linux用户空间中运行,监听service的事件,实现负载均衡和代理
  • Iptable代理模式: kubeproxy以iptables规则的形式实现负载均衡和代理
  • IPVS代理模式: kubeproxy以IPVS规则的形式实现负载均衡和代理

//User-Space模式
iptables -t nat -L KUBE-SERVICES

//IPtable模式
ipvsadm -Ln

//IPVS模式
ipvsadm -ln