Я узнал, как вставить секреты из файла в контейнер приложения.
Сначала файл с секретами должен иметь форму 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).