从 Kubernetes 中的 pod 运行 gcloud

问题描述 投票:0回答:1

我有一个 cronjob,它使用服务帐户来承担 IAM 角色以对 GCP 帐户进行身份验证。但是,我无法完全使用 K8s 服务帐户来执行 gcloud 命令。

apiVersion: v1
kind: ServiceAccount
metadata:
  annotations:
    iam.gke.io/gcp-service-account: gke-my-service-account@$(GCP_PROJECT_ID).iam.gserviceaccount.com
  name: my-service-account

在 Cronjob 中:

  command:
    - "/bin/sh"
    - "-c"
    - |
      gcloud storage cp $FILE gs://my-gcs-bucket/$FILE

所以用这种方式失败了:

ERROR: (gcloud.storage.cp) You do not currently have an active account selected.
Please run:

  $ gcloud auth login

to obtain new credentials.

If you have already logged in with a different account, run:

  $ gcloud config set account ACCOUNT

to select an already authenticated account to use.

但是,如果我添加,

gcloud config set account $GCP_SERVICE_ACCOUNT_EMAIL
,它就有效。

  command:
    - "/bin/sh"
    - "-c"
    - |
      gcloud config set account $GCP_SERVICE_ACCOUNT_EMAIL
      gcloud storage cp $FILE gs://my-gcs-bucket/$FILE

但我不想使用第二种方法,因为它有效。本质上 gcloud 命令应该能够运行,因为 cronjob 中使用的绑定服务帐户可以执行此身份验证。

那么这有什么问题呢?如何在不手动配置 gcloud 的情况下使用 gcloud cli?我可以使用服务帐户注释运行 AWS cli,并且不需要手动进行任何配置。所以我相信 GCP 也应该有办法做。

提前感谢您的帮助!

kubernetes google-kubernetes-engine gcloud google-iam
1个回答
0
投票

我通过设置

GOOGLE_APPLICATION_CREDENTIALS
环境变量暂时解决了这个问题,如下所示:

env:
  - name: GOOGLE_APPLICATION_CREDENTIALS
    value: /var/run/secrets/kubernetes.io/serviceaccount/token

但是,我仍然觉得这没有必要,因为 AWS 不需要任何此类配置。

© www.soinside.com 2019 - 2024. All rights reserved.