【问题标题】:Make Airflow load all keys in a Kubernetes secret without specifying the keys让 Airflow 在不指定密钥的情况下加载 Kubernetes 密钥中的所有密钥
【发布时间】:2022-08-24 02:14:11
【问题描述】:

我正在使用带有 Airflow 2.1.4 的 Google Cloud Composer 1.17.7。 我主要关注these docs。

我创建了一个 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 中用作环境变量,在我看来,我必须为 K8s 密钥中包含的每个密钥创建一个 airflow.kubernetes.secret.Secret 对象。

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

标签: kubernetes kubernetes-secrets airflow-2.x


【解决方案1】:

从这里https://airflow.apache.org/docs/apache-airflow/1.10.12/kubernetes.html

secret_all_keys = Secret('env', None, 'airflow-secrets-2')

【讨论】:

    猜你喜欢
    • 2021-05-22
    • 2013-04-06
    • 2010-09-11
    • 2020-04-23
    • 2022-01-24
    • 1970-01-01
    • 2020-05-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多