Kubernetes 如何在docker cmd参数中放入k8 secret?

Kubernetes 如何在docker cmd参数中放入k8 secret?,kubernetes,azure-cognitive-services,kubernetes-secrets,Kubernetes,Azure Cognitive Services,Kubernetes Secrets,我正在尝试设置,但不知道如何使用k8机密作为Docker命令参数 这是可行的,但我需要用我的k8秘密替换ApiKey { "kind": "Deployment", "spec": { "template": { "spec": { "containers": [ { "name": "azure-face", "args": [ "Eula=accept"

我正在尝试设置,但不知道如何使用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"
尝试像这样更改容器参数,但不起作用-未按预期传递ARUMENT: 还尝试了其他变体,如ApiKey=${AZURE\u API\u 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和from inside container是否也验证了:

$ echo $AZURE_API_KEY
$ 123

由于@Blokje5:

注意:环境变量出现在括号中,$VAR 是在命令或参数中展开变量所必需的 场


我尝试过${VAR}而不是$VAR。

使用环境变量来处理敏感信息,如API键,不一定是最佳做法。什么更好是一个公开的争论,但我个人认为使用文件更好,主要是因为收集env变量用于日志记录等目的很常见

因此,我将秘密装载为文件,并在命令行中读取它,类似于API_KEY=$catapi_KEY.txt。我认为这应该有效,但需要验证。通常,在那些日子里提供的大多数图像中都支持配置文件,所以我会先研究一下,例如Azure人脸识别是否支持配置文件


最后请注意,如果您想了解更多关于Kubernetes机密以及如何在Git上管理这些机密的信息,请查看完整披露:我是作者,涵盖了安全管理Kubernetes机密的所有不同选项。

这一切正常,对吗?将API键作为环境变量传递,然后将其作为参数传递给程序。Kubernetes文档中也提出了这一点,请参见:替换env var不起作用-更新了问题以尝试并澄清在命令行上使用密码时,密码存储在何处并不重要-这是一个公开的争论-它仍然是一个环境变量。当运行一个你不知道它做什么或者它是否记录了环境变量的容器时,情况可能更糟……将敏感数据存储在文件或环境变量中供应用程序读取是有争议的。将敏感数据写入进程命令行会泄漏大多数linux系统上未针对它进行加固的信息。MS不应该这样设置ApiKey论点。对不起,误读了你:我想这也是有争议的-你怎么能泄露这个论点?如果需要访问主机-那么,受损的Kubernetes节点是一种非常严重的情况,并且您的容器无论如何都会受损:它不需要根访问,cmdline文件是世界可读的,而不需要在/proc上进行额外的强化