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"
验证操作
- 更新Deployment:
kubectl apply -f <你的清单文件名>.yaml - 等待Proxy Pod重启完成:
kubectl rollout status deployment/airbyte-db-proxy - 在其他Pod中测试连接:
nc -v airbyte-db-svc 5432,确认能收到连接成功的提示 - 启动应用验证数据库连接是否恢复正常
补充排查点(若修复后仍有问题)
- 进入Proxy Pod执行
netstat -tulpn,确认5432端口绑定的地址是0.0.0.0而非127.0.0.1 - 检查集群是否存在网络策略,限制了Pod间TCP 5432端口的流量
- 确认Cloud SQL实例的私有网络与Kubernetes集群的VPC处于同一网络或已配置对等连接
内容的提问来源于stack exchange,提问作者Arrajj
相关产品推荐
相关产品推荐

