创建SSH秘密kubernetes密钥文件

问题描述:

如果我使用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

秘密官方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