我已经在Kubernetes中部署了云SQL代理和附加到它的服务。代理和服务都在侦听端口5432。其他Pod无法通过代理建立到云SQL数据库的连接,但当我将端口转发到代理的Pod或服务时,我可以从本地主机连接到数据库,没有任何问题。
Kubernetes群集和云SQL示例都是私有的。我已经检查了服务和部署标签、服务和Pod网络配置、防火墙规则和网络配置,但仍然无法解决该问题。
所有pod都在同一个命名空间中,代理的日志显示没有错误,当我在其他pod中运行nc -v $service_name $port
时,它没有产生错误,也没有显示任何故障的迹象,甚至没有打印连接成功。问题是这些pod无法建立到服务的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.
如果需要,这里是部署服务和代理的清单:
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
serviceAccount airbyte-admin
具有良好的"云SQL客户端"和在GCP项目中配置的workloadIdentity。
问题可能是什么?我该如何解决?
1条答案
按热度按时间fjnneemd1#
CloudSQL代理默认监听localhost,如果你想通过服务公开它,你需要在cloud_sql_proxy命令选项中添加
--address 0.0.0.0
。