0

我正在使用带有 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.SecretK8s 密钥中包含的每个密钥创建一个对象。

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().

4

0 回答 0