1.8 Kube Proxy 详解:Kubernetes 网络核心组件
一、Kube Proxy 核心理念
Kube Proxy 是 Kubernetes 集群中实现服务抽象的关键组件,负责维护节点上的网络规则,实现以下核心功能:
- 服务抽象:将 Service 的虚拟 IP (VIP) 映射到后端 Pod
- 负载均衡:在多个 Pod 副本间分配流量
- 网络代理:处理集群内外的网络通信
- 端点维护:跟踪 Pod 状态并更新转发规则
二、工作模式详解
Kube Proxy 支持三种工作模式,通过 --proxy-mode 参数指定:
1. Userspace 模式(已弃用)
- 工作原理:在用户空间监听端口并转发流量
- 性能特点:上下文切换开销大,性能最低
2. Iptables 模式(默认)
1 2
| sudo iptables-save | grep KUBE-SVC-
|
- 优势:
- 局限:
- 规则线性查找,性能随服务数量下降
- 不支持高级负载均衡策略
3. IPVS 模式(推荐生产使用)
- 优势:
- 基于哈希表,性能最优
- 支持多种负载均衡算法(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
| kubectl get svc -n kube-system kube-dns
|
- DNS 解析:
<service-name>.<namespace>.svc.cluster.local
- 环境变量注入:所有服务信息会注入到 Pod 环境变量中
四、常用命令与操作
1. 查看 Kube Proxy 组件
1 2 3 4 5
| kubectl get pods -n kube-system -l k8s-app=kube-proxy
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:"
kubectl logs -n kube-system <kube-proxy-pod-name>
|
3. 网络诊断命令
1 2 3 4 5 6 7 8
| 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
| 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
| kubectl describe svc <service-name>
kubectl get ep <service-name>
kubectl get networkpolicy -A
|
2. 网络性能问题
1 2 3 4 5
| sudo conntrack -L
sudo ipvsadm -ln --stats
|
3. 规则不同步
1 2
| 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
| kubectl patch svc <service-name> -p '{"spec":{"externalTrafficPolicy":"Local"}}'
|
Kube Proxy 作为 Kubernetes 网络核心,其配置和调优对集群网络性能有重大影响。理解其工作原理并掌握这些命令,可以有效管理和诊断集群网络问题。