我有一个 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 也应该有办法做。
提前感谢您的帮助!
我通过设置
GOOGLE_APPLICATION_CREDENTIALS
环境变量暂时解决了这个问题,如下所示:
env:
- name: GOOGLE_APPLICATION_CREDENTIALS
value: /var/run/secrets/kubernetes.io/serviceaccount/token
但是,我仍然觉得这没有必要,因为 AWS 不需要任何此类配置。