我们有一个 Airflow(Celery 执行器)设置,可以在我们的 K8s 集群上运行任务。使用 KubernetesPodOperator 的任务可以访问 K8s 机密,如文档中所述。其余任务在 K8s 集群之外的 Celery 工作人员上运行。
使用其他运算符(例如 SqlSensor)的任务如何访问与使用 KubernetesPodOperator 的任务相同的 K8s 机密?
我们有一个 Airflow(Celery 执行器)设置,可以在我们的 K8s 集群上运行任务。使用 KubernetesPodOperator 的任务可以访问 K8s 机密,如文档中所述。其余任务在 K8s 集群之外的 Celery 工作人员上运行。
使用其他运算符(例如 SqlSensor)的任务如何访问与使用 KubernetesPodOperator 的任务相同的 K8s 机密?
如果您需要在 MWAA 和 K8s 之间传递秘密,我建议您使用外部秘密管理器。
MWAA 和 K8S 可以原生使用 AWS Secrets Manager。 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 运算符在 AWS Fargate 上实际运行 MWAA 任务
https://airflow.apache.org/docs/apache-airflow-providers-amazon/stable/operators/ecs.html
每个 ECS 任务定义共享机密并用作环境变量。开发人员有一个简单的 YAML 配置文件,用于从 AWS Secrets Manager 定义 ECS 任务和关联的密钥,Terraform 处理基于此 YAML 的任务定义管理。对于我们的特定用例,它非常顺利。
您可以将机密作为卷或变量映射到您的 Worker Pod 中,它们将可用于所有任务 - 作为特定目录或作为环境变量。
您只需修改 Helm Chart(或您使用的任何部署)即可使用它们。