2

我制作了一个 DAG,它通过安装在 GCE 上的 Cloud SQL 代理连接到 Cloud SQL (MySQL)。它读取表列表并根据这些表生成许多任务。我已经成功地在我的机器上的本地 Airflow 中运行了这个 DAG,但是一旦我尝试将它部署为 Cloud Composer 实例,DAG 似乎无法正确加载到 Airflow Web UI 中。DAG 唯一可用的选项是刷新和删除,而不是所有其他选项。

DAG 由调度程序找到,我可以在日志中看到与 Cloud SQL 建立连接,检索表,但由于某种原因,Airflow Web UI 不喜欢它。日志中没有错误。

我知道 Composer 的架构,如下所示:https://cloud.google.com/composer/docs/concepts/overview,我想知道它是否与租户中的管理 Web UI 有关项目。然而,我试图短暂地打开防火墙到来自任何地方的所有连接,看看这是否是防火墙问题,但没有运气。所以我认为这可能是一个路由问题。

连接到 Cloud SQL 代理的代码如下所示:

with connection.cursor(pymysql.cursors.DictCursor) as cursor:
    sql = "select <redacted>"
    cursor.execute(sql)
    result = cursor.fetchall()

我这样创建集群:

gcloud composer environments create comp-etl-runner \
--disk-size="30GB" --location="europe-west1" --zone="europe-west1-b" \
--machine-type="n1-standard-1" --node-count=3 \
--service-account="<redacted>" \
--python-version=3 --image-version="composer-1.7.2-airflow-1.10.2" --network="dev-network-1" \
--subnetwork="dev-subnet-3"

我试过启用 ip aliasing 并像这样指定 ip 范围:

gcloud beta composer environments create comp-etl-runner \
--disk-size="30GB" --location="europe-west1" --zone="europe-west1-b" \
--machine-type="n1-standard-1" --node-count=3 \
--service-account="<redacted>" \
--python-version=3 --image-version="composer-1.7.2-airflow-1.10.2" --network="dev-network-1" \
--subnetwork="dev-subnet-3" \
--enable-ip-alias \
--cluster-ipv4-cidr="10.207.0.0/19" \
--services-ipv4-cidr="10.207.32.0/19"

但这并没有什么不同。

我还尝试添加这两个参数:

--enable-private-environment \
--master-ipv4-cidr="10.207.64.0/19" \

但随后环境创建失败了。

由于我的 DAG 在我的机器上的 Airflow 中完美运行,但在 Cloud Composer 中却没有,我正在撕扯我的头发。因此,任何想法将不胜感激。

4

1 回答 1

0

我相信最合适的解决方法是在同一个 GKE 集群中部署一个自我管理的网络服务器(如此处所述),以便能够通过 Cloud SQL 代理。

另一种选择是为您的 CloudSQL 实例使用公共 IP,并将所有内容列入白名单,使其可在公共互联网上访问。我不确定你是否能在你的用例中负担得起。如果您选择此选项,则应将您的实例配置为使用 SSL以最大限度地提高安全性。

于 2019-10-14T08:13:25.493 回答