Private Service Connect 66

1. 简介

Private Service Connect 彻底改变了组织在 Google Cloud 生态系统中使用服务的方式,同时对 IPv4 和 IPv6 地址提供全面支持。它结合了增强的安全性、简化的连接性、更出色的性能和集中式管理,是面向寻求可靠、可信且高效的服务使用模式、为未来的网络做好准备的企业的理想解决方案。无论您是构建混合云、在组织内共享服务,还是访问第三方服务,PSC 都能提供无缝且安全的方式,让您充分利用 Google Cloud 的潜力,同时享受 IPv6 的优势。

学习内容

  • PSC 66 的主要优势
  • Private Service Connect 66 支持的翻译
  • 双栈 ULA 概览
  • 网络要求
  • 创建 Private Service Connect 提供方服务
  • 创建 Private Service Connect 端点
  • 从双栈虚拟机建立与 Private Service Connect 端点的连接

所需条件

  • 具有所有者权限的 Google Cloud 项目

2. 您将构建的内容

您将建立一个生产者网络,以便通过 Private Service Connect (PSC) 将 Apache Web 服务器部署为已发布服务。发布后,您需要执行以下操作来验证对生产者服务的访问权限:

  • 从使用方 VPC 的双栈 GCE 实例,定位到 IPv6 PSC 端点以访问提供方服务。

PSC 66 的主要优势

  • 无缝集成:PSC 可与配置为 IPv6 的 VPC 网络无缝集成,让您能够为服务连接利用 IPv6 地址的好处。
  • 双栈支持:PSC 支持双栈配置,可在同一 VPC 中同时使用 IPv4 和 IPv6,从而为您的网络提供灵活性并确保其面向未来。
  • 简化过渡:PSC 允许您在现有 IPv4 基础架构中逐步采用 IPv6,从而简化向 IPv6 的过渡。
  • 提供方支持:提供方必须采用双栈,从而导致使用方 PSC 端点仅支持 IPv6。

3. Private Service Connect 64 和 66 支持的转换

消费者注意事项

端点的 IP 版本可以是 IPv4 或 IPv6,但不能同时是这两者。如果 IPv4 地址的子网是单栈,则使用方可以使用该地址。如果 IPv4 或 IPv6 地址的子网是双栈,则使用方可以使用该地址。使用方可以将 IPv4 和 IPv6 端点同时连接到同一服务连接,这对于将服务迁移到 IPv6 很有帮助。

生产方注意事项

提供方转发规则的 IP 版本决定了服务连接的 IP 版本以及服务连接的出站流量。服务连接的 IP 版本可以是 IPv4 或 IPv6,但不能同时是这两者。如果 IPv4 地址的子网是单栈,则提供方可以使用该地址。如果 IPv4 或 IPv6 地址的子网是双栈,则提供方可以使用该地址。

提供方转发规则的 IP 地址的 IP 版本必须与服务连接的 NAT 子网的堆栈类型兼容。

  • 如果提供方转发规则为 IPv4,则 NAT 子网可以是单栈或双栈。
  • 如果提供方转发规则为 IPv6,则 NAT 子网必须是双栈。

支持的配置可以使用以下组合:

  • IPv4 端点到 IPv4 服务连接
  • IPv6 端点到 IPv6 服务连接
  • IPv6 端点到 IPv4 服务连接。在此配置中,Private Service Connect 会自动在两个 IP 版本之间进行转换。

不支持以下各项:

Private Service Connect 不支持将 IPv4 端点与 IPv6 服务连接相连接。在这种情况下,端点创建会失败,并显示以下错误消息:

使用 IPv4 地址的 Private Service Connect 转发规则无法定位到 IPv6 服务附件。

4. 双栈 ULA 概览

Google Cloud 支持创建 ULA 专用 IPv6 子网和虚拟机。RFC 4193 定义了适用于本地通信的 IPv6 地址方案,非常适合 VPC 内通信。ULA 地址无法全局路由,因此您的虚拟机与互联网完全隔离,使用 IPv6 提供类似 RFC-1918 的行为。Google Cloud 允许创建 /48 VPC 网络 ULA 前缀,以便从该 VPC 网络范围分配所有 /64 IPv6 ULA 子网。

