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 网络服务器作为已发布的服务。发布后,您将执行以下操作来验证对提供方服务的访问权限:

  • 从使用方 VPC、双栈 GCE 实例,以 IPv6 PSC 端点为目标,访问提供方服务。

PSC 66 的主要优势

  • 无缝集成: PSC 与为 IPv6 配置的 VPC 网络无缝集成,让您可以利用 IPv6 寻址的优势来建立服务连接。
  • 双栈支持: PSC 支持双栈配置,可在同一 VPC 中同时使用 IPv4 和 IPv6,从而提供灵活性并为您的网络做好未来准备。
  • 简化过渡: PSC 允许您在现有 IPv4 基础设施的基础上逐步采用 IPv6,从而简化向 IPv6 的过渡。
  • 提供方支持: 提供方必须采用双栈,从而生成仅 IPv6 的使用方 PSC 端点。

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

创建公共 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 中,创建提供方虚拟机 Apache 网络服务器:

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 中,创建由提供方虚拟机实例和健康检查组成的非代管式实例组:

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

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

在 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(以 projects 开头)中列出的服务连接,以在使用方环境中配置 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。

您创建了提供方基础设施,了解了如何在允许连接到 IPv6 提供方服务的使用方 VPC 网络中创建 IPv6 使用方端点。

Cosmopup 认为 Codelab 非常棒!

c911c127bffdee57.jpeg

后续操作

查看下列 Codelab…

延伸阅读和视频

参考文档