如何设置 Google Cloud Composer 以便能够在 GKE Autopilot 集群上启动 pods

How to setup Google Cloud Composer to be able to launch pods on a GKE Autopilot cluster

我希望能够使用 Google Cloud Composer 集群将 kubernetes pods 从其 DAG 启动到单独的 GKE Autopilot 集群,而不是 Cloud Composer 的 GKE 集群。

我创建了一个 GKE autopilot 集群,“控制平面全局访问”设置为禁用,并且只允许某些授权网络连接到控制平面。 (基于 documentation 中推荐的安全最佳实践)

我的 pods 都无法启动,并显示以下错误消息:

urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='3X.XXX.XXX.XX6', port=443): Max retries exceeded with url: /api/v1/namespaces/sink/pods?labelSelector=dag_id%3Dtest_dag%2Cexecution_date%3D2021-03-17T212059.4745700000-f0b251c80%2Ctask_id%3Dtest_sync (Caused by NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x7f0f3f6a4e80>: Failed to establish a new connection: [Errno 110] Connection timed out',)

我正在使用 GKEStartPodOperator,它之前能够在自我管理(非自动驾驶)且未禁用“控制平面全局访问”的 GKE 集群上启动 pods。

是否有关于如何设置 Composer 以连接到不向控制平面公开全局访问权限的 GKE 自动驾驶集群并启动的文档pods?

即使使用 GKE Autopilot,您也可以使用最初为普通 GKE 集群编写的同一组运算符,例如 GKEStartPodOperator。由于您看到的错误是 Kubernetes 控制平面超时,因此您的 authorized networks 设置很可能不包括 Cloud Composer 环境的工作人员使用的地址。

如果您使用的是标准 Composer 环境(非私有 IP),您将需要确保 GCP 范围包含在您的授权网络中(因为您环境的节点被分配了临时的 public 地址) .

如果您使用私有 IP 环境,则可以使用私有连接访问 Kubernetes 控制平面,或者,您可以配置 Cloud NAT 以允许您的环境使用静态 IP 地址访问网络资源。在后一种情况下,NAT 的 IP 地址需要包含在您的授权网络设置中。