当端口转发到代理和服务时,为什么其他Pod无法通过Kubernetes代理和服务连接到Cloud SQL?

xwbd5t1u  于 2022-12-26  发布在  Kubernetes
关注(0)|答案(1)|浏览(170)

我已经在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。
问题可能是什么?我该如何解决?

fjnneemd

fjnneemd1#

CloudSQL代理默认监听localhost,如果你想通过服务公开它,你需要在cloud_sql_proxy命令选项中添加--address 0.0.0.0

相关问题