kube-proxy工作原理
kube-proxy 以 DaemonSet 的形式运行在集群的所有节点中,负责管理集群外到 Service,以及 Service 到 Pod 的流量转发。
kube-proxy 有三种模式:
- userspace
- iptables
- ipvs
在运行了 kube-proxy 的节点上,可以通过下面的命令查看 kube-proxy 的运行模式:
1 | curl localhost:10249/proxyMode |
iptables
通过 kube-proxy 的 cm 可以查看 mode
我们都知道 SVC 有多种类型,常用的有 ClusterIP、NodePort、Headless、LoadBalancer 等等,这里我们通过创建类型的 SVC,查看 kube-proxy 下发的iptables 规则
ClusterIP
通过 iptables-save 命令打印这个 SVC 的规则
PodIP: 10.233.74.106
ClusterIP: 10.233.54.175
1 | # 将来自 Pod IP 10.233.74.106 的流量标记为服务 default/nginx,并转发到 KUBE-MARK-MASQ 链中 |
NodePort
把这个 SVC 类型改成 NodePort
通过 iptables-save
命令打印这个 SVC 的规则,多了两条规则
1 | # 用于标记来自外部的、目标地址为服务 default/nginx 的 NodePort 流量 |
IPVS
通过 kube-proxy 的 cm 可以查看 mode
来自 GPT 的回答: IPVS 是 Linux 内核中实现的虚拟服务器技术,它可以将网络流量负载均衡到多台服务器上,从而提高服务性能和可靠性。
ClusterIP
PodIP: 10.233.76.138
ClusterIP: 10.233.27.36
通过 ipvsadm
命令查看这个虚拟服务器
1 | Prot LocalAddress:Port Scheduler Flags |
NodePort
通过 ipvsadm
命令查看这个虚拟服务器,多了三条规则
1 | # 10.233.74.64 为 nodelocaldns 网卡的 IP,由于 NodePort 是全监听,所以也有对应的规则 |
kube-proxy工作原理
You need to set
install_url
to use ShareThis. Please set it in _config.yml
.