来自 Vault 机密的气流配置不起作用
Airflow config from Vault secrets not working
我在 kubernetes 中有一个 Airflow 应用程序 运行 以及 Vault。我已经在使用 Vault 来管理某些 Airflow 连接并且它工作正常(这证明与 Vault 的连接工作正常)。
我现在正尝试通过 Vault 配置 Airflow 的配置 core.sql_alchemy_conn
、celery.result_backend
和 celery.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_path
是 applications/secrets/airflow/config/
),它起作用了。
vault kv put secret/applications/secrets/airflow/config/sql_alchemy_conn value=postgresql://user:pass@host:5432/db
我在 kubernetes 中有一个 Airflow 应用程序 运行 以及 Vault。我已经在使用 Vault 来管理某些 Airflow 连接并且它工作正常(这证明与 Vault 的连接工作正常)。
我现在正尝试通过 Vault 配置 Airflow 的配置 core.sql_alchemy_conn
、celery.result_backend
和 celery.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_path
是 applications/secrets/airflow/config/
),它起作用了。
vault kv put secret/applications/secrets/airflow/config/sql_alchemy_conn value=postgresql://user:pass@host:5432/db