RKE2 Cilium without kube-proxy
集群如果使用 Cilium 作为 cni 的话,可以实现 Kubernetes Without kube-proxy。
Cilium 的 kube-proxy 替代程序依赖于 socket-LB 功能,需要使用 v4.19.57、v5.1.16、v5.2.0 或更高版本的 Linux 内核。Linux 内核 v5.3 和 v5.8 增加了其他功能,Cilium 可利用这些功能进一步优化 kube-proxy 替代实现。
已有的 RKE2 Cilium 集群,可以通过下面的步骤开启此功能。
在 Rancher 通过 Yaml 编辑集群:
1 | spec: |
待 Provisioning 结束后,需要重启所有节点的 rke2-server or rke2-agent:
1 | systemctl restart rke2-server |
这个时候 agent 节点就不会有 kube-proxy pod 了,但 server 节点的需要手动移除 kube-proxy Yaml 文件:
1 | mv /var/lib/rancher/rke2/agent/pod-manifests/kube-proxy.yaml ~/kube-proxy.yaml |
这个时候集群已经没有 kube-proxy pod,然后清除之前生成的 iptables 规则:
1 | iptables -F && iptables -X && iptables -Z && iptables -F -t nat && iptables -X -t nat && iptables -Z -t nat |
最后,重启 Cilium:
1 | kubectl -n kube-system rollout restart ds cilium |
检查 KubeProxyReplacement 配置是否生效:
1 | root@test001:~# kubectl -n kube-system exec ds/cilium -c cilium-agent -- cilium-dbg status | grep KubeProxyReplacement |
获取更多细节配置:
1 | root@test001:~# kubectl -n kube-system exec ds/cilium -c cilium-agent -- cilium-dbg status --verbose |
查看是否还有 kube-proxy 的 iptables 规则:
1 | iptables-save | grep KUBE-SVC |
创建一个 Workload 和 Service 进行 ClusterIP/NodePort 测试,能正常通信即可:
1 | root@test001:~# kubectl get pod -n kube-system | grep kube-proxy |
RKE2 Cilium without kube-proxy
https://warnerchen.github.io/2024/10/31/RKE2-Cilium-without-kube-proxy/
install_url
to use ShareThis. Please set it in _config.yml
.