首页 > 解决方案 > 从 KubernetesPodOperator (Airflow) 使用 kubernetes secret

问题描述

我正在 Google Cloud Composer 上设置 Airflow 环境进行测试。我在我的命名空间中添加了一些秘密,它们显示得很好。

secret_token = secret.Secret(
    deploy_type='env',
    deploy_target='SQL_CONN',
    secret='m-secrets',
    key='token')

YESTERDAY = datetime.datetime.now() - datetime.timedelta(days=1)

with models.DAG(
        dag_id='composer_set_controlm_secret_kubernetes_pod',
        schedule_interval=datetime.timedelta(days=1),
        start_date=YESTERDAY) as dag:

  kubernetes_secret_vars_ex = kubernetes_pod_operator.KubernetesPodOperator(
        task_id='ex-kube-secrets',
        name='ex-kube-secrets',
        image='eu.gcr.io/$PROJECT/$DOCKER_IMG:latest',
        namespace='default',
        cmds=['python'],
        arguments=['call_api.py'],
        secrets=[secret_token]
  )

正如您在上面看到的,我正在运行一个调用我的call_api.py程序的 docker 映像,我想打印通过 KubernetesPodOperator 传递的秘密,如下所示:

call_api.py

if __name__ == '__main__':
print($secret_token) ====> how can I do this ?
  

在文档中找不到任何有价值的资源...

标签: kubernetesgoogle-cloud-platformairflowgoogle-kubernetes-enginegoogle-cloud-composer

解决方案


因为您将 deploy_type 指定为 env,所以气流会将您选择的秘密添加到容器的环境中。

您有多种从环境中读取的选项。通过默认库的方式是 os.environ ,它为您提供当前环境变量的字典。

导入操作系统

print(os.environ['SQL_CONN']) 但是,如果您想以这种方式进行配置,还有其他选项。我们使用 dynaconf 进行气流部署,它为您提供了一个设置对象,您可以从中读取环境变量,只要它们是使用 DYNACONF_ 前缀制作的。


推荐阅读