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

配置GKE EGRESS访问AWS RDS失败,求非Terraform/VPC/VPN类解决方案

解决GKE通过NetworkPolicy访问AWS RDS的连通问题

问题分析

你当前的NetworkPolicy仅允许Pod访问指定的Google静态IP,缺少两个关键放行规则:

  • 访问AWS RDS公网IP的流量
  • Pod解析RDS域名所需的DNS流量
    另外需要注意:公有GKE集群中,Pod的出口流量使用节点公网IP,而非Pod自身IP,因此RDS安全组必须将GKE节点的公网IP加入白名单。

修正后的NetworkPolicy配置

替换占位符后应用配置:

  • yy.yyy.yy.yy/32:AWS RDS的公网IP(可从AWS控制台获取)
  • 5432:你的RDS服务端口(MySQL用3306,PostgreSQL用5432等)
  • 确认DNS标签:GKE新版本可能使用coredns作为DNS服务,可通过kubectl get pods -n kube-system查看标签
kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
  name: test-egress
spec:
  podSelector:
    matchLabels:
      app: testapp
      networking/allow-internet-egress: "true"
  policyTypes:
    - Egress
  egress:
    # 允许访问目标RDS实例
    - to:
      - ipBlock:
          cidr: yy.yyy.yy.yy/32
      ports:
      - protocol: TCP
        port: 5432
    # 允许DNS解析(集群内置DNS服务)
    - to:
      - namespaceSelector:
          matchLabels:
            kubernetes.io/metadata.name: kube-system
        podSelector:
          matchLabels:
            k8s-app: kube-dns
      ports:
      - protocol: UDP
        port: 53
      - protocol: TCP
        port: 53
    # 保留原有的Google静态IP访问规则(如果需要)
    - to:
      - ipBlock:
          cidr: xx.xxx.xx.xxx/32

验证步骤

  1. 检查Pod标签匹配:确保目标Pod带有app: testapp和networking/allow-internet-egress: "true"标签,执行kubectl get pods --show-labels确认。
  2. 确认RDS安全组配置:将GKE所有节点的公网IP添加到RDS安全组的入站规则中(对应RDS服务端口)。
  3. 测试Pod连通性:进入Pod内部执行测试命令,例如:
    kubectl exec -it <你的Pod名称> -- telnet yy.yyy.yy.yy 5432
    
    若能建立连接则说明网络规则生效。
  4. 检查NetworkPolicy状态:执行kubectl describe networkpolicy test-egress,确认规则已正确应用且PodSelector匹配目标Pod。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 06:54:32