2016-09-19 201 views
3

如果我使用kubectl從一個id_rsa文件中創建一個祕密:創建SSH祕密kubernetes密鑰文件

kubectl create secret generic hcom-secret --from-file=ssh-privatekey=./.ssh/id_rsa 

,然後裝入祕密入容器

"volumeMounts": [ 
     {"name": "cfg", "readOnly": false, "mountPath": "/home/hcom/.ssh"} 
     ] 

"volumes": [ 
     {"name": "cfg", "secret": { "secretName": "hcom-ssh" }} 
    ], 

得到的文件是不id_rsa但SSH-專用密鑰,並且都在它的許可證是不是600,SSH預計

這是一個正確的做法,或任何人都可以請詳細說明這個應該怎麼做?

+0

如果你想要的名稱爲id_rsa,你應該是正在執行'--from-file = id_rsa =。/。ssh/id_rsa' – ffledgling

+0

id_rsa不是有效的文件名 - 正則表達式驗證失敗。即使我生成一個json文件並嘗試編輯它並使用id_rsa作爲文件名,它也不會加載該祕密 –

+0

我看,似乎Kubernetes有一個奇怪的限制,其中祕密名稱(以及其他名稱,如標籤) ,必須是有效的DNS名稱,符合'[a-z0-9]([ - a-z0-9] * [a-z0-9])'這裏是[相關代碼](https:// github。 COM/kubernetes/kubernetes/BLOB/7f2d0c0f710617ef1f5eec4745b23e0d3f360037 /包裝/ UTIL/validation.go#L26) – ffledgling

回答

7

祕密官方Kubernetes文件覆蓋this exact use-case

要創建的祕密,使用:

$ kubectl create secret generic my-secret --from-file=ssh-privatekey=/path/to/.ssh/id_rsa --from-file=ssh-publickey=/path/to/.ssh/id_rsa.pub 

要安裝的祕密在你的容器,使用下面的吊艙配置:

{ 
    "kind": "Pod", 
    "apiVersion": "v1", 
    "metadata": { 
    "name": "secret-test-pod", 
    "labels": { 
     "name": "secret-test" 
    } 
    }, 
    "spec": { 
    "volumes": [ 
     { 
     "name": "secret-volume", 
     "secret": { 
      "secretName": "my-secret" 
     } 
     } 
    ], 
    "containers": [ 
     { 
     "name": "ssh-test-container", 
     "image": "mySshImage", 
     "volumeMounts": [ 
      { 
      "name": "secret-volume", 
      "readOnly": true, 
      "mountPath": "/etc/secret-volume" 
      } 
     ] 
     } 
    ] 
    } 
} 

Kubernetes實際上並沒有辦法控制文件目前爲止的祕密權限,但a recent Pull Request確實增加了對改變祕密路徑的支持。與1.3添加這種支持按this comment

下面是相關的Github上的問題的權限:

+0

謝謝 - 我從該公關看到,它實際上是1.4而不是1.3。另外爲了完整起見,你在這裏發佈的文件是不準確的,因爲它實際上聲明它將裝載一個名爲id_rsa的文件,並且裝載指的是一個叫做ssh-key-secret的祕密,但是kubectl行創建了一個叫做my-secret的祕密。 –

+0

我看到了,隨時提出編輯,我會接受它,如果這不可行,我會在今天晚些時候添加編輯。 – ffledgling

+0

似乎這樣做並不保留換行符,到目前爲止,我最終有沒有換行符使用鍵的麻煩。解決方法存在? – Ben