Как поставить секрет k8 в аргументе docker cmd? - PullRequest
0 голосов
/ 24 мая 2019

Я пытаюсь настроить контейнер распознавания лиц Azure , но не знаю, как использовать секрет k8 в качестве аргумента команды Docker.

Это работает, но мне нужно заменить ApiKey моим секретом k8.

{
  "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"

Попробовал изменить аргументы контейнера следующим образом, но это не сработало - arugment не был передан как ожидалось: (также пробовал другие варианты, такие как 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 ]

1 голос
/ 24 мая 2019

Похоже, что это было проблемой благодаря @ Blokje5:

Примечание: переменная окружения отображается в скобках, "$ (VAR)".Это необходимо для раскрытия переменной в поле команды или аргумента.

Я пробовал $ {VAR}, а не $ (VAR).

0 голосов
/ 26 мая 2019

Использование переменной среды для конфиденциальной информации, такой как ключ API, не обязательно является наилучшей практикой.Это открытый спор о том, что лучше, но я лично считаю, что использование файлов лучше, главным образом, потому что обычно собирать переменные env для ведения журналов и т. Д.

Так что вместо этого я бы смонтировал секрет в виде файла и прочитал его вкомандная строка, что-то вроде API_KEY=$(cat api_key.txt).Я думаю, что это должно работать, но нуждается в проверке.Обычно в большинстве изображений предусмотрена поддержка файлов конфигурации, предоставляемых в те дни, поэтому сначала я хотел бы рассмотреть это, например, если распознавание лиц Azure поддерживает файл конфигурации.

Заключительное примечание, если вы хотите узнать большео секретах Kubernetes и о том, как ими управлять в Git, ознакомьтесь с этим сообщением в блоге (полное раскрытие: я автор), в котором описаны все варианты безопасного управления секретами Kubernetes.

...