与 Google Cloud 支持的全球唯一外部 IPv6 地址类似,每个启用了 ULA IPv6 的子网都将从 /48 VPC 网络 ULA 范围接收一个 /64 子网,每个虚拟机都将从该子网分配一个 /96 地址。

RFC4193 定义了 fc00::/7 范围内的 IPv6 地址空间。ULA 地址可以在专用网络/网站内自由分配和使用。Google Cloud 会分配 fd20::/20 范围内的所有 ULA 地址。这些地址只能在 VPC 范围内路由,无法在全球 IPv6 互联网中路由。

Google Cloud 分配的 ULA 地址在所有 VPC 网络中都保证是唯一的。Google Cloud 会确保不会向任何两个 VPC 网络分配相同的 ULA 前缀。这样可以消除 VPC 网络中范围重叠的问题。

您可以让 Google Cloud 自动为您的网络分配 /48,也可以选择特定的 /48 IPv6 前缀。如果您指定的 IPv6 前缀已分配给其他 VPC 或本地网络,您可以选择其他范围。

5. 网络要求

以下是使用方网络和提供方网络的网络要求细分:

使用方网络(所有组件均部署在 us-central1 中)

组件

说明

VPC

双栈网络需要启用了 ULA 的自定义模式 VPC

PSC 端点

用于访问生产者服务的 IPv6 PSC 端点

子网

双栈

GCE

双栈

生产者网络(所有组件均部署在 us-central1)

组件

说明

VPC

双栈网络需要启用了 ULA 的自定义模式 VPC

PSC NAT 子网

双栈。来自使用方 VPC 网络的数据包使用来源 NAT (SNAT) 进行转换,以便其原始的来源 IP 地址转换为来自提供方 VPC 网络中的 NAT 子网的来源 IP 地址。

PSC 转发规则

双栈。 内部直通式网络负载平衡器

健康检查

一种适用于负载均衡实例的入站流量规则,允许来自 Google Cloud 健康检查系统 (2600:2d00:1:b029::/64) 的流量。

后端服务

后端服务充当负载平衡器与后端资源之间的桥梁。在本教程中,后端服务与非代管式实例组相关联。

非代管式实例组

支持需要单独配置或调整的虚拟机。不支持自动扩缩。

6. Codelab 拓扑

11a36b2a52d60fe7.png

7. 设置和要求

自定进度的环境设置

  1. 登录 Google Cloud 控制台,然后创建一个新项目或重复使用现有项目。如果您还没有 Gmail 或 Google Workspace 账号,则必须创建一个

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • 项目名称是此项目参与者的显示名称。它是 Google API 尚未使用的字符串。您可以随时对其进行更新。
  • 项目 ID 在所有 Google Cloud 项目中是唯一的,并且是不可变的(一经设置便无法更改)。Cloud 控制台会自动生成一个唯一字符串;通常情况下,您无需关注该字符串。在大多数 Codelab 中,您都需要引用项目 ID(通常用 PROJECT_ID 标识)。如果您不喜欢生成的 ID,可以再随机生成一个 ID。或者,您也可以尝试自己的项目 ID,看看是否可用。完成此步骤后便无法更改该 ID,并且此 ID 在项目期间会一直保留。
  • 此外,还有第三个值,即部分 API 使用的项目编号,供您参考。如需详细了解所有这三个值,请参阅文档
  1. 接下来,您需要在 Cloud 控制台中启用结算功能,以便使用 Cloud 资源/API。运行此 Codelab 应该不会产生太多的费用(如果有的话)。若要关闭资源以避免产生超出本教程范围的结算费用,您可以删除自己创建的资源或删除项目。Google Cloud 新用户符合参与 300 美元免费试用计划的条件。

启动 Cloud Shell

虽然可以通过笔记本电脑对 Google Cloud 进行远程操作,但在此 Codelab 中,您将使用 Google Cloud Shell,这是一个在云端运行的命令行环境。

