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

Kubernetes其他Pod无法通过Cloud SQL Proxy连数据库,端口转发正常

问题描述

在Kubernetes私有网络环境中部署了Cloud SQL Proxy Deployment及对应的ClusterIP Service(均监听5432端口),但同Namespace下的其他Pod无法通过Service连接Cloud SQL数据库;本地通过端口转发到Proxy Pod或Service时能正常连接。

已完成排查:

  • Service与Deployment的标签匹配正常
  • 集群与Cloud SQL实例的网络配置、防火墙规则无异常
  • Proxy Pod日志无报错
  • ServiceAccount airbyte-admin已配置Cloud SQL Client权限及Workload Identity

异常表现:

  • 其他Pod中执行nc -v airbyte-db-svc 5432无报错也无连接成功提示,无法与Service建立TCP连接
  • 应用报错示例:
Caused by: com.zaxxer.hikari.pool.HikariPool$PoolInitializationException: Failed to initialize pool: Connection to airbyte-db-svc:5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.

部署Manifest如下:

apiVersion: v1
kind: Service
metadata:
  name: airbyte-db-svc
spec:
  type: ClusterIP
  ports:
    - port: 5432
      targetPort: 5432
      protocol: TCP
  selector:
    airbyte: db
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: airbyte-db-proxy
spec:
  replicas: 1
  selector:
    matchLabels:
      airbyte: db
  template:
    metadata:
      labels:
        airbyte: db
    spec:
      serviceAccountName: airbyte-admin
      containers:
      - name: cloud-sql-proxy
        image: gcr.io/cloudsql-docker/gce-proxy:latest
        command:
          - "/cloud_sql_proxy"
          - "-enable_iam_login"
          - "-ip_address_types=PRIVATE"
          - "-instances=PROJECT_ID_HERE:REGION_HERE:INSTANCE_CONNECTION_HERE=tcp:5432"
        ports:
          - containerPort: 5432
        securityContext:
          runAsNonRoot: true

问题原因及解决方案

核心原因

Cloud SQL Proxy默认仅绑定127.0.0.1:5432(即容器内部localhost),仅允许容器自身访问。Service的流量转发需要Proxy监听容器的所有网卡(0.0.0.0:5432),否则外部(包括Service转发的流量)无法连接到Proxy的端口。本地端口转发能成功是因为直接访问Pod内部的localhost端口,绕过了Service的转发逻辑。

修复步骤

修改Deployment中Cloud SQL Proxy的启动命令,将tcp:5432改为tcp:0.0.0.0:5432,强制Proxy监听容器的所有网卡:

command:
  - "/cloud_sql_proxy"
  - "-enable_iam_login"
  - "-ip_address_types=PRIVATE"
  - "-instances=PROJECT_ID_HERE:REGION_HERE:INSTANCE_CONNECTION_HERE=tcp:0.0.0.0:5432"

验证操作

  1. 更新Deployment:kubectl apply -f <你的清单文件名>.yaml
  2. 等待Proxy Pod重启完成:kubectl rollout status deployment/airbyte-db-proxy
  3. 在其他Pod中测试连接:nc -v airbyte-db-svc 5432,确认能收到连接成功的提示
  4. 启动应用验证数据库连接是否恢复正常

补充排查点(若修复后仍有问题)

  • 进入Proxy Pod执行netstat -tulpn,确认5432端口绑定的地址是0.0.0.0而非127.0.0.1
  • 检查集群是否存在网络策略,限制了Pod间TCP 5432端口的流量
  • 确认Cloud SQL实例的私有网络与Kubernetes集群的VPC处于同一网络或已配置对等连接

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 00:50:28