0

我正在尝试设置Azure 人脸识别容器,但想知道如何将 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"

尝试像这样更改容器参数,但它不起作用 - 参数未按预期传递:(还尝试了其他变体,如 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
4

2 回答 2

1

感谢@Blokje5,这似乎是问题所在:

注意:环境变量出现在括号中,“$(VAR)”。这是在命令或参数字段中扩展变量所必需的。

我试过 ${VAR} 而不是 $(VAR)。

于 2019-05-24T15:32:10.757 回答
0

对 API 密钥等敏感信息使用环境变量不一定是最佳实践。这是一个公开的争论,什么更好,但我个人认为使用文件更好,主要是因为收集环境变量用于日志记录等是很常见的。

因此,我会将秘密挂载为文件并在命令行中读取它,例如API_KEY=$(cat api_key.txt). 我认为这应该可行,但需要验证。通常,在那些日子提供的大多数图像中都支持配置文件 - 所以我会首先研究这一点,例如 Azure 人脸识别是否支持配置文件。

最后一点,如果您想了解更多关于 Kubernetes 机密以及如何在 Git 上管理它们的信息,请查看这篇博文(完整披露:我是作者),其中涵盖了安全管理 Kubernetes 机密的所有不同选项。

于 2019-05-26T05:09:41.400 回答