Azure平台kubeadm部署K8s集群Nginx Pod无法连接公网如何解决
问题背景
- 已通过kubeadm在master节点完成Kubernetes集群部署,成功接入2个worker节点,集群kubectl版本为v1.24.2,采用Calico作为网络插件,3台集群虚拟机均部署在Azure平台,节点间内网互通。
- 部署Nginx Pod后进入Pod内部执行
nslookup google.com、apt update命令均返回连接超时,判定Pod无法访问公网。 - 异常Nginx Pod调度运行在worker2节点,该节点上containerd容器运行时、Docker Application Container Engine服务均处于正常运行状态,执行
lsmod | grep br_netfilter返回结果如下:
br_netfilter 28672 0 bridge 266240 1 br_netfilter
- 本次部署使用的
nginx.yaml配置内容如下:
apiVersion: apps/v1 kind: Deployment metadata: name: nginx spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx ports: - containerPort: 80 # command: ["/bin/sh","-c"] # args: ["apt update"] # securityContext: # privileged: true --- apiVersion: v1 kind: Service metadata: name: nginx labels: app: nginx spec: type: ClusterIP selector: app: nginx ports: - port: 8080 targetPort: 80 name: nginx-http
- kube-system命名空间下coredns组件运行状态:

- Pod连接超时故障现象:

排查解决步骤
从现象看DNS解析、公网HTTP请求均超时,故障点在Pod出公网的链路,按以下优先级排查:
- 验证worker节点本身公网连通性
直接在worker2节点执行curl google.com、nslookup google.com,确认节点自身可正常访问公网。Azure虚拟机如果未绑定公网IP、关联的网络安全组拒绝出站公网流量,节点本身就无公网访问能力,Pod流量自然无法通公网。 - 校验内核转发与桥接过滤参数
虽然br_netfilter模块已加载,仍需确认sysctl参数配置正确,在所有节点执行以下命令检查:
三个参数返回值必须均为sysctl net.bridge.bridge-nf-call-iptables net.bridge.bridge-nf-call-ip6tables net.ipv4.ip_forward1,如果不符合要求,临时生效执行:
永久生效需将上述参数写入sysctl -w net.bridge.bridge-nf-call-iptables=1 sysctl -w net.bridge.bridge-nf-call-ip6tables=1 sysctl -w net.ipv4.ip_forward=1/etc/sysctl.conf文件后执行sysctl -p加载配置。 - 检查Calico运行状态与网络配置
执行以下命令确认所有Calico组件Pod运行正常:
重点确认worker2节点上的calico-node Pod为Running状态,若异常直接查看Pod日志定位问题。同时校验Calico IP池配置:kubectl get pods -n kube-system -l k8s-app=calico-node
确认默认IP池的calicoctl get ippool -o yamlnatOutgoing字段值为true,如果为false,Pod流量流出主机时不会做SNAT转换,Calico网段的地址无法被Azure虚拟网络路由,必然出现公网访问超时。 - 排查iptables规则冲突与缺失
节点同时运行Docker和containerd时,容易出现iptables规则互相覆盖的问题。在worker2节点执行iptables -t nat -L -n,查看MASQUERADE地址伪装规则是否存在,正常情况下Calico会自动添加规则,对非集群内网段的流量做源地址转换,用节点IP访问公网。如果规则缺失,直接重启对应节点的calico-node Pod即可自动重建规则。 - 核查Azure平台层面网络限制
- 确认节点网卡关联的网络安全组出站规则允许公网访问,无拦截策略
- 若节点未分配实例级公网IP,确认所在子网配置了有效NAT网关或其他公网出口规则,避免虚拟机本身无公网出口
- 检查Azure虚拟网络的DNS配置是否正常,排除节点自身DNS解析故障
- 验证CoreDNS服务可用性
从截图看CoreDNS副本均处于运行状态,仍需进一步验证:在worker2节点上运行一个临时调试Pod,执行nslookup kubernetes.default确认集群内部DNS解析正常,如果内部解析都失败,需排查CoreDNS Service连通性、CoreDNS上游DNS配置是否可用。
这类故障90%以上的根因集中在三个方向:Calico IP池未开启natOutgoing、节点本身无公网出口、内核转发参数未正确配置,优先排查这三项可快速定位问题。
内容的提问来源于stack exchange,提问作者Mohd Rashid
相关产品推荐
相关产品推荐

