![在同一项目中使用 Cloud Composer 和 Cloud Functions 时,如何使用 VPC 服务控制在 GCP 上配置防火墙规则和 DNS 设置?](https://linux22.com/image/766191/%E5%9C%A8%E5%90%8C%E4%B8%80%E9%A1%B9%E7%9B%AE%E4%B8%AD%E4%BD%BF%E7%94%A8%20Cloud%20Composer%20%E5%92%8C%20Cloud%20Functions%20%E6%97%B6%EF%BC%8C%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20VPC%20%E6%9C%8D%E5%8A%A1%E6%8E%A7%E5%88%B6%E5%9C%A8%20GCP%20%E4%B8%8A%E9%85%8D%E7%BD%AE%E9%98%B2%E7%81%AB%E5%A2%99%E8%A7%84%E5%88%99%E5%92%8C%20DNS%20%E8%AE%BE%E7%BD%AE%EF%BC%9F.png)
我们在为单个项目配置 VPC Service Controls 下的两个 GCP 组件(GCP Cloud Composer、GCP Functions)时遇到了麻烦。我们可以使用 VPC Service Controls 分别配置它们,但只要添加第二个组件,就会遇到麻烦。
一旦我们为 Cloud Function 配置了防火墙规则和 DNS 设置,Composer 就会开始出现故障。Composer 监控工具(用于 Web 服务器、SQL 服务器等)显示 Composer 运行不正常。
我们做错了什么?
我们使用的文档:
https://cloud.google.com/functions/docs/securing/using-vpc-service-controls
https://cloud.google.com/composer/docs/configuring-vpc-sc
对于 Composer,我们使用以下设置:3 节点标准机器类型图像版本:composer-1.16.3-airflow-1.10.15 python:v3 私有 IP Composer
我们为 VPC 服务控制启用的 API:受限服务:Google Cloud Dataproc API Cloud Functions API Google Cloud Pub/Sub API Cloud SQL API Google Cloud Storage API Google Compute Engine API Google Kubernetes Engine API Google Container Registry API Cloud Monitoring API Cloud Composer API Artifact Registry API
防火墙设置(基于文档):
姓名 | 类型 | 目标 | 筛选器 | 协议/端口 | 行动 | 优先事项 |
---|---|---|---|---|---|---|
Composer-egress-gke-cluster-all-port 复制代码 | 出口 | 全部应用 | IP 范围:10.10.0.0/16 | tcp、udp | 允许 | 1000 |
composer-egress-healthcheck | 出口 | 全部应用 | IP 范围:130.211.0.0/22、35.191.0.0/16 | TCP:80,443 | 允许 | 1000 |
composer-egress-port53 | 出口 | 全部应用 | IP 范围:0.0.0.0/0 | tcp:53,udp:53 | 允许 | 1000 |
composer-egress-web 服务器 | 出口 | 全部应用 | IP 范围:172.31.251.0/24 | TCP:3306,3307 | 允许 | 1000 |
受限的 Google API | 出口 | 全部应用 | IP 范围:199.36.153.4/30 | TCP:443 | 允许 | 1000 |
作曲家拒绝所有 | 出口 | 全部应用 | IP 范围:0.0.0.0/0 | 全部 | 否定 | 2000 |
composer-ingress-健康检查 | 入口 | 全部应用 | IP 范围:130.211.0.0/22、35.191.0.0/16 | TCP:80,443 | 允许 | 1000 |
入口-iap | 入口 | 全部应用 | IP 范围:35.235.240.0/20 | 传输控制协议 | 允许 | 1000 |
gke-欧洲-west1-作曲家-DNS-xxx-xxx-全部 | 入口 | gke-欧洲-west1-Composer-dns-xxx-xxx-节点 | IP 范围:10.124.0.0/14 | TCP;UDP;ESP;AH;SCTP;ICMP | 允许 | 1000 |
gke-欧洲-west1-作曲家-DNS-xxx-xxx-主服务器 | 入口 | gke-欧洲-west1-Composer-dns-xxx-xxx-节点 | IP 范围:172.16.8.0/28 | TCP:10250,443 | 允许 | 1000 |
gke-欧洲-west1-作曲家-DNS-xxx-xxx-vms | 入口 | gke-欧洲-west1-Composer-dns-xxx-xxx-节点 | IP 范围:10.10.0.0/16 | TCP:1-65535;UDP:1-65535;ICMP | 允许 | 1000 |
DNS 设置(基于文档):
DNS 名称:googleapis.com。类型:私有
DNS 名称 | 类型 | TTl(秒) | 数据 |
---|---|---|---|
*.googleapis.com。 | 别名记录 | 300 | restricted.googleapis.com。 |
googleapis.com。 | 面向服务架构 | 21600 | ns-gcp-private.googledomains.com。云 DNS 服务器。 1 21600 3600 259200 300 |
googleapis.com。 | 国家标准 | 21600 | ns-gcp-private.googledomains.com。 |
DNS 名称:cloudfunctions.net。类型:私有
DNS 名称 | 类型 | TTl(秒) | 数据 |
---|---|---|---|
*.cloudfunctions.net。 | A | 300 | 199.36.153.4,199.36.153.5,199.36.153.6,199.36.153.7 |
cloudfunctions.net | 国家标准 | 21600 | ns-gcp-private.googledomains.com。云 DNS 服务器。 1 21600 3600 259200 300 |
cloudfunctions.net。 | 面向服务架构 | 21600 | ns-gcp-private.googledomains.com。 |
DNS 名称:pkg.dev。类型:私有
DNS 名称 | 类型 | TTl(秒) | 数据 |
---|---|---|---|
*.pkg.dev。 | 别名记录 | 300 | pkg.dev。 |
pkg.dev。 | 面向服务架构 | 21600 | ns-gcp-private.googledomains.com。云 DNS 服务器。 1 21600 3600 259200 300 |
pkg.dev。 | 国家标准 | 21600 | ns-gcp-private.googledomains.com。 |
pkg.dev。 | A | 300 | 199.36.153.4,199.36.153.5,199.36.153.6,199.36.153.7 |
DNS 名称:gcr.io。类型:私有
DNS 名称 | 类型 | TTl(秒) | 数据 |
---|---|---|---|
*.gcr.io。 | 别名记录 | 300 | gcr.io。 |
gcr.io。 | 面向服务架构 | 21600 | ns-gcp-private.googledomains.com。云 DNS 服务器。 1 21600 3600 259200 300 |
gcr.io。 | 国家标准 | 21600 | ns-gcp-private.googledomains.com。 |
gcr.io。 | A | 300 | 199.36.153.4,199.36.153.5,199.36.153.6,199.36.153.7 |
谢谢您提供的任何想法或帮助。
答案1
与此同时,我们也发现了问题所在:
- 最成问题的是
A
缺少googleapis.com.
包含 IP 地址的 DNS 记录类型。 - 第二个问题是,来自 Cloud Function 的 VPC SC 设置文档的防火墙规则阻止了以下之间的通信:
- 子网上 Composer 的节点
- 在工作节点和主节点(为 Composer 创建的 Kubernetes 集群)之间,主节点在不同的项目中自动创建,并通过网络对等连接到 Composer 工作节点的子网
这两个文档显然没有涵盖需要一起使用这两个服务的特殊情况。修复上述问题后,它已开始工作。
我们仍然面临的问题:
- 这类问题很难调试,因为 Composer 的监控 UI 似乎以不一致的方式显示信息
- 在子网上启用 StackDriver 日志后,很难使用它进行调试,因为信息太多,而且它们记录在“信息”级别,而不是“警告”或“错误”级别
答案2
关于您自己提供的答案中的调试问题。
Stackdriver 日志问题:
此问题已存在于 gcp 公共问题跟踪器的未解决问题中。您可以在以下链接中跟踪状态[1]。
Composer 监控面板问题:
您指定的问题是一般问题。请查看以下链接中是否有关于您的问题的未解决的问题 [2]。如果没有,请创建新问题。
您可以在下面的链接中查找或创建 gcp 产品特定问题。
GCP Cloud Composer 服务发行说明链接:
您可以定期检查此页面,了解有关云编写器服务的新功能或更新功能、错误修复和弃用功能的公告。