Google Cloud 控制台 中,点击右上角工具栏中的 Cloud Shell 图标:

55efc1aaa7a4d3ad.png

预配和连接到环境应该只需要片刻时间。完成后,您应该会看到如下内容:

7ffe5cbb04455448.png

这个虚拟机已加载了您需要的所有开发工具。它提供了一个持久的 5 GB 主目录,并且在 Google Cloud 中运行,大大增强了网络性能和身份验证功能。您在此 Codelab 中的所有工作都可以在浏览器中完成。您无需安装任何程序。

8. 准备工作

启用 API

在 Cloud Shell 中,确保项目 ID 已设置:

gcloud config list project
gcloud config set project [YOUR-PROJECT-ID]
project=[YOUR-PROJECT-ID]
region=us-central1
echo $project
echo $region

启用所有必要的服务:

gcloud services enable compute.googleapis.com

9. 创建提供方 VPC 网络

VPC 网络

在 Cloud Shell 中,执行以下操作:

gcloud compute networks create producer-vpc --subnet-mode custom --enable-ula-internal-ipv6

Google 会向使用方 VPC 分配一个全球唯一的 /48 子网,如需查看分配情况,请执行以下操作:

在 Cloud 控制台中,前往:

VPC 网络

130648bcdb9266b1.png

创建子网

PSC 子网将与 PSC 服务连接相关联,以实现网络地址转换。对于生产用例,此子网的大小需要适当调整,以支持来自所有已附加 PSC 端点的入站流量。如需了解详情,请参阅 PSC NAT 子网大小调整文档

在 Cloud Shell 中,创建 PSC NAT 子网:

gcloud compute networks subnets create producer-nat-dual-stack-subnet --network producer-vpc --range 172.16.10.0/28 --region $region --purpose=PRIVATE_SERVICE_CONNECT --stack-type=IPV4_IPV6 --ipv6-access-type=INTERNAL

您需要获取并记下 producer-nat-dual-stack-subnet IPv6 地址,以便在后续步骤中创建入站防火墙规则,以允许 PSC NAT 子网访问负载平衡器后端。

在 Cloud Shell 中,获取 PSC NAT IPv6 子网。

gcloud compute networks subnets describe producer-nat-dual-stack-subnet --region=us-central1 | grep -i internalIpv6Prefix:

预期结果:

user@cloudshell$ gcloud compute networks subnets describe producer-nat-dual-stack-subnet --region=us-central1 | grep -i internalIpv6Prefix:
internalIpv6Prefix: fd20:b4a:ea9f:2:0:0:0:0/64

在 Cloud Shell 中,创建提供方转发规则子网:

gcloud compute networks subnets create producer-dual-stack-fr-subnet --network producer-vpc --range 172.16.20.0/28 --region $region --enable-private-ip-google-access --stack-type=IPV4_IPV6 --ipv6-access-type=INTERNAL

在 Cloud Shell 中,创建提供方虚拟机子网:

gcloud compute networks subnets create producer-dual-stack-vm-subnet --network producer-vpc --range 172.16.30.0/28 --region $region --enable-private-ip-google-access --stack-type=IPV4_IPV6 --ipv6-access-type=INTERNAL

创建 Public NAT 网关

producer-vm 需要访问互联网才能下载 Apache,但 GCE 实例没有外部 IP;因此,Cloud NAT 将为下载软件包提供互联网出站流量。

在 Cloud Shell 中,创建 Cloud Router 路由器:

gcloud compute routers create producer-cloud-router --network producer-vpc --region us-central1

在 Cloud Shell 中,创建启用互联网出站流量的 Cloud NAT 网关:

gcloud compute routers nats create producer-nat-gw --router=producer-cloud-router --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --region us-central1

创建网络防火墙政策和防火墙规则

在 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 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

以下防火墙规则允许来自健康检查探测范围的流量到达网络中的所有实例。在生产环境中,此防火墙规则应仅限于与特定生产方服务关联的实例。

