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

GCP同VPC下K8s集群无法连接Redis VM问题排查求助

解决Kubernetes Pod无法连通同子网Redis VM的问题

看起来你遇到的是典型的跨网段Pod到VM的连通性问题——虽然K8s节点和Redis VM在同一个子网,但Pod用的是独立的集群内部网段,得从几个关键配置入手排查和修改:

1. 检查并配置VPC路由规则

你的Pod网段是10.12.0.0/14,Redis VM在10.128.0.0/20子网,VPC需要明确知道如何转发两个网段之间的流量:

  • 登录GCP控制台或用gcloud命令查看VPC路由表,确认是否存在目标为10.12.0.0/14的路由,下一跳指向K8s集群的节点实例组或节点IP。
  • 如果没有这条路由,手动添加:
    gcloud compute routes create k8s-pod-route \
      --network=your-vpc-name \
      --destination-range=10.12.0.0/14 \
      --next-hop-instance-group=your-k8s-node-ig \
      --next-hop-instance-group-zone=your-zone
    
    这条路由会告诉VPC:所有发往Pod网段的流量都转发到K8s节点,再由节点通过CNI插件转发给对应Pod。

2. 调整VPC防火墙规则

子网规则只覆盖VM的IP范围,Pod网段不在其中,所以需要单独创建双向流量允许规则:

  • 创建允许10.12.0.0/14(Pod网段)和10.128.0.0/20(子网)之间所有ICMP、TCP、UDP流量的规则:
    gcloud compute firewall-rules create allow-pod-to-vm \
      --network=your-vpc-name \
      --allow=icmp,tcp,udp \
      --source-ranges=10.12.0.0/14,10.128.0.0/20 \
      --target-tags=k8s-node,redis-vm
    
    注意target-tags要对应你的K8s节点和Redis VM的实际标签,确保规则作用到正确实例上。

3. 检查Kubernetes节点的iptables规则

K8s的kube-proxy和CNI插件会在节点上添加iptables规则,可能误阻止了Pod到外部VM的流量:

  • 登录任意K8s节点,执行iptables-save | grep 10.128.0.0,查看是否存在拒绝该子网流量的规则。
  • 如果发现DROP/REJECT规则,检查CNI配置(比如Calico的NetworkPolicy或自定义iptables规则),确保允许Pod访问10.128.0.0/20网段。

4. 排查Kubernetes NetworkPolicy

如果集群启用了NetworkPolicy,可能默认拒绝了Pod的出站流量:

  • 执行kubectl get networkpolicy --all-namespaces,查看是否存在全局拒绝策略。
  • 如果有流量限制,添加一条允许Pod访问目标子网的规则,示例:
    apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    metadata:
      name: allow-pod-to-redis-subnet
      namespace: your-namespace
    spec:
      podSelector: {}
      policyTypes:
      - Egress
      egress:
      - to:
        - ipBlock:
            cidr: 10.128.0.0/20
        ports:
        - protocol: TCP
          port: 6379 # 按需调整为你的Redis实际端口
        - protocol: ICMP
    

5. 确认GKE集群网络模式(若使用GKE)

如果是GKE的非VPC-native模式(Pod用独立网段),确保ip-alias未被错误启用。执行gcloud container clusters describe your-cluster-name查看networkConfig字段,确认ipAlias为false(路由模式)。

按上述步骤逐一排查调整,应该就能解决Pod和Redis VM之间的连通问题了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:08:19