创建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预计
这是一个正确的做法,或任何人都可以请详细说明这个应该怎么做?
秘密官方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上的问题的权限:
谢谢 - 我从该公关看到,它实际上是1.4而不是1.3。另外为了完整起见,你在这里发布的文件是不准确的,因为它实际上声明它将装载一个名为id_rsa的文件,并且装载指的是一个叫做ssh-key-secret的秘密,但是kubectl行创建了一个叫做my-secret的秘密。 –
我看到了,随时提出编辑,我会接受它,如果这不可行,我会在今天晚些时候添加编辑。 – ffledgling
似乎这样做并不保留换行符,到目前为止,我最终有没有换行符使用键的麻烦。解决方法存在? – Ben
如果你想要的名称为id_rsa,你应该是正在执行'--from-file = id_rsa =。/。ssh/id_rsa' – ffledgling
id_rsa不是有效的文件名 - 正则表达式验证失败。即使我生成一个json文件并尝试编辑它并使用id_rsa作为文件名,它也不会加载该秘密 –
我看,似乎Kubernetes有一个奇怪的限制,其中秘密名称(以及其他名称,如标签) ,必须是有效的DNS名称,符合'[a-z0-9]([ - a-z0-9] * [a-z0-9])'这里是[相关代码](https:// github。 COM/kubernetes/kubernetes/BLOB/7f2d0c0f710617ef1f5eec4745b23e0d3f360037 /包装/ UTIL/validation.go#L26) – ffledgling