【问题标题】:Use Workload Identity to export GCP Cloud SQL databases to a bucket使用 Workload Identity 将 GCP Cloud SQL 数据库导出到存储分区
【发布时间】:2021-11-08 04:11:58
【问题描述】:

我正在 GKE 中为 export SQL databases from GCP Cloud SQL 处理 Kubernetes CronJob。我有一个 GCP Cloud SQL 实例,其 Google 服务帐户为 p848827672298-eef1pd@gcp-sa-cloud-sql.iam.gserviceaccount.com。如果我向此服务帐户添加访问和创建存储桶对象的权限,运行gcloud sql export sql ... 命令有效:数据库将导出到我的存储桶。

但是,我想做的是使用 Workload Identity 将 Kubernetes 服务帐户绑定到 p848827... Google 服务帐户,以便 CronJob 可以将 Cloud SQL 数据库导出到我的存储桶。我尝试通过运行以下命令来做到这一点:

gcloud iam service-accounts add-iam-policy-binding \
  --role roles/iam.workloadIdentityUser \
  --member "serviceAccount:PROJECT_ID.svc.id.goog[K8_NAMESPACE/K8_SERVICE_ACCOUNT]" \
  p848827672298-eef1pd@gcp-sa-cloud-sql.iam.gserviceaccount.com

(当然,我用适合我项目的值替换了PROJECT_IDK8_NAMESPACEK8_SERVICE_ACCOUNT。)

这会导致

ERROR: (gcloud.iam.service-accounts.add-iam-policy-binding) NOT_FOUND: Service account projects/PROJECT_ID/serviceAccounts/p848827672298-eef1pd@gcp-sa-cloud-sql.iam.gserviceaccount.com does not exist.        

如何将 Cloud SQL 服务帐号绑定到我的 Kubernetes 服务帐号?

【问题讨论】:

    标签: kubernetes google-cloud-sql k8s-serviceaccount


    【解决方案1】:

    希望您的 API 已启用,请尝试禁用和启用 API,一旦遇到类似问题并正常工作:gcloud services enable compute.googleapis.com https://dzone.com/articles/enabling-gke-workload-identity

    如果你有一个 serviceaccount JSON 文件,你可以直接将它注入到 POD 中,也可以作为卷挂载密码。

    kubectl create secret generic echo --from-file service-account.json
    

    现在假设您正在使用秘密注入部署应用程序

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: echo
      labels:
        app: echo
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: echo
      template:
        metadata:
          labels:
            app: echo
          name: echo
        spec:
          containers:
            - name: echo
              image: "gcr.io/hightowerlabs/echo"
              env:
                - name: "GOOGLE_APPLICATION_CREDENTIALS"
                  value: "/var/run/secret/cloud.google.com/service-account.json"
                - name: "PROJECT_ID"
                  valueFrom:
                    configMapKeyRef:
                      name: echo
                      key: project-id
                - name: "TOPIC"
                  value: "echo"
              volumeMounts:
                - name: "service-account"
                  mountPath: "/var/run/secret/cloud.google.com"
                - name: "certs"
                  mountPath: "/etc/ssl/certs"
          volumes:
            - name: "service-account"
              secret:
                secretName: "echo"
            - name: "certs"
              hostPath:
                path: "/etc/ssl/certs"
    

    例如:https://github.com/kelseyhightower/gke-service-accounts-tutorial#google-cloud-service-accounts-with-google-container-engine-gke---tutorial

    【讨论】:

    • 当我运行命令时,我 确实 将所有大写的参数替换为我的项目的正确值。在发布我的问题时,我使用通用字符串更清楚地表明应该去那里。
    猜你喜欢
    • 1970-01-01
    • 2021-05-06
    • 2020-12-03
    • 1970-01-01
    • 2021-03-01
    • 2022-06-12
    • 2020-10-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多