在 Cloud Shell 中,执行以下操作:

gcloud compute network-firewall-policies rules create 2000 --action ALLOW --firewall-policy producer-vpc-policy --description "allow traffic from health check probe range" --direction INGRESS --src-ip-ranges 2600:2d00:1:b029::/64 --layer4-configs tcp:80 --global-firewall-policy

以下防火墙规则允许从 PSC NAT 子网范围的流量传输到网络中的所有实例。在生产环境中,此防火墙规则应仅限于与特定生产方服务关联的实例。

使用在本 Codelab 中前面获取的 IPv6 PSC NAT 子网更新防火墙规则 <insert-your-psc-nat-ipv6-subnet>

在 Cloud Shell 中,执行以下操作:

gcloud compute network-firewall-policies rules create 2001 --action ALLOW --firewall-policy producer-vpc-policy --description "allow traffic from PSC NAT subnet" --direction INGRESS --src-ip-ranges <insert-your-psc-nat-ipv6-subnet> --global-firewall-policy --layer4-configs=tcp

创建生产者虚拟机

在 Cloud Shell 中,创建 producer-vm apache Web 服务器:

gcloud compute instances create producer-vm \
    --project=$project \
    --machine-type=e2-micro \
    --image-family debian-12 \
    --no-address \
    --image-project debian-cloud \
    --zone us-central1-a \
    --subnet=producer-dual-stack-vm-subnet \
    --stack-type=IPV4_IPV6 \
    --metadata startup-script="#! /bin/bash
      sudo apt-get update
      sudo apt-get install apache2 -y
      sudo service apache2 restart
      echo 'Welcome to Producer-VM !!' | tee /var/www/html/index.html
      EOF"

在 Cloud Shell 中,创建一个由 producer-vm 实例和健康检查组成的非代管式实例组:

gcloud compute instance-groups unmanaged create producer-instance-group --zone=us-central1-a

gcloud compute instance-groups unmanaged add-instances producer-instance-group  --zone=us-central1-a --instances=producer-vm

gcloud compute health-checks create http hc-http-80 --port=80

10. 创建提供方服务

创建负载平衡器组件

在 Cloud Shell 中,执行以下操作:

gcloud compute backend-services create producer-backend-svc --load-balancing-scheme=internal --protocol=tcp --region=us-central1 --health-checks=hc-http-80

gcloud compute backend-services add-backend producer-backend-svc --region=us-central1 --instance-group=producer-instance-group --instance-group-zone=us-central1-a

为提供方转发规则(内部网络负载平衡器)分配了 IPv6 地址。

在 Cloud Shell 中,执行以下操作:

gcloud compute addresses create producer-fr-ipv6-address \
    --region=us-central1 \
    --subnet=producer-dual-stack-fr-subnet \
    --ip-version=IPV6

在以下语法中,创建一个转发规则(内部网络负载平衡器),并将预定义的 IPv6 地址 producer-fr-ipv6-address 与后端服务 producer-backend-svc 相关联

在 Cloud Shell 中,执行以下操作:

gcloud compute forwarding-rules create producer-fr --region=us-central1 --load-balancing-scheme=internal --network=producer-vpc --subnet=producer-dual-stack-fr-subnet --address=producer-fr-ipv6-address --ip-protocol=TCP --ports=all --backend-service=producer-backend-svc --backend-service-region=us-central1 --ip-version=IPV6

创建服务连接

在 Cloud Shell 中,创建服务附件:

gcloud compute service-attachments create ipv6-producer-svc-attachment --region=$region --producer-forwarding-rule=producer-fr --connection-preference=ACCEPT_AUTOMATIC --nat-subnets=producer-nat-dual-stack-subnet

接下来,获取并记下 selfLink URI 中列出的服务附件(从项目开始),以便在使用方环境中配置 PSC 端点。

selfLink: projects/<your-project-id>/regions/us-central1/serviceAttachments/ipv4-producer-svc-attachment

在 Cloud Shell 中,执行以下操作:

gcloud compute service-attachments describe ipv6-producer-svc-attachment --region=$region

