如何在docker cmd参数中设置k8秘密?

时间:2019-05-24 14:35:53

标签: kubernetes azure-cognitive-services kubernetes-secrets

我正在尝试设置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

2 个答案:

答案 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安全地保密。