如何在运行Kubernetes的GKE上设置GOOGLE_应用程序_凭据
在kubernetes的帮助下,我在GKE上运行日常作业,每天根据kubernetes中配置的cron启动一个新容器,并尝试将一些数据插入BigQuery 我们的设置是我们在GCP中有两个不同的项目在一个项目中我们在BigQuery中维护数据在另一个项目中我们有所有的GKE运行,所以当GKE必须与不同的项目资源交互时,我猜我必须设置一个名为GOOGLE_APPLICATION_CREDENTIALS的环境变量,它指向一个服务帐户json但是由于kubernetes每天都在旋转一个新的容器,我不确定应该如何以及在哪里设置这个变量 提前谢谢 注意:此文件由drone gke插件解析为golang模板。如何在运行Kubernetes的GKE上设置GOOGLE_应用程序_凭据,kubernetes,google-kubernetes-engine,Kubernetes,Google Kubernetes Engine,在kubernetes的帮助下,我在GKE上运行日常作业,每天根据kubernetes中配置的cron启动一个新容器,并尝试将一些数据插入BigQuery 我们的设置是我们在GCP中有两个不同的项目在一个项目中我们在BigQuery中维护数据在另一个项目中我们有所有的GKE运行,所以当GKE必须与不同的项目资源交互时,我猜我必须设置一个名为GOOGLE_APPLICATION_CREDENTIALS的环境变量,它指向一个服务帐户json但是由于kubernetes每天都在旋转一个新的容器,我不确
这是用于加载AdUnit数据的cron作业
因此,如果您的GKE项目是project
my GKE
,并且包含您的GKE容器需要访问的服务/事物的项目是projectmy data
,则一种方法是:
- 在
项目中创建服务帐户。为它提供所需的任何GCP角色/权限(例如my data
如果您的roles/bigquery)。 dataViewer
gke容器需要读取一些BigQuery表)。mygke
- 为该服务帐户创建服务帐户密钥。在以下控制台中执行此操作时,应自动下载包含SA凭据的
文件.json
- 为该服务帐户创建服务帐户密钥。在以下控制台中执行此操作时,应自动下载包含SA凭据的
- 为这些服务帐户凭据创建Kubernetes秘密资源。它可能看起来像这样:
apiVersion: v1 kind: Secret metadata: name: my-data-service-account-credentials type: Opaque data: sa_json: <contents of running 'base64 the-downloaded-SA-credentials.json'>
- 在容器中设置
环境变量以指向已装载凭据的路径:GOOGLE\u APPLICATION\u CREDENTIALS
[...] spec: containers: - name: my-container env: - name: GOOGLE_APPLICATION_CREDENTIALS value: /etc/gcp/sa_credentials.json
因此,任何官方GCP客户(例如,GCP Python客户端、GCP Java客户端、gcloud CLI等应尊重
GOOGLE_应用程序_凭据
env-var,并在发出API请求时,自动使用您为其创建并装载凭据.json
文件的my data
服务帐户的凭据。是否执行GOOGLE_应用程序_凭据
如果只是作为一个env-var提供,或者它总是指向一个挂载的文件,那么它也可以工作。我相信GOOGLE\u应用程序\u凭据
env-var的值总是必须是一个指向凭据文件的路径,才能正常工作。例如,对base64进行编码或其他一些凭据表示als直接作为GOOGLE\u应用程序\u凭据的值将不起作用。
apiVersion: v1
kind: Secret
metadata:
name: my-data-service-account-credentials
type: Opaque
data:
sa_json: <contents of running 'base64 the-downloaded-SA-credentials.json'>
[...]
spec:
containers:
- name: my-container
volumeMounts:
- name: service-account-credentials-volume
mountPath: /etc/gcp
readOnly: true
[...]
volumes:
- name: service-account-credentials-volume
secret:
secretName: my-data-service-account-credentials
items:
- key: sa_json
path: sa_credentials.json
[...]
spec:
containers:
- name: my-container
env:
- name: GOOGLE_APPLICATION_CREDENTIALS
value: /etc/gcp/sa_credentials.json