Cloud SQL代理无法使用具有相同权限的第二个服务帐户连接到数据库

时间:2018-07-11 13:52:27

标签: google-cloud-platform google-cloud-sql service-accounts google-kubernetes-engine cloud-sql-proxy

按照教程Connecting [Postgres] from Kubernetes Engine进行操作之后,我能够通过Cloud SQL代理和授予“ SQL客户端”,“ SQL编辑器”和“ SQL”的服务帐户,将我的应用服务器连接到Postgres数据库管理员”权限。

但是,在第二次按照本教程进行操作(创建第二个数据库,以供另一个集群使用)并因此创建了具有相同权限的第二个服务帐户之后,我意识到只能连接第二个Cloud SQL数据库使用我的第一个服务帐户!

每次我尝试使用第二个服务帐户(再次授予访问相同的3个权限!)时,我都遇到couldn't connect to "project:region:instance"错误...

上下文:我知道Cloud SQL尚不支持基于实例的权限,但是如果可能的话,我想为我的2个数据库中的每一个拥有专用的服务帐户,并且不理解为什么第二个具有相同权限的服务帐户不起作用。

1 个答案:

答案 0 :(得分:2)

首先,您只需要 Cloud SQL Client 角色作为您的Cloud sql代理。不需要其他角色。

第二,您是否正在使用来自同一kubernetes集群的应用服务器。您是否要为两个服务帐户使用kubernetes相同的秘密 cloudsql-instance-credentials

如果是,那就是问题。您需要使用第二个服务帐户的新凭据json更新 cloudsql-instance-credentials 机密。

或者,您可以保留两个秘密对象,分别为 cloudsql-instance-credentials-service-account-1 cloudsql-instance-credentials-service-account-2 。并且,更新config yml以安装所需的秘密,如下所示,

  - name: cloudsql-proxy
    image: gcr.io/cloudsql-docker/gce-proxy:1.09
    command: ["/cloud_sql_proxy", "--dir=/cloudsql",
              "-instances=<instance_connection_name>=tcp:5432",
              "-credential_file=/secrets/cloudsql/credentials.json"]
    volumeMounts:
      - name: cloudsql-instance-credentials
        mountPath: /secrets/cloudsql
        readOnly: true
  volumes:
    - name: cloudsql-instance-credentials
      secret:
        secretName: cloudsql-instance-credentials-service-account-2