我正在使用带有 Airflow 2.1.4 的 Google Cloud Composer 1.17.7。我主要关注这些文档。
我创建了一个 Kubernetes 机密,如下所示:
apiVersion: v1
data:
KEY1: base64encodedvalue1
KEY2: base64encodedvalue2
KEY3: base64encodedvalue3
...
KEYN: base64encodedvalueN
kind: Secret
metadata:
creationTimestamp: "2021-12-13T12:58:03Z"
name: airflow-secrets
namespace: default
resourceVersion: "*****"
uid: *****
type: Opaque
要加载此密钥并将其在 Airflow 中用作环境变量,在我看来,我必须为airflow.kubernetes.secret.Secret
K8s 密钥中包含的每个密钥创建一个对象。
secret_env1 = Secret(
deploy_type='env',
deploy_target='KEY1',
secret='airflow-secrets',
key='KEY1')
secret_env2 = Secret(
deploy_type='env',
deploy_target='KEY2',
secret='airflow-secrets',
key='KEY2')
...
secret_envN = Secret(
deploy_type='env',
deploy_target='KEYN',
secret='airflow-secrets',
key='KEYN')
当有很多键要使用时,这变得很麻烦。我想出了一个 for 循环解决方案,它仍然迫使我指定所有需要的键:
secret_envvars = [
'KEY1',
'KEY2',
'KEY3',
...
'KEYN'
]
secret_envs = [
Secret(
deploy_type='env',
secret='airflow-secrets',
deploy_target=var,
key=var,
) for var in secret_envvars]
我想知道是否有一种方法可以在 Airflow 中加载 K8s 机密的所有密钥,而无需显式指定密钥。例如,能够以编程方式访问 K8s 密钥中包含的所有密钥的列表(例如k8sSecret.keys()
.