我们有一个可以在K8s集群上运行任务的Airflow(芹菜执行器)设置。使用KubernetesPodOperator的任务可以访问文档中描述的k8的秘密。其余的任务在K8s集群之外的Celery worker上运行。
使用其他操作符(例如,SqlSensor)的任务如何访问与使用KubernetesPodOperator的任务相同的K8s秘密?
你可以将这些秘密作为变量卷映射到你的Worker Pods中,它们将对所有任务可用——无论是作为特定的目录还是作为环境变量。
你只需要修改Helm Chart(或任何你使用的部署)来使用它们。
如果您需要在MWAA和K8s之间传递秘密,我建议使用外部秘密管理器。
AWS秘密管理器可以被MWAA和K8S本机使用。https://docs.aws.amazon.com/mwaa/latest/userguide/connections-secrets-manager.htmlhttps://docs.aws.amazon.com/AmazonECS/latest/developerguide/specifying-sensitive-data-secrets.html
Hashicorp Vault是另一个选项。
有一点需要注意的是不要将secret作为变量传递给KubernetesPodOperator
我们的解决方案是使用ECS操作符在AWS Fargate上实际运行MWAA任务
https://airflow.apache.org/docs/apache-airflow-providers-amazon/stable/operators/ecs.html
秘密在每个ECS任务定义中共享,并用作环境变量。开发人员有一个简单的YAML配置文件,用于定义ECS任务和来自AWS秘密管理器的相关秘密,而Terraform处理基于此YAML管理任务定义。对于我们的特定用例,它工作得非常顺利。