1.8 Kube Proxy

1.8 Kube Proxy 详解:Kubernetes 网络核心组件

一、Kube Proxy 核心理念

Kube Proxy 是 Kubernetes 集群中实现服务抽象的关键组件,负责维护节点上的网络规则,实现以下核心功能:

  1. 服务抽象:将 Service 的虚拟 IP (VIP) 映射到后端 Pod
  2. 负载均衡:在多个 Pod 副本间分配流量
  3. 网络代理:处理集群内外的网络通信
  4. 端点维护:跟踪 Pod 状态并更新转发规则

二、工作模式详解

Kube Proxy 支持三种工作模式,通过 --proxy-mode 参数指定:

1. Userspace 模式(已弃用)

  • 工作原理:在用户空间监听端口并转发流量
  • 性能特点:上下文切换开销大,性能最低

2. Iptables 模式(默认)

1
2
# 查看iptables规则
sudo iptables-save | grep KUBE-SVC-
  • 优势
    • 完全在内核空间处理
    • 无额外进程开销
  • 局限
    • 规则线性查找,性能随服务数量下降
    • 不支持高级负载均衡策略

3. IPVS 模式(推荐生产使用)

1
2
# 检查IPVS规则
sudo ipvsadm -Ln
  • 优势
    • 基于哈希表,性能最优
    • 支持多种负载均衡算法(rr, wrr, lc, wlc 等)
    • 更好的可扩展性
  • 配置方法
    1
    2
    3
    # 启动参数
    --proxy-mode=ipvs
    --ipvs-scheduler=rr # 轮询算法

三、Pod 网络模型

1. 跨节点虚拟网络

Pod network: 横跨集群中所有节点的内部虚拟网络

1
2
# 查看集群网络插件
kubectl get pods -n kube-system | grep -E 'flannel|calico|cilium'
  • 核心特性
    • 每个 Pod 获得唯一 IP(IP-per-Pod)
    • Pod 间直接通信,无需 NAT
    • 跨节点通信透明化

2. 服务发现机制

1
2
# 查看集群DNS服务
kubectl get svc -n kube-system kube-dns
  • DNS 解析<service-name>.<namespace>.svc.cluster.local
  • 环境变量注入:所有服务信息会注入到 Pod 环境变量中

四、常用命令与操作

1. 查看 Kube Proxy 组件

1
2
3
4
5
# 查看Proxy Pod(DaemonSet部署)
kubectl get pods -n kube-system -l k8s-app=kube-proxy

# 查看DaemonSet配置
kubectl get daemonset -n kube-system kube-proxy -o yaml

2. 检查代理配置

1
2
3
4
5
# 查看当前代理模式
kubectl describe configmap -n kube-system kube-proxy | grep "mode:"

# 查看Proxy日志
kubectl logs -n kube-system <kube-proxy-pod-name>

3. 网络诊断命令

1
2
3
4
5
6
7
8
# 检查Service的Endpoint
kubectl get endpoints <service-name>

# 检查网络连通性
kubectl exec <pod-name> -- curl -I <service-ip>:<port>

# 查看节点网络信息
kubectl describe node <node-name> | grep -A 10 "Addresses"

五、核心功能实现机制

1. Service 类型处理

Service 类型 实现方式 典型命令
ClusterIP iptables/IPVS规则 kubectl expose deployment...
NodePort 节点端口映射 --type=NodePort
LoadBalancer 云提供商集成 --type=LoadBalancer
ExternalName DNS CNAME记录 --external-name=example.com

2. 会话保持实现

1
2
# 查看会话保持配置
kubectl describe svc <service-name> | grep -i "session affinity"
  • 实现方式
    • 基于客户端 IP(ClientIP)
    • 超时时间可配置(默认3小时)

六、高级配置与调优

1. 性能调优参数

1
2
# 查看当前Proxy配置
kubectl describe cm -n kube-system kube-proxy | grep -A 10 "config.conf"

关键参数:

  • conntrack 相关参数(连接跟踪)
  • iptables 同步周期
  • ipvs 调度算法

2. 自定义配置文件

kube-proxy-config.yaml 示例:

1
2
3
4
5
6
7
8
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: "ipvs"
ipvs:
scheduler: "wrr"
minSyncPeriod: "5s"
iptables:
masqueradeAll: true

七、常见问题排查

1. 服务不可访问

1
2
3
4
5
6
7
8
# 检查Service配置
kubectl describe svc <service-name>

# 检查Endpoint状态
kubectl get ep <service-name>

# 检查网络策略
kubectl get networkpolicy -A

2. 网络性能问题

1
2
3
4
5
# 查看连接跟踪表
sudo conntrack -L

# 检查IPVS统计
sudo ipvsadm -ln --stats

3. 规则不同步

1
2
# 强制Proxy重新加载配置
kubectl delete pod -n kube-system -l k8s-app=kube-proxy

八、与云平台集成

1. 负载均衡器管理

1
2
# 查看云负载均衡器
kubectl describe svc <loadbalancer-service> | grep -A 10 "LoadBalancer Ingress"

2. 外部流量策略

1
2
# 配置外部流量保留客户端IP
kubectl patch svc <service-name> -p '{"spec":{"externalTrafficPolicy":"Local"}}'

Kube Proxy 作为 Kubernetes 网络核心,其配置和调优对集群网络性能有重大影响。理解其工作原理并掌握这些命令,可以有效管理和诊断集群网络问题。