在反向代理后运行 Apache Airflow 负载均衡

2025年6月11日 | 阅读 10 分钟

Apache Airflow 是一个强大的开源工作流编排工具,用于调度和管理数据管道。在生产环境中部署 Airflow 时,通过反向代理来保护访问是一种常见的做法。反向代理提供安全性、负载均衡、SSL 终止和身份验证功能。本文介绍如何使用 NginxApache HTTP 服务器在反向代理后设置 Apache Airflow,同时配置 SSL 以增强安全性。

为什么为 Apache Airflow 使用反向代理?

反向代理位于用户和 Airflow Web 服务器之间,充当中间人。使用反向代理的好处包括:

  1. 增强安全性 - 防止直接暴露 Airflow 的 Web UI 并隐藏内部基础架构详细信息。
  2. SSL 终止 - 允许 HTTPS 加密,而 Airflow 继续通过 HTTP 运行。
  3. 身份验证和访问控制 - 与 OAuth、LDAP 和单点登录 (SSO) 等身份验证系统集成。
  4. 负载均衡 - 在高可用性设置中将传入请求分发到多个实例。

通过使用反向代理,我们可以保护 Airflow 免受未经授权的访问,并确保更好地控制流量管理。

使用 Nginx 设置 Apache Airflow

Nginx 是一个流行的轻量级 Web 服务器,因其高性能可扩展性而常被用作反向代理。

步骤 1:安装 Nginx

确保 Nginx 已安装在您的服务器上

步骤 2:将 Nginx 配置为反向代理

为 Apache Airflow 创建新的 Nginx 配置文件

添加以下配置

启用配置并重新启动 Nginx

保存文件并创建一个符号链接以启用它

确保 Apache Airflow 在端口 8080 上运行

现在,访问 http://airflow.example.com 应该通过 Nginx 提供 Airflow UI。

使用 Apache HTTP 服务器设置 Apache Airflow

Apache HTTP 服务器 (httpd) 也可以用作 Apache Airflow 的反向代理。

步骤 1:安装 Apache HTTP 服务器

启用所需模块

步骤 2:将 Apache 配置为反向代理

创建 Apache 配置文件

添加以下配置

保存文件并启用站点

现在,访问 http://airflow.example.com 应该通过 Apache HTTP 服务器提供 Apache Airflow。

使用 Let's Encrypt 启用 SSL

在生产环境中,使用 HTTPS 保护反向代理至关重要。Let's Encrypt 提供免费的 SSL 证书以实现此目的。

步骤 1:安装 Certbot

对于 Nginx

对于 Apache

步骤 2:获取并应用 SSL 证书

对于 Nginx

对于 Apache

配置 SSL 后,启用自动续订

这可确保 SSL 证书自动续订。

配置 Airflow 以信任反向代理

修改 airflow.cfg 以正确处理反向代理请求

重新启动 Apache Airflow 以使更改生效

疑难解答常见问题

1. Nginx 或 Apache 未将请求转发给 Airflow

  • 确保 Airflow 在端口 8080 上运行
  • 重新启动 Nginx 或 Apache

2. SSL 证书问题

  • 验证 SSL 证书是否已正确安装
  • 如果已过期,请手动续订

3. Airflow UI 中的 WebSocket 问题

  • 确保 Nginx 配置包含

其他安全注意事项

虽然设置反向代理可以提高安全性和性能,但还可以采取其他措施来进一步增强对 Apache Airflow 部署的保护。

1. 按 IP 地址限制访问

要将访问限制为特定 IP,请修改反向代理配置。

对于 Nginx,更新 location/block

对于 Apache,修改 <Location /> 块

这可确保只有来自受信任 IP 地址的用户才能访问 Airflow Web UI。

2. 强制执行强身份验证

使用 OAuth、LDAP 或单点登录 (SSO) 等身份验证机制有助于限制未经授权的访问。

例如,您可以配置 Nginx 的基本身份验证

此命令创建一个 .htpasswd 文件,并添加一个名为 airflowuser 的用户。您将被提示为该用户设置密码。创建文件后,更新 Nginx 配置以强制执行基本身份验证

进行这些更改后,重新启动 Nginx

现在,当您访问 http://airflow.example.com 时,系统将提示您输入之前创建的用户名和密码。

将 OAuth 与 Apache Airflow 集成

为了进行更高级的身份验证,您可以将 OAuth 与 Apache Airflow 集成。这允许用户使用其在 Google、GitHub 或 Microsoft 等提供商处的现有帐户登录。

步骤 1:安装必需的包

首先,安装 OAuth 集成所需的 flask-appbuilder 包

步骤 2:在 airflow.cfg 中配置 OAuth

接下来,修改 airflow.cfg 文件以包含 OAuth 设置。在 [webserver] 部分下添加以下配置

然后,添加特定于 OAuth 提供程序的设置。例如,如果您使用的是 Google OAuth,请添加以下内容

将 YOUR_GOOGLE_CLIENT_ID 和 YOUR_GOOGLE_CLIENT_SECRET 替换为您在 Google Developer Console 中的实际值。

步骤 3:重新启动 Apache Airflow

进行这些更改后,重新启动 Apache Airflow

现在,当您访问 Airflow Web UI 时,您将被重定向到 Google OAuth 登录页面。成功验证后,您将获得 Airflow UI 的访问权限。

使用多个 Airflow Web 服务器进行负载均衡

在高可用性设置中,您可能希望运行多个 Airflow Web 服务器实例,并使用负载均衡器将传入请求分发到这些实例。Nginx 可以配置为实现此目的的负载均衡器。

步骤 1:配置多个 Airflow Web 服务器

