В Kubernetes раскрыть секреты в файле в качестве переменных среды - PullRequest
2 голосов
/ 03 мая 2019

В Kubernetes, как я могу вместо этого предоставлять секреты в файле (в томе Kubernetes) в качестве переменных среды?

Справочная информация:
Я следовал за Google CloudПлатформа GKE Vault Demo и в ней показано, как "непрерывно извлекать содержимое секрета в локальное местоположение файла. Это позволяет приложению считывать секреты из файла внутри модуля, как правило, без необходимости изменения ввзаимодействовать с Vault напрямую. "

Я хотел бы знать, как я могу представить эти секреты как переменные среды (вместо файла) для использования другими контейнерами приложения.

1 Ответ

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

Я узнал, как вставить секреты из файла в контейнер приложения.

Сначала файл с секретами должен иметь форму KEY="VALUE" в каждой строке.
Для тех, кто использует Consul Template для получения секретов от Vault, вы можете сделать это следующим образом:

- name: CT_LOCAL_CONFIG
      value: |
        vault {
          ssl {
            ca_cert = "/etc/vault/tls/ca.pem"
          }
          retry {
            backoff = "1s"
          }
        }
        template {
          contents = <<EOH
        {{- with secret "secret/myproject/dev/module1/mongo-readonly" }}
        MONGO_READ_HOSTNAME="{{ .Data.hostname }}"
        MONGO_READ_PORT="{{ .Data.port }}"
        MONGO_READ_USERNAME="{{ .Data.username }}"
        MONGO_READ_PASSWORD="{{ .Data.password }}"
        {{- end }}
        {{- with secret "secret/myproject/dev/module2/postgres-readonly" }}
        POSTGRES_READ_HOSTNAME="{{ .Data.hostname }}"
        POSTGRES_READ_PORT="{{ .Data.port }}"
        POSTGRES_READ_USERNAME="{{ .Data.username }}"
        POSTGRES_READ_PASSWORD="{{ .Data.password }}"
        {{- end }}
        EOH
          destination = "/etc/secrets/myproject/config"
        }  

В результате вы получите файл секретов в правильной форме KEY="VALUE".

Из файла секретов, который совместно используется с контейнером приложения через volumeMount, мы можем вставить секреты в виде переменных среды, например:

command: ["/bin/bash", "-c"]  # for Python image, /bin/sh doesn't work, /bin/bash has source
args:
  - source /etc/secrets/myproject/config;
    export MONGO_READ_HOSTNAME;
    export MONGO_READ_PORT;
    export MONGO_READ_USERNAME;
    export MONGO_READ_PASSWORD;
    export POSTGRES_READ_HOSTNAME;
    export POSTGRES_READ_PORT;
    export POSTGRES_READ_USERNAME;
    export POSTGRES_READ_PASSWORD;
    python3 my_app.py;  

Таким образом, нам не нужно изменять существующий код приложения, который ожидает секреты от переменных среды (используемые для использования секретов Kubernetes).

...