Это задачка для DevOps-инженера: почему ArgoCD не расшифровывал секреты из Vault
Нашему DevOps-специалисту Антону нужно было развернуть helm-чарт для Airflow с использованием ArgoCD. Как известно, ArgoCD реализует концепцию GitOps и подразумевает хранение манифестов в репозитории. Но часть данных в values чувствительна, например пароль от базы данных PostgreSQL. Поэтому неплохо было бы вынести эти данные в хранилище секретов (в этом случае — HashiCorp Vault), чтобы скрыть информацию от лишних глаз.
Есть несколько способов подтянуть секреты из Vault в поды. Наиболее предпочтительный по ряду причин — vault-injector. В обычной ситуации Антон бы воспользовался им, но в случае с helm-чартом Airflow задача показалась непростой. Поэтому он решил воспользоваться менее предпочтительным, но точно рабочим (как думал Антон) вариантом с ArgoCD Vault Plugin.
Какая вылезла проблема
Когда секреты были добавлены в хранилище, а ArgoCD Application написан, Антон попытался развернуть его для теста. Вот примерный Application, с которым это делалось (весомая часть пропущена для компактности):
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: airflow
labels:
app.kubernetes.io/name: airflow
app.kubernetes.io/component: airflow
namespace: argocd
finalizers:
- resources-finalizer.argocd.argoproj.io
spec:
project: default
destination:
namespace: some-namespace
name: cluster
source:
repoURL: "airflow_repo_url"
targetRevision: "revision"
chart: airflow
plugin:
name: argocd-vault-plugin-helm
env:
- name: HELM_VALUES
value: |
...
metadataConnection:
user: user
pass: <path:path/to/airflow/secrets#postgres_password>
protocol: postgresql
host: postgres.db.url
port: 5432
db: airflow_db
sslmode: prefer
...
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- Validate=true
- CreateNamespace=true
Ничего необычного, за исключением прокидывания values прямо из Application и того самого секрета. А еще — компонент webserver отказался запускаться, ссылаясь на невозможность подключиться к базе данных. Хотя данные были абсолютно точно правильными.
В чем итоге была проблем и как Антон с ней справился, читайте в статье →