问题描述
我们有一个 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 处理管理任务定义。对于我们的特定用例,它运行起来非常顺畅。