You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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组件运行状态:
    coredns运行状态截图
  • Pod连接超时故障现象:
    连接超时报错截图
排查解决步骤

从现象看DNS解析、公网HTTP请求均超时,故障点在Pod出公网的链路,按以下优先级排查:

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

这类故障90%以上的根因集中在三个方向:Calico IP池未开启natOutgoing、节点本身无公网出口、内核转发参数未正确配置,优先排查这三项可快速定位问题。

内容的提问来源于stack exchange,提问作者Mohd Rashid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 07:42:18