来自 Vault 机密的气流配置不起作用

Airflow config from Vault secrets not working

我在 kubernetes 中有一个 Airflow 应用程序 运行 以及 Vault。我已经在使用 Vault 来管理某些 Airflow 连接并且它工作正常(这证明与 Vault 的连接工作正常)。

我现在正尝试通过 Vault 配置 Airflow 的配置 core.sql_alchemy_conncelery.result_backendcelery.broker_url,如前所述 here

在我的 values.yaml 我有

secrets_backend_kwargs:
  auth_type: 'kubernetes'
  kubernetes_role: 'role-id'
  connections_path: 'applications/secrets/airflow/connections/'
  config_path: 'applications/secrets/airflow/config/'

config:
  core:
    sql_alchemy_conn_secret: "sql_alchemy_conn"
  celery:
    broker_url_secret: 'broker_url_conn'
    result_backend_secret: 'result_backend_conn'
  secrets:
    backend: 'airflow.providers.hashicorp.secrets.vault.VaultBackend'
    backend_kwargs: '{{ .Values.secrets_backend_kwargs | toJson }}'

在我的保管库中,我将正确编码的 URI (postgresql%2Bpsycopg2%3A%2F%2Fblahblahblah...) 存储在正确的位置:

现在,当我部署应用程序时,run-airflow-migration 作业在验证配置时因 AirflowConfigException 而失败。

# AirflowConfigException
error: cannot use sqlite with the CeleryExecutor

这意味着它没有从 Vault 中选择 postgres 数据库连接设置,而是使用 Airflow 配置中的 sqlite 设置。

我也尝试过在容器的变量中提供这些配置。

env:
  - name: VAULT_ADDR
    value: 'https://path.to.vault/'
  - name: AIRFLOW__CORE__SQL_ALCHEMY_CONN_SECRET
    value: 'sql_alchemy_conn'
  - name: AIRFLOW__CELERY__BROKER_URL_SECRET
    value: 'broker_url_conn'
  - name: AIRFLOW__CELERY__RESULT_BACKEND_SECRET
    value: 'result_backend_conn'

我可以在容器中看到这些环境变量,但部署失败,因为迁移作业出错。

我通过更改秘密后端 kwargs 中的 config_path 验证了 Vault 路径和连接性,如果我更改了它,我仍然可以到达 Vault,但是因为 key/connection id 不存在于路径不正确,所以我从 Vault 收到错误。这意味着当我将 _secret 设置为配置时,应用程序正在到达 Vault 以获取值但不更新或使用该值。

我不知道我错过了什么。

配置设置为秘密后端中的变量,而我将它们设置为以 conn_uri 作为键的连接。

官方文档中没有明确说明,必须通过代码才能找到修复。

所以在以正确的方式设置我的配置后(其中挂载点是 secret 并且 config_pathapplications/secrets/airflow/config/),它起作用了。

vault kv put secret/applications/secrets/airflow/config/sql_alchemy_conn value=postgresql://user:pass@host:5432/db