【发布时间】:2022-01-24 22:03:14
【问题描述】:
我正在尝试将 kube-proxy 从 1.21 升级到 1.22 的问题。 已经将控制平面组件(apiserver、调度程序和控制器管理器)更新到 1.22,没有任何问题。 当我将第一个工作节点(kubelet 和 kube-proxy)从 1.21 更新到 1.22 时,节点上的 LoadBalancer 服务变得无法访问,恢复到 1.21 解决了这个问题。
我验证了 ARP 请求接收到带有正确 MAC 地址的回复,并且我在节点的 NIC 上使用 tcpdump 看到了正确的流量。
在对 iptables 规则中的工作节点进行一些调查后,我注意到在 1.22 节点上我有这个规则(nat 表):
-A KUBE-XLB-GYH4OE6JZWRDML2Y -m comment --comment "swp-customer/swpc-25abfa45-ac5c-487f-81b9-178602c569f3:http has no local endpoints" -j KUBE-MARK-DROP
在 1.21 上,我有这个规则:
-A KUBE-XLB-B67G6CBBIZ3WMS7Y -m comment --comment "Balancing rule 0 for swp-customer/swpc-2ad2a9e3-25cf-430e-893b-dbd4ec77b197:http" -j KUBE-SEP-3LIV6VCSPFRWVHFU
-A KUBE-SEP-3LIV6VCSPFRWVHFU -p tcp -m comment --comment "swp-customer/swpc-2ad2a9e3-25cf-430e-893b-dbd4ec77b197:http" -m tcp -j DNAT --to-destination 10.244.1.219:80
第二个,在 1.21 节点上,是正确的规则,以便将流量 nat 到容器。
我猜 kube-proxy 1.22 认为没有本地端点(在同一节点上恢复到 kube-proxy 1.21 可以正常工作),但我不知道为什么。 kube-proxy 似乎会定期启动,并且在他们的日志中没有什么奇怪的。
我的环境:
- k8s 节点:基于 CentOS 7 的 VM,VNIC 桥接到管理程序上的物理 NIC
- 容器运行时:docker://19.3.5
- k8s 集群部署模式:从零开始
- k8s 网络插件:flannel + metallb
非常感谢您的帮助
【问题讨论】:
标签: kubernetes kube-proxy