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

如何为两个GCP项目的GKE Pod配置网络?共享VPC未生效

故障原因分析与排查步骤

可能的核心原因

  1. NodePort服务访问方式误解:你提到的10.0.37.97是服务的ClusterIP,而非NodePort的访问入口。NodePort服务需要通过集群节点的内部IP + 分配的NodePort端口访问,直接访问ClusterIP仅在同一集群内有效。
  2. 共享VPC防火墙规则缺失:默认GKE防火墙规则仅允许同一集群内的流量访问NodePort,跨集群(即使在同一共享VPC)的流量会被拦截。
  3. 跨集群路由配置异常:虽然共享VPC子网包含两个集群的Pod/服务网段,但可能缺少指向tts集群节点所在网段的路由,导致gateway集群Pod无法到达tts节点。

分步排查步骤

步骤1:确认NodePort服务的正确访问信息

在tts集群中执行以下命令,获取服务的NodePort端口和节点内部IP:

# 获取服务的NodePort端口
kubectl get svc <你的服务名称> -o jsonpath='{.spec.ports[0].nodePort}'

# 获取tts集群所有节点的内部IP
kubectl get nodes -o jsonpath='{.items[*].status.addresses[?(@.type=="InternalIP")].address}'

尝试用gateway集群的Pod访问 tts节点内部IP:NodePort端口,而非直接访问ClusterIP 10.0.37.97。

步骤2:检查共享VPC的防火墙规则

在宿主项目(HOST_PROJECT_ID)的VPC网络控制台中操作:

  1. 进入「防火墙」页面,确认是否存在允许10.192.0.0/14(gateway集群Pod网段)访问tts集群节点IP段的NodePort端口规则
  2. 若没有,创建新规则:
    • 名称:allow-gateway-pod-to-tts-nodeport
    • 网络:shared-net
    • 方向:入站
    • 目标:选择tts集群的节点标签(如cloud.google.com/gke-nodepool=tts-nodepool)
    • 来源IP范围:10.192.0.0/14
    • 协议和端口:tcp:30000-32767(对应NodePort默认端口范围)

步骤3:验证跨集群节点的可达性

在gateway集群的Pod中执行以下命令,测试网络连通性:

# ping tts集群的节点内部IP,确认基础网络连通
ping <tts节点内部IP>

# 测试NodePort端口是否开放
telnet <tts节点内部IP> <NodePort端口>

如果ping不通,需检查宿主项目VPC的路由配置:

  • 进入「路由」页面,确认存在指向tts集群节点所在子网段的路由,下一跳为默认网关
  • 确认两个集群的节点都在共享子网tts内,且子网IP段覆盖所有节点IP

步骤4:检查共享VPC权限配置

确认服务项目已被正确授权使用共享VPC:

  1. 在宿主项目的IAM页面,找到服务项目的GKE服务账号(格式:service-<服务项目ID>@container-engine-robot.iam.gserviceaccount.com)
  2. 确认该账号拥有Compute Network User角色,确保集群节点能正常使用共享VPC资源

步骤5:二次确认网络策略状态

即使配置显示Network policy Disabled,仍需检查是否存在残留规则:

# 在tts集群执行,检查所有命名空间的网络策略
kubectl get networkpolicies --all-namespaces

如果存在限制跨集群流量的规则,删除或调整规则以允许gateway集群Pod的访问。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 07:40:31