Google Cloud SQL 代理找不到默认凭据



我正在尝试在本地运行Google Cloud SQL代理:

$ ./cloud_sql_proxy -instances project-name:region-name:instance-id tcp:3306

但是它返回

google: could not find default credentials. See https://developers.google.com/accounts/docs/application-default-credentials for mor information.

我的Google Cloud SDK已经安装并登录到Google。

我该如何修复?

两个问题可能会引起您的问题。

查找登录的内容,使用:

gcloud auth login

1。您没有应用程序默认凭据

如果您有GCLOUD的最新版本,您将获得:

WARNING: `gcloud auth login` no longer writes application default credentials.

使您的本地应用程序使用您需要执行的凭据(参考):

gcloud auth application-default login

如果您看不到此警告,请考虑更新GCLOUD,

gcloud components update

2。您尚未定义您的项目

登录后,您应该看到:

Your current project is [project-id].

再次解决两个解决方案:

a。关联一个项目

如果您没有看到这个,请(参考):

gcloud config set project PROJECT_ID

b。在呼叫中使用全局--project标志

在您的命令中,一个项目:

.cloud_sql_proxy -instances=project-id:region-name:instance-id=tcp:3306 --project=project-id

Google应用程序默认凭据与gcloud凭据分开管理。

使用

gcloud auth application-default login

而不是将用户凭据设置为应用程序默认值。有关更多信息,请参见参考。

以前gcloud auth login这样做了,但是使用了最新的Cloud SDK版本,情况不再是这种情况。

请注意,切换GCLOUD配置或设置帐户不会更新应用程序默认凭据。只能使用gcloud auth application-default中的命令来管理这些。

还要将服务帐户用作应用程序默认凭据,您可以通过从开发人员控制台下载其JSON密钥直接使用它。

如果您在CI/CD环境中不访问浏览器:

,或者如果您只想自动化该过程。

而不是运行gcloud auth application-default login,您需要使用变量$GOOGLE_APPLICATION_CREDENTIALS

来公开服务帐户JSON文件的位置

例如。echo "export GOOGLE_APPLICATION_CREDENTIALS=${TF_VAR_gcp_service_account_file_loc}" >> $BASH_ENV(如果您需要在步骤/作业之间移动ENV VAR)。$BASH_ENV是Circleci暴露的特殊属性,如果您使用其他CI/CD工具,则需要查找Bash配置文件的位置。

或简单地在同一步骤中使用的export GOOGLE_APPLICATION_CREDENTIALS=[path-to-service-account-json-file]

在这种情况下,使用cloud_sql_proxy,该方法是使用GCP-GSA(服务帐户),下载云SQL代理:

wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O cloud_sql_proxy
chmod +x cloud_sql_proxy

创建代理用户:

gcloud iam service-accounts create proxy-user --display-name "proxy-user"
gcloud iam service-accounts list

[service_account_email]是SQL实例详细信息上的电子邮件。

gcloud projects add-iam-policy-binding [PROJECT_ID] --member 
serviceAccount:[SERVICE_ACCOUNT_EMAIL] --role roles/cloudsql.client
gcloud iam service-accounts keys create key.json --iam-account [SERVICE_ACCOUNT_EMAIL]

gcloud sql instances describe [INSTANCE_ID] | grep connectionName

为Kube Engine创建一个键JSON文件

./cloud_sql_proxy -instances=[INSTANCE_CONNECTION_NAME]=tcp:3306 -credential_file=key.json &

kubectl create secret generic cloudsql-instance-credentials --from-file=credentials.json=key.json

您的部署:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: <DEPLOYMENT-NAME>
spec:
  selector:
    matchLabels:
      app: <APPLICATION-NAME>
  template:
    metadata:
      labels:
        app: <APPLICATION-NAME>
    spec:
      serviceAccountName: <KSA-NAME>
      containers:
      - name: cloud-sql-proxy
        image: gcr.io/cloudsql-docker/gce-proxy:1.17
        command:
          - "/cloud_sql_proxy"
          - "-instances=<INSTANCE_CONNECTION_NAME>=tcp:<DB_PORT>"
        securityContext:
          runAsNonRoot: true

相关内容

  • 没有找到相关文章