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

GKE Autopilot集群跨Namespace访问K8s服务时连接被拒绝

排查GKE Autopilot跨Namespace Pod连接拒绝问题

以下是针对你遇到的问题的具体排查步骤:

  • 检查Pod B的网络策略(NetworkPolicy)
    GKE Autopilot集群中如果配置了NetworkPolicy,可能会限制跨Namespace的流量访问。执行以下命令查看Namespace B中的网络策略:

    kubectl get networkpolicy -n <namespace-b>
    kubectl describe networkpolicy <policy-name> -n <namespace-b>
    

    确认是否存在Ingress规则阻止了来自Namespace A的流量,或者规则仅允许特定来源(如特定Namespace标签、Pod标签)的访问。如果有此类限制,需要调整NetworkPolicy以允许Namespace A的Pod访问。

  • 验证Pod B的服务监听配置
    port-forward能正常访问说明Pod内的服务本身可用,但可能服务仅监听127.0.0.1而非0.0.0.0,导致集群内其他Pod无法访问。进入Pod B执行命令检查监听地址:

    kubectl exec -n <namespace-b> <pod-b-name> -- ss -tulpn
    

    查看目标端口的监听地址,如果显示127.0.0.1:<port>,需要修改服务配置使其监听0.0.0.0,这样集群内其他Pod才能通过Pod IP访问。

  • 检查VPC防火墙规则
    GKE Autopilot使用VPC-native网络,确认VPC中是否有防火墙规则阻止了Pod CIDR之间的流量。检查是否存在允许集群Pod CIDR段之间TCP流量到目标端口的规则:

    1. 查看集群的Pod CIDR:gcloud container clusters describe <cluster-name> --zone <zone> | grep podCidr
    2. 检查VPC防火墙规则,确认是否有允许pod-cidr到pod-cidr的TCP流量(目标端口为Pod B的服务端口)的规则。如果没有,需要添加相应的防火墙规则。
  • 确认Pod B的容器端口与Service配置匹配
    虽然你已经能解析到Service IP并获取到Endpoint,但仍需确认:

    • Service B的targetPort是否与Pod B的containerPort一致
    • Service的selector是否正确匹配Pod B的标签
      执行命令验证:
    kubectl describe service <service-b> -n <namespace-b>
    kubectl get pods -n <namespace-b> --show-labels
    
  • 检查Pod的安全上下文与内部网络规则
    部分容器可能通过iptables或其他工具限制了入站流量,进入Pod B查看iptables规则:

    kubectl exec -n <namespace-b> <pod-b-name> -- iptables -L -n
    

    确认是否有规则阻止了来自Namespace A Pod IP段的流量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 03:15:00