在不同端口上启动多个 Airflow Web 服务器实例。例如

步骤 2:将 Nginx 配置为负载均衡器

更新 Nginx 配置以包含多个上游服务器

步骤 3:重新启动 Nginx

进行这些更改后,重新启动 Nginx

现在,Nginx 将把传入请求分发到多个 Airflow Web 服务器实例,从而提供负载均衡和高可用性。

监控和日志记录

监控和日志记录对于维护 Apache Airflow 部署的健康和性能至关重要。您可以使用 Prometheus 和 Grafana 等工具进行监控,并使用 ELK Stack(Elasticsearch、Logstash、Kibana)进行日志记录。

步骤 1:设置 Prometheus 和 Grafana

在您的服务器上安装 Prometheus 和 Grafana

配置 Prometheus 以从 Airflow Web 服务器抓取指标。将以下作业添加到 prometheus.yml 文件中

重新启动 Prometheus

接下来,设置 Grafana 以可视化指标。登录 Grafana 并将 Prometheus 添加为数据源。然后,创建仪表板以监控关键指标,例如 DAG 执行时间、任务成功率和资源利用率。

步骤 2:为日志记录设置 ELK Stack

在您的服务器上安装 Elasticsearch、Logstash 和 Kibana

配置 Logstash 以收集 Airflow Web 服务器的日志。创建一个新的 Logstash 配置文件

添加以下配置

将 /path/to/airflow/logs/ 替换为 Airflow 日志的实际路径。重新启动 Logstash

现在,来自 Airflow Web 服务器的日志将被摄入 Elasticsearch,并可以在 Kibana 中进行可视化。

备份和灾难恢复

定期备份对于确保您的 Apache Airflow 部署在发生故障时能够恢复至关重要。您应该备份 Airflow 元数据数据库、DAG 文件和配置文件。

步骤 1:备份 Airflow 元数据数据库

Airflow 元数据数据库包含有关 DAG、任务和执行历史的所有信息。使用以下命令创建备份

如果用户名和数据库名称不同,请分别替换 airflow。

步骤 2:备份 DAG 文件和配置

DAG 文件和配置文件应定期备份。您可以使用简单的 rsync 命令将这些文件复制到备份位置

步骤 3:自动化备份

为确保定期执行备份,您可以创建一个 cron 作业。打开 crontab 编辑器

添加以下行以安排每日备份

此 cron 作业将于每天凌晨 2 点运行备份脚本。

Apache Airflow 的高级安全措施

虽然设置反向代理和启用 SSL 是保护 Apache Airflow 的关键步骤,但您还可以实施其他高级安全措施来进一步保护您的部署。

1. 基于角色的访问控制 (RBAC)

Apache Airflow 支持基于角色的访问控制 (RBAC),它允许您定义角色并将特定权限分配给用户。这可确保用户只能访问对其任务必需的系统部分。

要启用 RBAC,请修改 airflow.cfg 文件

启用 RBAC 后,重新启动 Airflow Web 服务器

然后,您可以通过 Airflow Web UI 或使用 Airflow CLI 创建角色并分配权限。例如,要创建一个新角色

此命令创建一个名为 DataScientist 的角色,并具有读取权限。

2. 网络安全

除了按 IP 地址限制访问外,您还可以通过使用虚拟私有云 (VPC) 和安全组来进一步增强网络安全。这可确保只有受信任的网络才能访问您的 Airflow 部署。

例如,如果您使用的是 AWS 等云提供商,您可以配置安全组以仅允许来自特定 IP 范围的流量

此命令仅允许来自 192.168.1.0/24 IP 范围的端口 8080 上的流量。

3. 数据加密

加密静态数据和传输中的数据对于保护敏感信息至关重要。确保您的 Airflow 元数据数据库已加密。大多数现代数据库都支持开箱即用的加密。

例如,如果您使用的是 PostgreSQL,则可以通过修改 airflow.cfg 文件来为数据库连接启用 SSL

这可确保 Airflow 和数据库之间传输的数据已加密。

4. 定期安全审计

进行定期的安全审计有助于识别和缓解潜在的漏洞。使用 nmap 和 OpenVAS 等工具扫描您的网络和服务器是否存在漏洞。

例如,要扫描您的服务器的开放端口

此命令扫描 airflow.example.com 的所有端口,并提供有关每个端口上运行的服务 的详细信息。

扩展 Apache Airflow

随着您的数据管道的增长,您可能需要扩展您的 Apache Airflow 部署以处理不断增加的负载。以下是扩展 Airflow 的一些策略:

1. 水平扩展

水平扩展涉及添加更多的 Airflow Web 服务器、调度器和工作器实例。

例如,您可以使用官方 Helm chart 将 Airflow 部署在 Kubernetes 上

此命令将在 Kubernetes 集群上安装 Airflow,允许您根据需要扩展 Web 服务器、调度器和工作器实例的数量。

2. 数据库优化

随着 DAG 和任务数量的增加,Airflow 元数据数据库可能成为瓶颈。优化数据库可以提高性能。

例如,您可以使用连接池来减少建立新数据库连接的开销

此配置将连接池大小设置为 20,并在连接池耗尽时允许最多 10 个额外连接。

3. 任务队列

使用任务队列有助于将负载分配到多个工作器。Airflow 支持多个任务队列,允许您根据任务的重要性对其进行优先级排序。

例如,您可以为关键任务创建高优先级队列

要保护和扩展生产中的 Apache Airflow,请使用反向代理、启用 SSL 并实施强身份验证。水平扩展、优化元数据数据库并使用任务队列来实现高可用性。定期的安全审计、加密和网络安全可确保 Airflow 部署安全、可扩展且可靠。