Airflow升级2.3.2后忽略fernet_key配置致加密变量解密失败
根因说明
仅Webserver服务加载了包含Fernet Key的环境配置,Scheduler服务、执行CLI命令的Shell会话均未读取到有效配置,和Airflow 2.3.2版本本身的逻辑无关:
- 你配置的
airflow-webserver.service中明确指定了EnvironmentFile=/etc/airflow/secrets.txt,因此Webserver进程可以正常读取Fernet Key,前端配置页自然显示参数正常。 - 手动执行
airflow variables类CLI命令时,当前终端会话没有注入AIRFLOW__CORE__FERNET_KEY环境变量,也未正确加载airflow.cfg中的硬编码配置,因此触发解密失败报错。 - 如果Scheduler通过独立systemd单元管理,且单元配置中没有添加和Webserver一致的环境文件、
AIRFLOW_HOME路径配置,Scheduler运行DAG时同样读不到Fernet Key,会抛出和CLI完全一致的错误。
排查与修复步骤
验证CLI环境配置加载状态
在执行Airflow CLI命令的终端中,先确认环境变量与配置路径正确:# 先指定和服务一致的AIRFLOW_HOME路径 export AIRFLOW_HOME=/etc/airflow # 检查当前实际加载到的Fernet Key值 airflow config get-value core fernet_key如果命令返回空值,说明当前环境未加载到有效配置,手动加载环境文件后再验证:
set -a source /etc/airflow/secrets.txt set +a airflow config get-value core fernet_key此时如果返回正确的Key值,再执行
airflow variables list -v就不会出现Fernet Key缺失的报错,可正常查看变量明文。修复Scheduler服务配置
找到airflow-scheduler.service的systemd单元文件,在[Service]段添加和Webserver完全一致的环境配置:EnvironmentFile=/etc/airflow/secrets.txt Environment="AIRFLOW_HOME=/etc/airflow" User=airflow Group=airflow其余原有配置保持不变,修改后重载配置并重启服务:
systemctl daemon-reload systemctl restart airflow-scheduler排查cfg硬编码不生效问题
如果将Fernet Key写入airflow.cfg后仍无法正常读取,优先检查两点:- 文件权限:运行Airflow服务的
airflow用户、执行CLI命令的用户必须对/etc/airflow/airflow.cfg拥有读权限 - 配置位置:
fernet_key配置项必须写在[core]分段下,配置行前不能加#注释符,不要写错分段名称
配置加载优先级:环境变量 > airflow.cfg > 默认值,不要在环境变量和cfg文件中配置不同的Fernet Key,否则会出现加解密不匹配问题。
- 文件权限:运行Airflow服务的
修复验证
- CLI侧执行
airflow variables list -v,确认无Fernet Key缺失报错,可正常展示加密变量的明文值 - 手动触发依赖加密变量的DAG,确认任务运行正常,日志中无解密相关错误
- CLI侧执行
内容的提问来源于stack exchange,提问作者Bogdan Pilyavets
相关产品推荐
相关产品推荐

