如何将 k8 密码放入 docker cmd 参数?
How to put k8 secret in docker cmd argument?
我正在尝试设置 Azure Face recognition container,但想知道如何将 k8 密钥用作 Docker 命令 "argument."
这有效,但我需要用我的 k8 密钥替换 ApiKey。
{
"kind": "Deployment",
"spec": {
"template": {
"spec": {
"containers": [
{
"name": "azure-face",
"args": [
"Eula=accept",
"Billing=https://microsoft.com",
"ApiKey=123"
]
}
]
}
}
}
}
像这样创建秘密:
kubectl create secret generic azure-api-key --from-literal=azure-api-key="123"
尝试像这样更改容器参数,但它不起作用 - 参数未按预期传递:
(还尝试了其他变体,如 ApiKey=${AZURE_API_KEY})
"containers": [
{
"args": [
"Eula=accept",
"Billing=https://microsoft.com",
"ApiKey=$AZURE_API_KEY"
],
"env": [
{
"name": "AZURE_API_KEY",
"valueFrom": {
"secretKeyRef": {
"name": "azure-api-key",
"key": "azure-api-key"
}
}
}
]
}
]
也执行了 docker exec 并从容器内部验证:
$ echo $AZURE_API_KEY
$ 123
看起来这就是问题所在,感谢@Blokje5:
Note: The environment variable appears in parentheses, "$(VAR)". This
is required for the variable to be expanded in the command or args
field.
我试过 ${VAR} 而不是 $(VAR)。
对 API 密钥等敏感信息使用环境变量不一定是最佳做法。这是一个公开争论什么更好,但我个人认为使用文件更好,主要是因为收集环境变量用于日志记录等目的很常见。
因此,我会将机密作为文件装载并在命令行中读取它,类似于 API_KEY=$(cat api_key.txt)
。我认为这应该可行,但需要验证。通常,当时提供的大多数图像都支持配置文件 - 所以我会首先研究这个,例如如果 Azure 人脸识别支持配置文件。
最后一点,如果您想阅读更多关于 Kubernetes 秘密以及如何在 Git 上管理它们的信息,请查看 this blog post(完全披露:我是作者),其中涵盖安全管理 Kubernetes 机密的所有不同选项。
我正在尝试设置 Azure Face recognition container,但想知道如何将 k8 密钥用作 Docker 命令 "argument."
这有效,但我需要用我的 k8 密钥替换 ApiKey。
{
"kind": "Deployment",
"spec": {
"template": {
"spec": {
"containers": [
{
"name": "azure-face",
"args": [
"Eula=accept",
"Billing=https://microsoft.com",
"ApiKey=123"
]
}
]
}
}
}
}
像这样创建秘密:
kubectl create secret generic azure-api-key --from-literal=azure-api-key="123"
尝试像这样更改容器参数,但它不起作用 - 参数未按预期传递: (还尝试了其他变体,如 ApiKey=${AZURE_API_KEY})
"containers": [
{
"args": [
"Eula=accept",
"Billing=https://microsoft.com",
"ApiKey=$AZURE_API_KEY"
],
"env": [
{
"name": "AZURE_API_KEY",
"valueFrom": {
"secretKeyRef": {
"name": "azure-api-key",
"key": "azure-api-key"
}
}
}
]
}
]
也执行了 docker exec 并从容器内部验证:
$ echo $AZURE_API_KEY
$ 123
看起来这就是问题所在,感谢@Blokje5:
Note: The environment variable appears in parentheses, "$(VAR)". This is required for the variable to be expanded in the command or args field.
我试过 ${VAR} 而不是 $(VAR)。
对 API 密钥等敏感信息使用环境变量不一定是最佳做法。这是一个公开争论什么更好,但我个人认为使用文件更好,主要是因为收集环境变量用于日志记录等目的很常见。
因此,我会将机密作为文件装载并在命令行中读取它,类似于 API_KEY=$(cat api_key.txt)
。我认为这应该可行,但需要验证。通常,当时提供的大多数图像都支持配置文件 - 所以我会首先研究这个,例如如果 Azure 人脸识别支持配置文件。
最后一点,如果您想阅读更多关于 Kubernetes 秘密以及如何在 Git 上管理它们的信息,请查看 this blog post(完全披露:我是作者),其中涵盖安全管理 Kubernetes 机密的所有不同选项。