从任何 Airflow 任务中获取 K8s 的秘密

问题描述

我们有一个 Airflow(Celery 执行器)设置,可以在我们的 K8s 集群上运行任务。使用 KubernetesPodoperator 的任务可以访问 K8s 机密 as described in the documentation。其余任务在 K8s 集群之外的 Celery 工作进程上运行。

使用其他运算符(例如,sqlSensor)的任务如何访问与使用 KubernetesPodoperator 的任务相同的 K8s 机密?

解决方法

您可以将机密作为卷或变量映射到您的 Worker Pod 中,它们将可用于所有任务 - 无论是作为特定目录还是作为环境变量。

您只需修改 Helm Chart(或您使用的任何部署)即可使用它们。

,

如果您需要在 MWAA 和 K8s 之间传递机密,我建议使用外部机密管理器。

AWS Secrets Manager 可由 MWAA 和 K8S 本地使用。 https://docs.aws.amazon.com/mwaa/latest/userguide/connections-secrets-manager.html https://docs.aws.amazon.com/AmazonECS/latest/developerguide/specifying-sensitive-data-secrets.html

Hashicorp Vault 是另一种选择。

需要注意的一点是不要将 Secrets 作为变量传递给 KubernetesPodOperator


我们的解决方案是使用 ECS operator 在 AWS Fargate 上实际运行 MWAA 任务

https://airflow.apache.org/docs/apache-airflow-providers-amazon/stable/operators/ecs.html

根据 ECS 任务定义共享机密并用作环境变量。开发人员有一个简单的 YAML 配置文件,用于定义来自 AWS Secrets Manager 的 ECS 任务和关联的机密,Terraform 会根据此 YAML 处理管理任务定义。对于我们的特定用例,它运行起来非常顺畅。