繁体   English   中英

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

[英]Why can't other pods connect to Cloud SQL through Kubernetes proxy and service when portforwarding to the proxy and the service works?

我已经在 Kubernetes 中部署了 Cloud SQL 代理和附加到它的服务。 代理和服务都在端口 5432 上侦听。其他 pod 无法通过代理建立到 Cloud SQL 数据库的连接,但是当我端口转发到代理的 pod 或服务时,我能够从我的本地主机连接到数据库没有任何问题。

Kubernetes 集群和 Cloud 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具有良好的“Cloud SQL Client”和在 GCP 项目中配置的 workloadIdentity。

可能是什么问题,我该如何解决?

CloudSQL 代理默认在本地主机上侦听。 如果您想通过服务公开它,您需要将--address 0.0.0.0添加到您的 cloud_sql_proxy 命令选项中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM