【发布时间】:2020-11-02 20:31:43
【问题描述】:
如何允许 Cloud Composer Airflow DAG 通过 VPN 网关连接到 REST API?集群连接到相应的 VPC。
kube-proxy 可以访问 API,但容器不能。
我已经通过 SSH 连接到 kube-proxy 和容器并尝试了 traceroute。容器的 traceroute 以 kube-proxy 结束。 kube-proxy 在到达目的地之前有 4 个跃点。
我已经从 kube-proxy 中转储了 iptables,它们没有指定任何关于使用容器对 VPC 子网进行 NAT 的内容。
VPC 子网也不会显示在容器中,这是设计使然。
一些阅读材料: https://www.stackrox.com/post/2020/01/kubernetes-networking-demystified/
EDIT1:更多信息:
假设 VPN 将 VPC 连接到远程 10.200.0.0 网络。
VPC 有多个子网。主要范围是例如10.10.0.0/20。对于每个 Kubernetes 集群,我们还有两个子网,一个用于每个 pod (10.16.0.0/14),另一个用于服务 (10.20.0.0/20)。网关是 10.10.0.1。
每个 pod 又有自己的范围,其中 pod_1 是 10.16.0.0/14,pod_2 是 10.16.1.0/14,pod_3 是 10.16.3.0/14 等等。
其中一个 kube-proxy 有多个网络适配器。它使用 eth0 驻留在 10.10.0.0 网络中,并有一个到 10.16.0.0 的 cbr0 网桥。通过所述 kube-proxy 通过桥接,Airflow 的工作人员正在连接到网络。一名工人,例如10.16.0.1 只有一个网络适配器。
kube-proxy 可以访问 10.200.0.0 网络。 Airflow 工作人员不能。
我们如何让 worker 访问 10.200.0.0 网络?我们需要更改 kube-proxy 的 iptables 吗?
【问题讨论】:
-
VPN是否部署在当前VPC中?还是您执行对等操作以达到它?
-
@guillaumeblaquiere 它部署在当前的 VPC 中,带有 Google Cloud Classic VPN。
-
您是否看到请求已到达 VPN 的另一端?大多数时候,当我设置 VPN 时,我会忘记返回的路......
-
嗨@guillaumeblaquiere,我编辑了我的初始帖子以进一步解释网络。我们的 VPN 确实按预期工作,并且可以从我们可以访问和使用 API 的任何其他 VM 工作。现在我们想在 DAG 中部署我们的代码,以便它自动运行。
-
嗯,如果您的连接正常,如果您没有特殊的防火墙规则,如果子网在同一个 VPC 中,它应该可以工作...您是否配置了 NAT?
标签: networking google-cloud-platform airflow google-kubernetes-engine