预期输出示例

connectionPreference: ACCEPT_AUTOMATIC
creationTimestamp: '2024-08-27T05:59:17.188-07:00'
description: ''
enableProxyProtocol: false
fingerprint: EaultrFOzc4=
id: '8752850315312657226'
kind: compute#serviceAttachment
name: ipv6-producer-svc-attachment
natSubnets:
- https://www.googleapis.com/compute/v1/projects/projectid/regions/us-central1/subnetworks/producer-nat-dual-stack-subnet
pscServiceAttachmentId:
  high: '1053877600257000'
  low: '8752850315312657226'
reconcileConnections: false
region: https://www.googleapis.com/compute/v1/projects/projectid/regions/us-central1
selfLink: https://www.googleapis.com/compute/v1/projects/projectid/regions/us-central1/serviceAttachments/ipv6-producer-svc-attachment
targetService: https://www.googleapis.com/compute/v1/projects/projectid/regions/us-central1/forwardingRules/producer-fr

在 Cloud 控制台中,前往:

网络服务 → Private Service Connect → 已发布服务

4356b8ab4a385eb6.png

312795be39b21f62.png

11. 创建使用方 VPC 网络

VPC 网络

在 Cloud Shell 中,创建启用了 IPv6 ULA 的消费者 VPC:

gcloud compute networks create consumer-vpc \
    --subnet-mode=custom \
    --enable-ula-internal-ipv6

Google 会向使用方 VPC 分配一个全球唯一的 /48 子网,如需查看分配情况,请执行以下操作:

在 Cloud 控制台中,前往:

VPC 网络

f0cb0565e4af4c72.png

创建子网

在 Cloud Shell 中,创建双栈 GCE 子网:

gcloud compute networks subnets create consumer-dual-stack-subnet --network consumer-vpc --range=192.168.20.0/28 --stack-type=IPV4_IPV6 --ipv6-access-type=INTERNAL --region $region --enable-private-ip-google-access

在 Cloud Shell 中,创建双栈 PSC 端点子网:

gcloud compute networks subnets create psc-dual-stack-endpoint-subnet --network consumer-vpc --range=192.168.21.0/28 --stack-type=IPV4_IPV6 --ipv6-access-type=INTERNAL --region $region --enable-private-ip-google-access

创建网络防火墙政策和防火墙规则

在 Cloud Shell 中,执行以下操作:

gcloud compute network-firewall-policies create consumer-vpc-policy --global

gcloud compute network-firewall-policies associations create --firewall-policy consumer-vpc-policy --network consumer-vpc --name consumer-vpc --global-firewall-policy

gcloud compute network-firewall-policies rules create 1000 --action ALLOW --firewall-policy consumer-vpc-policy --description "SSH with IAP" --direction INGRESS --src-ip-ranges 35.235.240.0/20 --layer4-configs tcp:22  --global-firewall-policy

使用方广告资源网只需通过 IAP 访问权限使用 SSH 即可。

12. 创建虚拟机、PSC 端点并测试双栈连接

创建测试双栈虚拟机

在 Cloud Shell 中,在双栈子网中创建双栈 GCE 实例:

gcloud compute instances create consumer-vm-ipv4-ipv6 --zone=us-central1-a --subnet=consumer-dual-stack-subnet --no-address --stack-type=IPV4_IPV6

创建 PSC 端点静态 IPv6 地址

在 Cloud Shell 中,为 PSC 端点创建静态 IPv6 地址:

gcloud compute addresses create psc-ipv6-endpoint-ip --region=$region --subnet=psc-dual-stack-endpoint-subnet --ip-version=IPV6

获取 PSC 端点静态 IPv6 地址

在 Cloud Shell 中,获取您将用于访问生产方服务的 PSC IPv6 地址:

gcloud compute addresses describe psc-ipv6-endpoint-ip --region=us-central1 | grep -i address:

输出示例:

user@cloudshell$ gcloud compute addresses describe psc-ipv6-endpoint-ip --region=us-central1 | grep -i address:
address: 'fd20:799:4ea3:1::'

