1. 简介
借助 Private Service Connect,服务提供方可以将服务从一个 VPC 网络以私有方式公开给另一个 VPC 网络。使用方可以通过 PSC 端点或 PSC 后端访问提供方服务。
本 Codelab 重点介绍 PSC 后端。PSC 后端与 Google Cloud 代理负载平衡器(应用负载平衡器或网络负载平衡器)搭配使用。使用 PSC 后端可提供更精细的使用方控制,例如:
- 更深入的可观测性和日志记录
- Cloud Armor 集成
- 自定义网址
- 高级流量管理
- 自定义 TLS 证书
在此 Codelab 中,您将学习如何使用全球外部应用负载平衡器创建 Private Service Connect 后端,以私密方式访问另一个网络中的生产者服务。
学习内容
- 创建并配置与全球外部应用负载平衡器关联的 PSC 后端
- 配置 Apache 托管的 Web 服务,并通过服务连接将其公开为 PSC 服务
- 创建 SSL 证书以终止内部和外部应用负载平衡器上的 SSL
- 配置 Cloud DNS 公开可用区以访问 PSC 服务
所需条件
- 具有所有者权限的 Google Cloud 项目
2. 测试环境
您将创建的环境将由使用方 VPC 和提供方 VPC 组成。在生产者 VPC 中,您将通过用于构建开源 Apache Web 服务的实例模板部署代管式实例组。您还将部署一个 test-vm,以确保服务的本地功能正常运行。您将通过服务连接将 Apache 服务公开为 PSC 提供方服务。
在使用方 VPC 中,您将部署一个全球外部应用负载平衡器,并将 PSC 后端服务指向 Apache 服务。然后,您将设置一个公共 DNS 区域,以便在公共互联网上访问 PSC 服务。
3. 设置和要求
自定进度的环境设置
- 登录 Google Cloud 控制台,然后创建一个新项目或重复使用现有项目。如果您还没有 Gmail 或 Google Workspace 账号,则必须创建一个。
- 项目名称是此项目参与者的显示名称。它是 Google API 尚未使用的字符串。您可以随时对其进行更新。
- 项目 ID 在所有 Google Cloud 项目中是唯一的,并且是不可变的(一经设置便无法更改)。Cloud 控制台会自动生成一个唯一字符串;通常情况下,您无需关注该字符串。在大多数 Codelab 中,您都需要引用项目 ID(通常用
PROJECT_ID
标识)。如果您不喜欢生成的 ID,可以再随机生成一个 ID。或者,您也可以尝试自己的项目 ID,看看是否可用。完成此步骤后便无法更改该 ID,并且此 ID 在项目期间会一直保留。 - 此外,还有第三个值,即部分 API 使用的项目编号,供您参考。如需详细了解所有这三个值,请参阅文档。
- 接下来,您需要在 Cloud 控制台中启用结算功能,以便使用 Cloud 资源/API。运行此 Codelab 应该不会产生太多的费用(如果有的话)。若要关闭资源以避免产生超出本教程范围的结算费用,您可以删除自己创建的资源或删除项目。Google Cloud 新用户符合参与 300 美元免费试用计划的条件。
启动 Cloud Shell
虽然可以通过笔记本电脑对 Google Cloud 进行远程操作,但在此 Codelab 中,您将使用 Google Cloud Shell,这是一个在云端运行的命令行环境。
在 Google Cloud 控制台 中,点击右上角工具栏中的 Cloud Shell 图标:
预配和连接到环境应该只需要片刻时间。完成后,您应该会看到如下内容:
这个虚拟机已加载了您需要的所有开发工具。它提供了一个持久的 5 GB 主目录,并且在 Google Cloud 中运行,大大增强了网络性能和身份验证功能。您在此 Codelab 中的所有工作都可以在浏览器中完成。您无需安装任何程序。
4. 准备工作
启用 API
在 Cloud Shell 中,确保项目 ID 已设置
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] export project=YOUR-PROJECT-NAME export region=us-central1 echo $project echo $region
启用所有必要的服务
gcloud services enable compute.googleapis.com gcloud services enable servicedirectory.googleapis.com gcloud services enable dns.googleapis.com
5. 提供方 VPC 设置
创建 VPC 网络
通过 Cloud Shell
gcloud compute networks create producer-vpc --subnet-mode custom
创建子网
系统将在 provider-vpc 中部署两个通用子网。service-subnet 将用于部署 Apache Web 服务虚拟机以及负载平衡器转发规则。test-client-subnet 将位于其他区域,并将用于部署虚拟机,以测试启用了全球访问权限的 Apache 服务。
通过 Cloud Shell
gcloud compute networks subnets create service-subnet \ --network=producer-vpc \ --range=10.0.0.0/28 \ --region=$region
通过 Cloud Shell
gcloud compute networks subnets create test-client-subnet \ --network=producer-vpc \ --range=10.0.1.0/28 \ --region=us-east4
我们还必须部署一个代理专用子网,以便与区域级内部应用负载平衡器搭配使用。
通过 Cloud Shell
gcloud compute networks subnets create central-proxy-subnet \ --network=producer-vpc \ --range=10.100.101.0/24 \ --region=$region \ --purpose=REGIONAL_MANAGED_PROXY \ --role=ACTIVE
部署 PSC 服务时,每项唯一服务都需要与服务连接相关联的相应 PSC NAT 子网。此子网的大小应根据预计连接的端点数量进行适当调整。
通过 Cloud Shell
gcloud compute networks subnets create psc-nat-subnet \ --network=producer-vpc \ --region=$region \ --range=10.100.100.0/24 \ --purpose=PRIVATE_SERVICE_CONNECT
创建 Cloud NAT
您需要使用 Cloud NAT 为我们的生产者服务安装适当的软件包。
通过 Cloud Shell
gcloud compute routers create central-cr \ --network=producer-vpc \ --region=$region
通过 Cloud Shell
gcloud compute routers nats create central-nat \ --router=central-cr \ --region=$region \ --nat-all-subnet-ip-ranges \ --auto-allocate-nat-external-ips
创建网络防火墙政策和规则
通过 Cloud Shell
gcloud compute network-firewall-policies create producer-vpc-policy --global gcloud compute network-firewall-policies associations create \ --firewall-policy producer-vpc-policy \ --network producer-vpc \ --name network-producer-vpc \ --global-firewall-policy
如需允许 IAP 连接到您的虚拟机实例,请创建一个防火墙规则,该规则:
- 适用于您希望使用 IAP 可访问的所有 VM 实例。
- 允许来自 IP 地址范围 35.235.240.0/20 的入站流量。此范围包含 IAP 用于 TCP 转发的所有 IP 地址。
通过 Cloud Shell
gcloud compute network-firewall-policies rules create 1000 \ --action ALLOW \ --firewall-policy producer-vpc-policy \ --description "SSH with IAP" \ --direction INGRESS \ --src-ip-ranges 35.235.240.0/20 \ --layer4-configs tcp:22 \ --global-firewall-policy
您需要再创建两个防火墙规则,以允许来自负载平衡器代理专用子网 (2000) 的入站流量到达负载平衡器后端,以及一个允许在后端实例上执行负载平衡器健康检查的规则 (2001)。
通过 Cloud Shell
gcloud compute network-firewall-policies rules create 2000 \ --action ALLOW \ --firewall-policy producer-vpc-policy \ --description "allow traffic from load balancer proxy subnet" \ --direction INGRESS \ --src-ip-ranges 10.100.101.0/24 \ --layer4-configs tcp:443 \ --global-firewall-policy gcloud compute network-firewall-policies rules create 2001 \ --action ALLOW \ --firewall-policy producer-vpc-policy \ --description "allow load balancer health checks" \ --direction INGRESS \ --src-ip-ranges 130.211.0.0/22,35.191.0.0/16 \ --layer4-configs tcp:443 \ --global-firewall-policy
6. 创建 Apache Web 服务
我们将创建一个简单的 Apache Web 服务,用于显示“PSC 服务”。
创建实例模板
通过 Cloud Shell
gcloud compute instance-templates create apache-service-template \ --network producer-vpc \ --subnet service-subnet \ --region $region \ --no-address \ --metadata startup-script='#! /bin/bash sudo apt-get update apt-get install apache2 -y a2enmod ssl sudo a2ensite default-ssl echo "PSC Service" | \ tee /var/www/html/index.html systemctl restart apache2'
为 MIG 创建健康检查
通过 Cloud Shell
gcloud compute health-checks create https service-mig-healthcheck \ --port=443 \ --global
创建托管式实例组
通过 Cloud Shell
gcloud compute instance-groups managed create psc-service-mig \ --region $region \ --size=2 \ --template=apache-service-template \ --health-check=service-mig-healthcheck gcloud compute instance-groups managed set-named-ports psc-service-mig \ --named-ports=https:443 \ --region=$region
7. 创建自签名证书
完成此处说明的第 1 步,以创建自签名证书。您可以在 Cloud Shell 中运行所有命令。完成第 1 步后,请返回此处。您的通用名称必须配置为 example.com。
创建要与负载平衡器关联的证书资源。将证书和私钥参数替换为您的具体文件名。
通过 Cloud Shell
gcloud compute ssl-certificates create producer-service-cert \ --certificate=<your-producer-certfile.cert> \ --private-key=<your-producer-keyfile.pem> \ --region=$region
8. 创建区域级内部应用负载平衡器
接下来,我们将为该服务创建负载平衡器组件。我们使用的是区域级内部应用负载平衡器,但您也可以选择使用任何 Google Cloud 内部负载平衡器。请参阅适当的负载平衡器文档,了解如何处理 TLS。
创建要用于负载平衡器转发规则的内部 IP 地址,并记下该 IP 地址,以便稍后对服务进行测试调用时使用。
通过 Cloud Shell
gcloud compute addresses create apache-service-ip \ --region=$region \ --subnet=service-subnet gcloud compute addresses describe apache-service-ip \ --format="get(address)" \ --region=$region
创建负载平衡器健康检查。
通过 Cloud Shell
gcloud compute health-checks create https lb-apache-service-hc \ --region=$region \ --port-name=https
创建后端服务。
通过 Cloud Shell
gcloud compute backend-services create apache-bes\ --load-balancing-scheme=INTERNAL_MANAGED \ --protocol=HTTPS \ --port-name=https \ --health-checks=lb-apache-service-hc \ --health-checks-region=$region \ --region=$region gcloud compute backend-services add-backend apache-bes \ --balancing-mode=UTILIZATION \ --instance-group=psc-service-mig \ --region=$region
创建网址映射。
通过 Cloud Shell
gcloud compute url-maps create producer-url-map \ --default-service=apache-bes \ --region=$region
创建目标 HTTPS 代理。
通过 Cloud Shell
gcloud compute target-https-proxies create https-proxy \ --url-map=producer-url-map \ --region=$region \ --ssl-certificates=producer-service-cert
创建转发规则。
通过 Cloud Shell
gcloud compute forwarding-rules create apache-fr \ --load-balancing-scheme=INTERNAL_MANAGED \ --network=producer-vpc \ --subnet=service-subnet \ --address=apache-service-ip \ --ports=443 \ --region=$region \ --target-https-proxy=https-proxy \ --target-https-proxy-region=$region \ --allow-global-access
9. 创建测试虚拟机并在本地测试服务
在创建服务附件之前,我们将在其他区域创建一个测试客户端虚拟机,以测试负载平衡器是否已正确配置了全球访问权限和 TLS。
通过 Cloud Shell
gcloud compute instances create vm-client \ --zone=us-east4-a \ --subnet=test-client-subnet \ --no-address
等待大约一分钟,让预配完成,然后通过 SSH 连接到实例。
通过 Cloud Shell
gcloud compute ssh \ --zone "us-east4-a" "vm-client" \ --tunnel-through-iap \ --project $project
通过负载平衡器通过 443 连接来测试 Apache 服务。内部 IP 地址是您之前预留并记下的 IP 地址。
curl https://example.com:443 -k --connect-to example.com:443:<YOUR-INTERNAL-IP>:443
预期结果
PSC Service
退出虚拟机。
通过 vm-client
exit
10. 创建服务连接
在此示例中,我们将服务连接配置为仅允许来自此项目的 PSC 连接。此字段可配置为接受一个或多个特定项目或影音平台,但不能同时接受这两者。我们已将连接数上限设置为 5 个连接。每个项目或网络都必须设置一个限制。
通过 Cloud Shell
gcloud compute service-attachments create apache-service-attachment \ --region=$region \ --producer-forwarding-rule=apache-fr \ --connection-preference=ACCEPT_MANUAL \ --consumer-accept-list=$project=5 \ --nat-subnets=psc-nat-subnet
您应记下服务附件 URI (selfLink),因为您需要在下一步中进行 PSC 后端配置时使用它。您可以在 Cloud Shell 中执行以下命令来获取该密钥。
通过 Cloud Shell
gcloud compute service-attachments describe apache-service-attachment \ --region $region
复制从 projects 开始的 URI
示例:projects/$project/regions/$region/serviceAttachments/apache-service-attachment
11. 使用方 VPC 设置
创建 VPC 网络
通过 Cloud Shell
gcloud compute networks create consumer-vpc --subnet-mode custom
创建子网
使用方需要在要部署 Private Service Connect 网络端点组 (NEG) 的位置创建一个子网。
通过 Cloud Shell
gcloud compute networks subnets create consumer-subnet \ --network=consumer-vpc \ --region=$region \ --range=10.0.0.0/28
12. 预留外部 IP 地址并创建消费者端自签名证书
外部 IP
创建一个外部静态 IP 地址,稍后将用于负载平衡器转发规则,并将 IP 地址捕获到 Cloud Shell 变量中。
通过 Cloud Shell
gcloud compute addresses create external-psc-ip \ --network-tier=PREMIUM \ --ip-version=IPV4 \ --global export externalip=$(gcloud compute addresses describe external-psc-ip \ --format="get(address)" \ --global) echo $externalip
使用方自签发证书
再次完成此处说明的第 1 步,以创建自签名证书。您可以在 Cloud Shell 中运行所有命令。完成第 1 步后,请返回此处。我们将使用名为 nip.io 的开源公共通配符 DNS 服务,而不是拥有自己的公共 DNS 可用区。PSC 服务的公共网址将使用您刚刚配置的外部 IP 地址。您的通用名称必须与 <YOUR-EXTERNAL-IP.nip.io> 搭配使用
创建要与外部负载平衡器关联的证书资源。将证书和私钥参数替换为您的具体文件名。
通过 Cloud Shell
gcloud compute ssl-certificates create consumer-service-cert \ --certificate=<your-consumer-certfile.cert> \ --private-key=<your-consumer-keyfile.pem> \ --global
13. 创建负载平衡器组件
我们将创建一个全球外部应用负载平衡器,并将 PSC NEG 指向新创建的服务附件作为后端服务。
请准备好我们在上一步中记下的服务附件 URI。将以下 psc-target-service 替换为您的 URI。
通过 Cloud Shell
gcloud compute network-endpoint-groups create apache-psc-neg \ --network-endpoint-type=private-service-connect \ --psc-target-service=projects/$project/regions/$region/serviceAttachments/apache-service-attachment \ --region=$region \ --network=consumer-vpc \ --subnet=consumer-subnet
创建后端服务。
通过 Cloud Shell
gcloud compute backend-services create apache-pscneg-bes \ --load-balancing-scheme=EXTERNAL_MANAGED \ --protocol=HTTPS \ --global gcloud compute backend-services add-backend apache-pscneg-bes \ --network-endpoint-group=apache-psc-neg \ --network-endpoint-group-region=$region \ --global
创建网址映射
通过 Cloud Shell
gcloud compute url-maps create consumer-url-map \ --default-service=apache-pscneg-bes \ --global
创建目标 HTTPS 代理。
通过 Cloud Shell
gcloud compute target-https-proxies create psc-https-proxy \ --url-map=consumer-url-map \ --ssl-certificates=consumer-service-cert
创建转发规则
通过 Cloud Shell
gcloud compute forwarding-rules create external-fr \ --load-balancing-scheme=EXTERNAL_MANAGED \ --network-tier=PREMIUM \ --address=external-psc-ip \ --global \ --target-https-proxy=psc-https-proxy \ --ports=443
14. 创建公共 DNS 区域
通过 Cloud Shell
gcloud dns managed-zones create "psc-service" \ --dns-name=$externalip.nip.io. \ --description="public dns for psc service" \ --visibility=public
通过 Cloud Shell
gcloud dns record-sets transaction start \ --zone="psc-service" gcloud dns record-sets transaction add $externalip \ --name=$externalip.nip.io \ --ttl=300 \ --type=A \ --zone="psc-service" gcloud dns record-sets transaction execute \ --zone="psc-service"
15. 测试使用方 PSC 连接
请等待 7 到 10 分钟,然后再进行测试,以便公共 DNS 传播。
通过 Cloud Shell
curl https://$externalip.nip.io -k
您还可以通过在浏览器或桌面终端中输入 https://<您的外部 IP>.nip.io 来从浏览器进行测试。
预期结果
PSC Service
16. 清理步骤
在一个 Cloud Shell 终端中删除实验组件
gcloud dns record-sets delete $externalip.nip.io --zone="psc-service" --type=A -q gcloud dns managed-zones delete "psc-service" -q gcloud compute forwarding-rules delete external-fr --global -q gcloud compute target-https-proxies delete psc-https-proxy -q gcloud compute url-maps delete consumer-url-map --global -q gcloud compute backend-services delete apache-pscneg-bes --global -q gcloud compute network-endpoint-groups delete apache-psc-neg --region=$region -q gcloud compute ssl-certificates delete consumer-service-cert --global -q gcloud compute addresses delete external-psc-ip --global -q gcloud compute networks subnets delete consumer-subnet --region $region -q gcloud compute networks delete consumer-vpc -q gcloud compute instances delete vm-client --zone=us-east4-a -q gcloud compute service-attachments delete apache-service-attachment --region $region -q gcloud compute forwarding-rules delete apache-fr --region $region -q gcloud compute target-https-proxies delete https-proxy --region $region -q gcloud compute url-maps delete producer-url-map --region $region -q gcloud compute backend-services delete apache-bes --region $region -q gcloud compute health-checks delete lb-apache-service-hc --region $region -q gcloud compute addresses delete apache-service-ip --region $region -q gcloud compute ssl-certificates delete producer-service-cert --region $region -q gcloud compute instance-groups managed delete psc-service-mig --region $region -q gcloud compute health-checks delete service-mig-healthcheck --global -q gcloud compute instance-templates delete apache-service-template -q gcloud compute network-firewall-policies rules delete 2001 --firewall-policy producer-vpc-policy --global-firewall-policy -q gcloud compute network-firewall-policies rules delete 2000 --firewall-policy producer-vpc-policy --global-firewall-policy -q gcloud compute network-firewall-policies rules delete 1000 --firewall-policy producer-vpc-policy --global-firewall-policy -q gcloud compute network-firewall-policies associations delete --firewall-policy=producer-vpc-policy --name=network-producer-vpc --global-firewall-policy -q gcloud compute network-firewall-policies delete producer-vpc-policy --global -q gcloud compute routers nats delete central-nat --router=central-cr --region $region -q gcloud compute routers delete central-cr --region $region -q gcloud compute networks subnets delete psc-nat-subnet --region $region -q gcloud compute networks subnets delete service-subnet --region $region -q gcloud compute networks subnets delete test-client-subnet --region us-east4 -q gcloud compute networks subnets delete central-proxy-subnet --region $region -q gcloud compute networks delete producer-vpc -q
17. 恭喜!
恭喜您完成此 Codelab。
所学内容
- 创建并配置与全球外部应用负载平衡器关联的 PSC 后端
- 配置 Apache 托管的 Web 服务,并通过服务连接将其公开为 PSC 服务
- 创建 SSL 证书以终止内部和外部应用负载平衡器上的 SSL
- 配置 Cloud DNS 公开可用区以访问 PSC 服务