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

配置GCP Cloud MySQL Proxy网络策略后数据库连接失败排查

问题分析与解决方案

核心问题定位

你的Network Policy配置存在两处关键问题:

  • 冗余端口开放:错误添加了3306/TCP端口,这是cloudsql-proxy在Pod内部监听的端口,应用容器连接localhost:3306属于Pod内部流量,不受出站Network Policy限制,完全无需开放。
  • 元数据服务规则不明确:你添加的第二个egress规则允许到169.254.169.254/32的所有端口,但部分CNI插件(如Calico)需要明确指定端口才能生效;同时规则拆分的逻辑导致流量匹配异常,最终阻止了cloudsql-proxy访问GCP元数据服务(端口80),这就是错误日志中dial tcp 169.254.169.254:80: i/o timeout的原因。

修正后的Network Policy配置

kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
  name: {{ template "name" . }}
spec:
  podSelector:
    matchLabels:
      app: {{ template "name" . }}
  policyTypes:
  - Egress
  egress:
  # 允许DNS解析(对接集群内部DNS服务)
  - ports:
    - port: 53
      protocol: UDP
    - port: 53
      protocol: TCP
  # 允许访问sqladmin.googleapis.com(443)和Cloud SQL实例(3307)
  - ports:
    - port: 443
      protocol: TCP
    - port: 3307
      protocol: TCP
  # 允许访问GCP元数据服务(获取服务账号权限凭证)
  - to:
    - ipBlock:
        cidr: 169.254.169.254/32
    ports:
    - port: 80
      protocol: TCP

配置说明

  • 拆分egress规则,每个规则对应一类业务流量,逻辑清晰易维护。
  • 明确指定元数据服务的80/TCP端口,确保cloudsql-proxy能正常获取权限凭证。
  • 移除无用的3306/TCP端口,缩小出站流量范围,提升安全性。

验证步骤

  1. 应用修正后的配置:
    kubectl apply -f <your-network-policy-file>.yaml
    
  2. 查看cloudsql-proxy容器日志,确认元数据服务访问错误消失:
    kubectl logs <pod-name> -c cloudsql-proxy
    
  3. 测试应用与数据库的连接是否恢复正常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 16:15:38