我正在尝试将kube代理从1.21升级到1.22的问题。已经将控制平面组件(apiserver、调度器和控制器管理器(更新到1.22,没有任何问题。当我将第一个工作节点(kubelet和kube proxy(从1.21更新到1.22时,该节点上的LoadBalancer服务变得无法访问,恢复到1.21解决了问题。
我验证了ARP请求是否收到了具有正确MAC地址的回复,并且我在节点的NIC上看到了tcpdump的正确流量。
在对iptables规则中的worker节点进行了一点调查后,我注意到在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 proxy1.21很好(,但我不知道为什么。kube代理似乎定期启动,他们的日志中没有什么奇怪的。
我的环境:
- k8s节点:基于CentOS 7的虚拟机,VNIC桥接到系统管理程序上的物理NIC
- 容器运行时:docker://19.3.5
- k8s集群部署模式:从头开始
- k8s网络插件:法兰绒+金属布
非常感谢的帮助
使用相同的规范删除并重新创建服务,解决了问题。
我不知道为什么,因为我比较了删除前和重新创建后保存的yaml文件,它们有相同的字段。
问题:https://github.com/kubernetes/kubernetes/issues/110208
您只需重新启动/重新创建一个服务后端即可解决问题。