如何在kubernetes中使用谷歌云存储?

时间:2016-11-14 00:00:53

标签: google-app-engine google-cloud-storage kubernetes google-cloud-platform

我正在使用节点js&我想把文件上传到我的桶里。我设置了这个秘密:

NAME                         TYPE                                  DATA      AGE
cloudsql-oauth-credentials   Opaque                                1         5d
default-token-dv9kj          kubernetes.io/service-account-token   3         5d

service_account确实可以访问我的Google云端存储API,因为我已经将其设置为&在本地(在我自己的计算机上)测试它。我不确定如何引用服务帐户 json文件的位置?!

这是我的卷mount:

"volumes": [{
    "name": "cloudsql-oauth-credentials",
     "secret": {
         "secretName": "cloudsql-oauth-credentials"
     }
 }

以下是我设置google-cloud存储变量的代码:

var gcs = require('@google-cloud/storage')({
  projectId: 'projectID-38838',
  keyFilename: process.env.NODE_ENV == 'production' 
      ? JSON.parse(process.env.CREDENTIALS_JSON) // Parsing js doesn't work
      : '/Users/james/auth/projectID-38838.json' // This works locally
});
var bucket = gcs.bucket('bucket-name');

现在,如果我想在kubernetes上的docker容器中使用它,我将不得不引用json文件位置......但我不知道它在哪里?!

我已尝试将Credentials文件设置为环境变量,但我无法将js对象解析为 keyFilename 对象。我必须解析一个文件位置。我像这样设置env变量:

{           
 "name": "CREDENTIALS_JSON",
  "valueFrom": {
        "secretKeyRef": {
             "name": "cloudsql-oauth-credentials",
             "key": "credentials.json"
        }
   }
 },

如何在kubernetes pod中引用service_account json文件的位置?!

1 个答案:

答案 0 :(得分:6)

使用秘密作为文件从广告连接一节中查看here

基本上,在安装密钥卷时需要指定两件事。你有一点+一些额外的信息。 密钥可能会有一些冗余,但这就是我的工作而且有效。

创建密钥时,使用密钥创建密钥:
kubectl create secret generic cloudsql-oauth-credentials --from-file=creds=path/to/json

然后

"volumes": [{
    "name": "cloudsql-oauth-credentials",
    "secret": {
        "secretName": "cloudsql-oauth-credentials"
        "items": [{
            "key": "creds",
            "path": "cloudsql-oauth-credentials.json"
        }]

    }
}

但是还要指定它在容器定义中的位置(在Pod,部署,复制控制器中 - 无论你使用什么):

"spec": {
    "containers": [{
        "name": "mypod",
        "image": "myimage",
        "volumeMounts": [{
            "name": "cloudsql-oauth-credentials",
            "mountPath": "/etc/credentials",
            "readOnly": true
        }]
}],

该文件将映射到/etc/credentials/cloudsql-oauth-credentials.json