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