首页 > 解决方案 > 在同一项目中使用 Cloud Composer 和 Cloud Functions 时,如何使用 VPC Service Controls 在 GCP 上配置防火墙规则和 DNS 设置?

问题描述

我们在为单个项目配置 VPC Service Controls 下的两个 GCP 组件(GCP Cloud Composer、GCP Functions)时遇到问题。我们可以使用 VPC Service Controls 单独配置它们,但是一旦添加第二个组件,我们就会遇到麻烦。

一旦我们为 Cloud Function 配置了防火墙规则和 DNS 设置,Composer 就会开始失败。Composer 监控工具(用于 webserver、SQL server 等)显示 composer 不健康。

我们做错了什么?

我们使用的文档:
https ://cloud.google.com/functions/docs/securing/using-vpc-service-controls
https://cloud.google.com/composer/docs/configuring-vpc-sc

对于 Composer,我们使用以下设置:

我们为 VPC Service Controls 启用的 API:

防火墙设置(基于文档):

姓名 类型 目标 过滤器 协议/端口 行动 优先
作曲家-出口-gke-集群-所有端口 出口 全部应用 IP 范围:10.10.0.0/16 tcp、udp 允许 1000
作曲家出口健康检查 出口 全部应用 IP 范围:130.211.0.0/22、35.191.0.0/16 tcp:80,443 允许 1000
作曲家出口端口53 出口 全部应用 IP 范围:0.0.0.0/0 tcp:53, UDP:53 允许 1000
作曲家出口网络服务器 出口 全部应用 IP 范围:172.31.251.0/24 tcp:3306,3307 允许 1000
受限制的谷歌 API 出口 全部应用 IP 范围:199.36.153.4/30 tcp:443 允许 1000
作曲家拒绝所有 出口 全部应用 IP 范围:0.0.0.0/0 全部 否定 2000
作曲家-入口-helthcheck 入口 全部应用 IP 范围:130.211.0.0/22、35.191.0.0/16 tcp:80,443 允许 1000
入口-iap 入口 全部应用 IP 范围:35.235.240.0/20 tcp 允许 1000
gke-europe-west1-composer-dns-xxx-xxx-all 入口 gke-europe-west1-composer-dns-xxx-xxx-node IP 范围:10.124.0.0/14 tcp;udp;esp;ah;sctp;icmp 允许 1000
gke-europe-west1-composer-dns-xxx-xxx-master 入口 gke-europe-west1-composer-dns-xxx-xxx-node IP 范围:172.16.8.0/28 tcp:10250,443 允许 1000
gke-europe-west1-composer-dns-xxx-xxx-vms 入口 gke-europe-west1-composer-dns-xxx-xxx-node IP 范围:10.10.0.0/16 tcp:1-65535;udp:1-65535;icmp 允许 1000

DNS 设置(基于文档):

DNS 名称:googleapis.com。类型:私人

DNS 名称 类型 TTl(秒) 数据
*.googleapis.com。 CNAME 300 受限制的.googleapis.com。
googleapis.com。 SOA 21600 ns-gcp-private.googledomains.com。cloud-dns-hostmaster.google.com。1 21600 3600 259200 300
googleapis.com。 NS 21600 ns-gcp-private.googledomains.com。

DNS 名称:cloudfunctions.net。类型:私人

DNS 名称 类型 TTl(秒) 数据
*.cloudfunctions.net。 一个 300 199.36.153.4,199.36.153.5,199.36.153.6,199.36.153.7
云功能网 NS 21600 ns-gcp-private.googledomains.com。cloud-dns-hostmaster.google.com。1 21600 3600 259200 300
cloudfunctions.net。 SOA 21600 ns-gcp-private.googledomains.com。

DNS 名称:pkg.dev。类型:私人

DNS 名称 类型 TTl(秒) 数据
*.pkg.dev。 CNAME 300 pkg.dev。
pkg.dev。 SOA 21600 ns-gcp-private.googledomains.com。cloud-dns-hostmaster.google.com。1 21600 3600 259200 300
pkg.dev。 NS 21600 ns-gcp-private.googledomains.com。
pkg.dev。 一个 300 199.36.153.4,199.36.153.5,199.36.153.6,199.36.153.7

DNS 名称:gcr.io。类型:私人

DNS 名称 类型 TTl(秒) 数据
*.gcr.io。 CNAME 300 gcr.io。
gcr.io。 SOA 21600 ns-gcp-private.googledomains.com。cloud-dns-hostmaster.google.com。1 21600 3600 259200 300
gcr.io。 NS 21600 ns-gcp-private.googledomains.com。
gcr.io。 一个 300 199.36.153.4,199.36.153.5,199.36.153.6,199.36.153.7

感谢您的任何想法或帮助,您可以提供什么。

标签: google-cloud-platformgoogle-cloud-functionsgoogle-cloud-composergoogle-cloud-dnsgoogle-vpc

解决方案


同时我们也发现了问题:

  • 最成问题的是A缺少googleapis.com.包含 IP 地址的类型 DNS 记录。
  • 第二个问题是来自 Cloud Function 的 VPC SC 设置文档的防火墙规则阻止了以下之间的通信:
    • 子网上 Composer 的节点
    • 在工作节点和主节点(为作曲家创建的 Kubernetes 集群)之间,主节点在不同的项目中自动创建,并通过网络对等连接到作曲家工作人员的子网

当这些服务中的两个应该一起使用时,这两个文档显然没有涵盖这种特殊情况。解决上述问题后,它已开始工作。

我们仍然遇到的问题:

  • 此类问题很难调试,因为 composer 的监控 UI 显示信息的方式似乎不一致
  • 在子网上启用 StackDriver 日志后,很难使用它进行调试,因为它的信息太多,而且它们记录在“信息”级别,而不是“警告”或“错误”级别

推荐阅读