我正在尝试设置Azure Face recognition container,但想知道如何将k8密钥用作Docker命令“参数”。
这行得通,但是我需要用我的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"
试图像这样更改容器args,但是它不起作用-不能按预期通过匹配: (还尝试了其他变体,例如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
答案 0 :(得分:0)
由于@ Blokje5,看起来这就是问题所在:
注意:环境变量出现在括号“ $(VAR)”中。这个 需要在命令或args中扩展变量 字段。
我尝试使用$ {VAR}而不是$(VAR)。
答案 1 :(得分:0)
使用环境变量获取敏感信息(例如API密钥)不一定是最佳做法。公开讨论是什么更好,但我个人认为使用文件更好,主要是因为收集env var用于日志记录等很常见。
因此,我将机密文件挂载为文件,并在命令行中读取它,类似于API_KEY=$(cat api_key.txt)
。我认为这应该可行,但需要验证。通常,在当时提供的大多数映像中,都支持配置文件-因此,我将首先对此进行研究,例如如果Azure Face识别支持配置文件。
最后一点,如果您想了解有关Kubernetes机密以及如何在Git上进行管理的更多信息,请查看this blog post(完整披露:我是作者),其中涵盖了所有不同的管理选项Kubernetes安全地保密。