【问题标题】:Aceessing K8s secrets from any Airflow task从任何 Airflow 任务中访问 K8s 机密
【发布时间】:2021-07-27 08:29:04
【问题描述】:

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

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

【问题讨论】:

    标签: kubernetes airflow mwaa airflow-2.x


    【解决方案1】:

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

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

    【讨论】:

    • Airflow 工作人员是 celery 工作人员。只有使用 KubernetesPodOperator 的任务才会在 K8s 集群中运行。
    • 您似乎想从 K8S 获取机密以在 K8S 之外使用?这是个坏主意。这使他们不再是秘密。您可以使用 kubectl 命令从 K8S 检索机密值,但为此您需要具有允许读取它们的凭据(但这会使它们成为非机密)。常见的做法是让 Celery 工作人员作为 Kubernetes 部署运行。这就是 Airflow 的官方 Helm Chart 使用它们的方式:airflow.apache.org/docs/helm-chart/stable/index.html。只需让您的 Celery 工人成为 K8S 的一部分 :)。这是唯一的好方法。
    • 很遗憾,我们无法将 Airflow 工作人员迁移到 K8s。我们正在研究的另一种方法是使用外部秘密管理器并将其与 K8s 和 Airflow 集成。
    • 是的。那个是最好的。 Airflow 在 airflow.apache.org/docs/apache-airflow/stable/security/secrets/… 中内置了 Secret Manager 支持
    【解决方案2】:

    如果您需要在 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 的任务定义管理。对于我们的特定用例,它运行起来非常流畅。

    【讨论】:

      猜你喜欢
      • 2012-02-05
      • 2016-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多