FERNET_KEY 使用相同的 DAGS 创建新环境时缺少配置
FERNET_KEY configuration is missing when creating a new environment with the same DAGS
我在 Google Cloud 中使用 Composer (Airflow)。我想创建一个新环境,并将旧环境中的相同 DAG 和变量带入新环境。
为此,我执行以下操作:
- 我检查了几个变量并将它们导出到 JSON 文件。
- 在我的新环境中,我导入了相同的 JSON 文件。
- 我使用
gsutil
并将相同的 DAG 上传到新环境
但是,在新环境中,由于 FERNET_KEY configuration is missing
,我的所有 DAG 都损坏了。我最好的猜测是,这与导入使用单独的 Fernet 密钥加密的变量有关,但我不确定。
有人遇到过这个问题吗?如果是,您是如何解决的?
我们在 FERNET_KEYs 上遇到了同样的错误。我认为新版本(composer-1.9.0)中存在错误。他们说 'The Fernet Key is now stored in Kubernetes Secrets instead of the Config Map.'
即使再次重新输入您的连接,它们也不工作。
他们已经在 1.9.1 版本中解决了这个问题:
根据文档,Fernet Key 是由 Composer 生成的,它是唯一的。 fernet key
值可以从 Composer Airflow 配置 (Composer bucket -> airflow.cfg
) 中检索。您需要检查 fernet_key
是否存在。
由于二进制推出中的竞争条件,存在一个已知问题,可能导致在网络服务器中设置新的 fernet 密钥,从而导致元数据库中先前加密的值无法解密。
您可以尝试在 Admin -> Variables
下的 Airflow UI 中重新创建关键的 Composer 对象路径。
我可以通过执行以下操作在 Composer 1.9 / Airflow 1.10.6 中可靠地重现该问题:
- 创建一个新的 Composer 集群
- 上传引用 Airflow 连接的 DAG
- 在 Composer 中设置环境变量
- 等待
airflow-scheduler
和 airflow-worker
重新启动
除了 FERNET_KEY configuration is missing
之外,问题还表现为以下 Airflow 错误横幅:
Broken DAG: [/home/airflow/gcs/dags/MY_DAG.py] in invalid literal for int() with base 10: 'XXX'
Broken DAG: [/home/airflow/gcs/dags/MY_DAG.py] Expecting value: line 1 column 1 (char 0)
问题的根本原因是添加新环境变量会从 airflow-scheduler
和 airflow-worker
Kubernetes 部署规范 Pod 模板中删除 AIRFLOW__CORE__FERNET_KEY
环境变量:
- name: AIRFLOW__CORE__FERNET_KEY
valueFrom:
secretKeyRef:
key: fernet_key
name: airflow-secrets
作为解决方法,可以应用 Kubernetes 部署规范补丁:
$ cat config/composer_airflow_scheduler_fernet_key_patch.yaml
spec:
template:
spec:
containers:
- name: airflow-scheduler
env:
- name: AIRFLOW__CORE__FERNET_KEY
valueFrom:
secretKeyRef:
key: fernet_key
name: airflow-secrets
$ kubectl patch deployment airflow-scheduler --namespace=$AIRFLOW_ENV_GKE_NAMESPACE --patch "$(cat config/composer_airflow_scheduler_fernet_key_patch.yaml)"
注意:此补丁也必须应用于 airflow-worker
。
我在 Google Cloud 中使用 Composer (Airflow)。我想创建一个新环境,并将旧环境中的相同 DAG 和变量带入新环境。
为此,我执行以下操作:
- 我检查了几个变量并将它们导出到 JSON 文件。
- 在我的新环境中,我导入了相同的 JSON 文件。
- 我使用
gsutil
并将相同的 DAG 上传到新环境
但是,在新环境中,由于 FERNET_KEY configuration is missing
,我的所有 DAG 都损坏了。我最好的猜测是,这与导入使用单独的 Fernet 密钥加密的变量有关,但我不确定。
有人遇到过这个问题吗?如果是,您是如何解决的?
我们在 FERNET_KEYs 上遇到了同样的错误。我认为新版本(composer-1.9.0)中存在错误。他们说 'The Fernet Key is now stored in Kubernetes Secrets instead of the Config Map.' 即使再次重新输入您的连接,它们也不工作。
他们已经在 1.9.1 版本中解决了这个问题:
根据文档,Fernet Key 是由 Composer 生成的,它是唯一的。 fernet key
值可以从 Composer Airflow 配置 (Composer bucket -> airflow.cfg
) 中检索。您需要检查 fernet_key
是否存在。
由于二进制推出中的竞争条件,存在一个已知问题,可能导致在网络服务器中设置新的 fernet 密钥,从而导致元数据库中先前加密的值无法解密。
您可以尝试在 Admin -> Variables
下的 Airflow UI 中重新创建关键的 Composer 对象路径。
我可以通过执行以下操作在 Composer 1.9 / Airflow 1.10.6 中可靠地重现该问题:
- 创建一个新的 Composer 集群
- 上传引用 Airflow 连接的 DAG
- 在 Composer 中设置环境变量
- 等待
airflow-scheduler
和airflow-worker
重新启动
除了 FERNET_KEY configuration is missing
之外,问题还表现为以下 Airflow 错误横幅:
Broken DAG: [/home/airflow/gcs/dags/MY_DAG.py] in invalid literal for int() with base 10: 'XXX'
Broken DAG: [/home/airflow/gcs/dags/MY_DAG.py] Expecting value: line 1 column 1 (char 0)
问题的根本原因是添加新环境变量会从 airflow-scheduler
和 airflow-worker
Kubernetes 部署规范 Pod 模板中删除 AIRFLOW__CORE__FERNET_KEY
环境变量:
- name: AIRFLOW__CORE__FERNET_KEY
valueFrom:
secretKeyRef:
key: fernet_key
name: airflow-secrets
作为解决方法,可以应用 Kubernetes 部署规范补丁:
$ cat config/composer_airflow_scheduler_fernet_key_patch.yaml
spec:
template:
spec:
containers:
- name: airflow-scheduler
env:
- name: AIRFLOW__CORE__FERNET_KEY
valueFrom:
secretKeyRef:
key: fernet_key
name: airflow-secrets
$ kubectl patch deployment airflow-scheduler --namespace=$AIRFLOW_ENV_GKE_NAMESPACE --patch "$(cat config/composer_airflow_scheduler_fernet_key_patch.yaml)"
注意:此补丁也必须应用于 airflow-worker
。