Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在运行Kubernetes的GKE上设置GOOGLE_应用程序_凭据_Kubernetes_Google Kubernetes Engine - Fatal编程技术网

如何在运行Kubernetes的GKE上设置GOOGLE_应用程序_凭据

如何在运行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每天都在旋转一个新的容器,我不确

在kubernetes的帮助下,我在GKE上运行日常作业,每天根据kubernetes中配置的cron启动一个新容器,并尝试将一些数据插入BigQuery

我们的设置是我们在GCP中有两个不同的项目在一个项目中我们在BigQuery中维护数据在另一个项目中我们有所有的GKE运行,所以当GKE必须与不同的项目资源交互时,我猜我必须设置一个名为GOOGLE_APPLICATION_CREDENTIALS的环境变量,它指向一个服务帐户json但是由于kubernetes每天都在旋转一个新的容器,我不确定应该如何以及在哪里设置这个变量

提前谢谢

注意:此文件由drone gke插件解析为golang模板。
这是用于加载AdUnit数据的cron作业

因此,如果您的GKE项目是project
my GKE
,并且包含您的GKE容器需要访问的服务/事物的项目是project
my data
,则一种方法是:

  • my data
    项目中创建服务帐户。为它提供所需的任何GCP角色/权限(例如
    roles/bigquery)。
    dataViewer
    如果您的
    mygke
    gke容器需要读取一些BigQuery表)。
    • 为该服务帐户创建服务帐户密钥。在以下控制台中执行此操作时,应自动下载包含SA凭据的
      .json
      文件
  • 为这些服务帐户凭据创建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