MicroK8s集群跨节点Pod能否通过ClusterIP通信?
ClusterIP跨节点通信问题解答
ClusterIP是否支持跨节点通信?
ClusterIP是Kubernetes默认的集群内部服务类型,完全支持跨节点Pod访问。它的核心作用就是为集群内的服务提供一个统一的虚拟IP,让所有节点上的Pod都能通过这个IP访问后端服务,无论后端Pod部署在哪个节点上。
排查思路
1. 验证跨节点Pod基础连通性
- 执行
microk8s kubectl get pods -o wide获取两个Nginx Pod的实际IP - 在nginx-two所在节点,直接用
curl <nginx-one-pod-ip>:80测试,确认跨节点Pod之间的基础网络是否正常;如果连Pod IP都无法访问,说明CNI网络插件存在问题
2. 检查CNI网络插件状态
MicroK8s默认使用Calico作为CNI插件,重点检查:
- 执行
microk8s kubectl get pods -n kube-system -l k8s-app=calico-node,确保所有节点的calico-node Pod都处于Running状态 - 查看calico-node Pod日志:
microk8s kubectl logs -n kube-system <calico-node-pod-name> -c calico-node,排查是否有网络配置错误、节点间隧道建立失败等日志
3. 排查节点防火墙与iptables规则
- 检查Ubuntu系统的ufw防火墙状态:
sudo ufw status,如果防火墙开启,需放行Kubernetes集群相关端口(如6443、10250、Pod网络段等) - 验证iptables转发规则:
sudo iptables-save | grep 10.152.183.124,确认是否存在针对目标ClusterIP的转发规则 - 检查kube-proxy组件状态:
microk8s kubectl get pods -n kube-system -l k8s-app=kube-proxy,确保所有节点的kube-proxy Pod正常运行,查看日志排查规则同步异常
4. 定位DNS解析问题
- 检查CoreDNS状态:
microk8s kubectl get pods -n kube-system -l k8s-app=coredns,确认Pod处于Running状态 - 在nginx-two Pod内执行
nslookup nginx-one-cluster-ip-svc,查看是否能正常解析到服务IP;若解析失败,查看CoreDNS日志:microk8s kubectl logs -n kube-system <coredns-pod-name> - 验证Pod的DNS配置:
microk8s kubectl exec <nginx-two-pod-name> -- cat /etc/resolv.conf,确认nameserver指向集群DNS服务IP(通常为10.152.183.10)
5. 确认服务与端点关联状态
- 执行
microk8s kubectl get svc nginx-one-cluster-ip-svc,确认ClusterIP为10.152.183.124,端口映射(8080→80)配置正确 - 执行
microk8s kubectl get endpoints nginx-one-cluster-ip-svc,检查是否正确关联了nginx-one Pod的IP和80端口,确保端点状态正常
6. 检查集群节点状态与通信端口
- 执行
microk8s kubectl get nodes,确保两个节点都处于Ready状态 - 测试节点间集群通信端口的连通性:用
nc -zv <节点IP> <端口>测试6443(API Server)、10250(kubelet)、2379-2380(etcd)等关键端口是否开放
内容的提问来源于stack exchange,提问作者Dan McCoy
相关产品推荐
相关产品推荐

