Я узнал, как вставить секреты из файла в контейнер приложения.
Во-первых, файл секретов должен иметь форму KEY="VALUE"
в каждой строке.
Для тех, кто использует шаблон Consul для получения секретов из 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).
person
cryanbhu
schedule
16.05.2019