0

我正在使用节点js &想将文件上传到我的存储桶。我设置了秘密:如何在kubernetes内部使用谷歌云存储?

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

的service_account做,因为我有设定已经&测试在本地(我自己的电脑上)访问我的谷歌云存储API。我不确定如何参考服务帐户 json文件的位置?

这里是我的卷装入:

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

这里是我设置了谷歌云存储变量的代码:

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上的码头容器,我将不得不引用json文件位置......但我不知道它在哪里?!

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

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

我如何可以参考我的kubernetes吊舱内service_account JSON文件的位置?

回答

4

查看here的章节使用秘密作为来自Pod的文件

基本上,你需要在安装秘密卷时指定两件事情。你有一些额外的信息。 可能有一些关键的冗余,但这是我做的,它的工作原理。

当创建一个秘密,用钥匙创建它:
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" 
     }] 

    } 
} 

但随后还指定它将出现在容器definiton(在波德,部署,复制控制器 - 无论你使用什么):

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

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