创建 IPv6 PSC 端点

在 Cloud Shell 中,使用创建服务连接时捕获的 URI 更新 SERVICE ATTACHMENT URI,以创建 PSC 端点。

gcloud compute forwarding-rules create psc-ipv6-endpoint --region=$region --network=consumer-vpc --address=psc-ipv6-endpoint-ip --target-service-attachment=[SERVICE ATTACHMENT URI]

验证 PSC 端点

我们来确认一下生产者是否已接受 PSC 端点。在 Cloud 控制台中,前往:

网络服务 → Private Service Connect → 已连接的端点

1ee60ea44c5027dd.png

测试连接性

在 Cloud Shell 中,使用 SSH 连接到双栈 GCE 实例 consumer-vm-ipv4-ipv6。

gcloud compute ssh --zone us-central1-a "consumer-vm-ipv4-ipv6" --tunnel-through-iap --project $project

现在,您已登录双栈 GCE 实例,请使用上一步中确定的 IPv6 地址对 psc 端点 psc-ipv6-endpoint 执行 curl 操作。

curl -6 http://[insert-your-ipv6-psc-endpoint]

预期输出:

user@consumer-vm-ipv4-ipv6$ curl -6 http://[fd20:799:4ea3:1::]
Welcome to Producer-VM !!

在 consumer-vm-ipv4-ipv6 GCE 实例中,执行退出操作以退出实例,返回到 Cloud Shell。

exit

预期输出:

user@consumer-vm-ipv4-ipv6:~$ exit
logout
Connection to compute.715101668351438678 closed.

13. 清理步骤

在一个 Cloud Shell 终端中删除实验组件

gcloud compute forwarding-rules delete psc-ipv6-endpoint --region=us-central1 -q

gcloud compute instances delete consumer-vm-ipv4-ipv6 --zone=us-central1-a -q

gcloud compute network-firewall-policies rules delete 1000 --firewall-policy=consumer-vpc-policy --global-firewall-policy -q

gcloud compute network-firewall-policies associations delete --firewall-policy=consumer-vpc-policy  --name=consumer-vpc --global-firewall-policy -q

gcloud compute network-firewall-policies delete consumer-vpc-policy --global -q

gcloud compute addresses delete psc-ipv6-endpoint-ip --region=us-central1 -q

gcloud compute networks subnets delete consumer-dual-stack-subnet psc-dual-stack-endpoint-subnet --region=us-central1 -q

gcloud compute networks delete consumer-vpc -q

gcloud compute service-attachments delete ipv6-producer-svc-attachment --region=us-central1 -q

gcloud compute forwarding-rules delete producer-fr --region=us-central1 -q

gcloud compute backend-services delete producer-backend-svc --region=us-central1 -q

gcloud compute health-checks delete hc-http-80 -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=producer-vpc --global-firewall-policy -q

gcloud compute network-firewall-policies delete producer-vpc-policy --global -q

gcloud compute instance-groups unmanaged delete producer-instance-group --zone=us-central1-a -q

gcloud compute instances delete producer-vm --zone=us-central1-a -q

gcloud compute routers nats delete producer-nat-gw --router=producer-cloud-router --router-region=us-central1 -q

gcloud compute routers delete producer-cloud-router --region=us-central1 -q

gcloud compute addresses delete producer-fr-ipv6-address --region=us-central1 -q

gcloud compute networks subnets delete producer-dual-stack-fr-subnet  producer-dual-stack-vm-subnet producer-nat-dual-stack-subnet --region=us-central1 -q

gcloud compute networks delete producer-vpc -q

14. 恭喜

恭喜,您已成功配置和验证 Private Service Connect 64。

您已创建提供方基础架构,并了解了如何在使用方 VPC 网络中创建 IPv6 使用方端点,以便与 IPv6 提供方服务建立连接。

Cosmopup 认为 Codelab 很棒!

c911c127bffdee57.jpeg

后续操作

查看下列 Codelab…

深入阅读和视频

参考文档