实验:NCC PSC 传播

1. 简介

概览

在本实验中,用户将探索 Network Connectivity Center 的 hub 如何将 Private Service Connect 端点传播到 VPC spoke。

hub 资源提供集中式连接管理模型,可用于将 VPC spoke 流量互连到 PSC 端点。

构建内容

在此 Codelab 中,您将构建一个 NCC 网络,该网络会将 Private Service Connect 端点传播到 Cloud SQL 实例。

74bf390e323ea3bb.png

学习内容

  • 使用 Private Service Connect 连接到 Cloud SQL 实例
  • 使用 NCC hub 将 PSC 子网传播到所有 VPC spoke,以实现从多个 VPC 网络进行网络连接。

所需条件

  • 了解 GCP Cloud Networking
  • Cloud SQL 基础知识
  • Google Cloud 项目
  • 检查您的配额:网络,并在需要时申请添加其他网络,如下面的屏幕截图所示:

6bc606cb34bce7e8.png

目标

  • 设置 GCP 环境
  • 设置 Cloud SQL 实例以实现 Private Service Connect
  • 配置 Network Connectivity Center Hub 以传播 PSC 端点
  • 配置 Network Connectivity Center,并将 VPC 配置为 spoke
  • 验证数据路径
  • 探索 NCC 可维护性功能
  • 清理资源

准备工作

Google Cloud 控制台和 Cloud Shell

在本实验中,我们将使用 Google Cloud 控制台和 Cloud Shell 与 GCP 进行交互。

NCC Hub 项目 Google Cloud 控制台

您可以通过 https://console.cloud.google.com 访问 Cloud 控制台。

在 Google Cloud 中设置以下各项,以便更轻松地配置 Network Connectivity Center:

在 Google Cloud Console 的“项目选择器”页面上,选择或创建一个 Google Cloud 项目。

启动 Cloud Shell。此 Codelab 使用了 $variables 来帮助在 Cloud Shell 中实现 gcloud 配置。

gcloud auth list
gcloud config list project
gcloud config set project $project
project=[YOUR-PROJECT-NAME]
echo $project

IAM 角色

NCC 需要 IAM 角色才能访问特定 API。请务必根据需要为用户配置 NCC IAM 角色。

角色/说明

权限

networkconnectivity.networkAdmin - 允许网络管理员管理 hub 和 spoke。

networkconnectivity.hubs.networkconnectivity.spokes.

networkconnectivity.networkSpokeManager - 允许在 hub 中添加和管理 spoke。在共享 VPC 中使用,其中宿主项目拥有 Hub,但其他项目中的其他管理员可以添加 spoke 以连接到 Hub。

networkconnectivity.spokes.**

networkconnectivity.networkUsernetworkconnectivity.networkViewer - 允许网络用户查看中心和辐射的不同属性。

networkconnectivity.hubs.getnetworkconnectivity.hubs.listnetworkconnectivity.spokes.getnetworkconnectivity.spokes.listnetworkconnectivity.spokes.aggregatedList

2. 设置网络环境

概览

在本部分中,我们将在单个项目中部署两个 VPC 网络和防火墙规则。此逻辑图展示了在此步骤中设置的网络环境。

8884a55988881e17.png

创建 VPC1 和子网

VPC 网络包含您将安装 GCE 虚拟机的子网,用于数据路径验证

vpc_spoke_network_name="vpc1-spoke"
vpc_spoke_subnet_name="subnet1"
vpc_spoke_subnet_ip_range="10.0.1.0/24"
region="us-central1"
zone="us-central1-a"

gcloud compute networks create "${vpc_spoke_network_name}" \
--subnet-mode=custom \

gcloud compute networks subnets create "${vpc_spoke_subnet_name}" \
--network="${vpc_spoke_network_name}" \
--range="${vpc_spoke_subnet_ip_range}" \
--region="${region}" 

在 VPC 中创建 PSC 子网

使用以下命令在将分配给 PSC-EP 的 VPC spoke 中创建子网。

vpc_spoke_network_name="vpc1-spoke"
vpc_spoke_subnet_name="csql-psc-subnet"
region="us-central1"
vpc_spoke_subnet_ip_range="192.168.0.0/24"

gcloud compute networks subnets create "${vpc_spoke_subnet_name}" \
--network="${vpc_spoke_network_name}" \
--range="${vpc_spoke_subnet_ip_range}" \
--region="${region}" 

创建 VPC3 和子网

vpc_spoke_network_name="vpc3-spoke"
vpc_spoke_subnet_name="subnet3"
vpc_spoke_subnet_ip_range="10.0.3.0/24"
region="us-central1"
zone="us-central1-a"

gcloud compute networks create "${vpc_spoke_network_name}" \
--subnet-mode=custom \

gcloud compute networks subnets create "${vpc_spoke_subnet_name}" \
--network="${vpc_spoke_network_name}" \
--range="${vpc_spoke_subnet_ip_range}" \
--region="${region}"

配置 VPC1 的防火墙规则

这些规则将允许来自 RFC1918 和 Identity Access Proxy 范围的网络连接

vpc_spoke_network_name="vpc1-spoke"

gcloud compute firewall-rules create vpc1-allow-all \
--network="${vpc_spoke_network_name}" \
--allow=all \
--source-ranges=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16

gcloud compute firewall-rules create vpc1-allow-iap \
--network="${vpc_spoke_network_name}" \
--allow all \
--source-ranges 35.235.240.0/20

配置路由 VPC 和 VPC 防火墙规则

vpc_spoke_network_name="vpc3-spoke"

gcloud compute firewall-rules create vpc3-allow-all \
--network="${vpc_spoke_network_name}" \
--allow=all \
--source-ranges=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16

gcloud compute firewall-rules create vpc3-allow-iap \
--network="${vpc_spoke_network_name}" \
--allow all \
--source-ranges 35.235.240.0/20

在 VPC1 中配置 GCE 虚拟机

您需要临时互联网访问权限才能安装软件包,因此请将实例配置为使用外部 IP 地址。

vm_vpc1_spoke_name="csql-vpc1-vm"
vpc_spoke_network_name="vpc1-spoke"
vpc_spoke_subnet_name="subnet1"
region="us-central1"
zone="us-central1-a"

gcloud compute instances create "${vm_vpc1_spoke_name}" \
--machine-type="e2-medium" \
--subnet="${vpc_spoke_subnet_name}" \
--zone="${zone}" \
--image-family=debian-11 \
--image-project=debian-cloud \
--metadata=startup-script='#!/bin/bash
sudo apt-get update
sudo apt-get install -y default-mysql-client'

在 VPC3 中配置 GCE 虚拟机

您需要临时互联网访问权限才能安装软件包,因此请将实例配置为使用外部 IP 地址。

vm_vpc_spoke_name="csql-vpc3-vm"
vpc_spoke_network_name="vpc3-spoke"
vpc_spoke_subnet_name="subnet3"
region="us-central1"
zone="us-central1-a"

gcloud compute instances create "${vm_vpc_spoke_name}" \
--machine-type="e2-medium" \
--subnet="${vpc_spoke_subnet_name}" \
--zone="${zone}" \
--image-family=debian-11 \
--image-project=debian-cloud \
--metadata=startup-script='#!/bin/bash
sudo apt-get update
sudo apt-get install -y default-mysql-client'

3. 创建 Cloud SQL 实例

使用以下命令创建实例并启用 Private Service Connect。

这需要几分钟时间。

gcloud config set project ${project}

gcloud sql instances create mysql-instance \
--project="${project}" \
--region=us-central1 \
--enable-private-service-connect \
--allowed-psc-projects="${project}" \
--availability-type=zonal \
--no-assign-ip \
--tier=db-f1-micro \
--database-version=MYSQL_8_0 \
--enable-bin-log

确定 Cloud SQL 实例的服务连接 URI

使用 gcloud sql instances describe 命令查看有关启用了 Private Service Connect 的实例的信息。请注意 pscServiceAttachmentLink 字段,该字段显示指向实例的服务连接的 URI。我们将在下一部分中用到此 ID。

gcloud sql instances describe mysql-instance \
--format='value(pscServiceAttachmentLink)'

4. 从 PSC 端点到 Cloud SQL

为 PSC 端点预留内部 IP 地址

使用以下命令为 Private Service Connect 端点预留内部 IP 地址,

region="us-central1"
vpc_spoke_subnet_name="csql-psc-subnet"

gcloud compute addresses create csql-psc-ip \
--subnet="${vpc_spoke_subnet_name}" \
--region="${region}" \
--addresses=192.168.0.253

查找与预留 IP 地址关联的名称。此值将用于转发规则配置。

gcloud compute addresses list \
--filter="name=csql-psc-ip"

在 VPC1 中创建 Private Service Connect 转发规则

使用以下命令创建 Private Service Connect 端点并将其指向 Cloud SQL 服务连接。

vpc_spoke_network_name="vpc1-spoke"
vpc_spoke_subnet_name="csql-psc-subnet"
region="us-central1"
csql_psc_ep_name="csql-psc-ep"
sa_uri=$(gcloud sql instances describe mysql-instance \
  --format='value(pscServiceAttachmentLink)')
echo "$sa_uri"

gcloud compute forwarding-rules create "${csql_psc_ep_name}" \
--address=csql-psc-ip \
--region="${region}" \
--network="${vpc_spoke_network_name}" \
--target-service-attachment="${sa_uri}" \
--allow-psc-global-access

使用以下命令验证 cSQL 服务连接是否接受端点

gcloud compute forwarding-rules describe csql-psc-ep \
--region=us-central1 \
--format='value(pscConnectionStatus)'

验证从 VPC1 到 MySQL 的数据路径

创建新的 Cloud SQL 实例时,您必须先为默认用户账号设置密码,然后才能连接到该实例。

gcloud sql users set-password root \
--host=% \
--instance=mysql-instance \
--prompt-for-password

使用以下命令查找与 Cloud SQL 的服务连接关联的 PSC 端点的 IP 地址。

gcloud compute addresses describe csql-psc-ip \
--region=us-central1 \
--format='value(address)'

从 VPC1 中的虚拟机连接到 Cloud SQL 实例

打开与 csql-vpc1-vm 的 SSH 会话

gcloud compute ssh csql-vpc1-vm \
--zone=us-central1-a \
--tunnel-through-iap

使用以下命令连接到 Cloud SQL 实例。出现提示时,输入在上一步中创建的密码。

mysql -h 192.168.0.253 -u root -p 

成功登录后,系统会显示以下输出,

Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 8350
Server version: 8.0.31-google (Google)

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [(none)]> 

使用 show databases; 命令验证在 MySQL 上默认创建的数据库。

MySQL [(none)]> show databases;

从 VPC3 中的虚拟机连接到 Cloud SQL 实例

打开与 csql-vpc3-vm 的 SSH 会话,

gcloud compute ssh csql-vpc3-vm \
--zone=us-central1-a \
--tunnel-through-iap

使用以下命令连接到 Cloud SQL 实例。出现提示时,输入在上一步中创建的密码。

mysql -h 192.168.0.253 -u root -p 

位于 VPC3 中的虚拟机的会话失败,因为没有从 VPC3 到 Private Service Connect 端点的数据路径。使用按键组合退出会话。

Ctrl + C

5. Network Connectivity Center Hub

概览

在本部分中,我们将使用 gcloud 命令配置 NCC hub。NCC hub 将充当控制平面,负责构建从 VPC spoke 到 Private Service Connect 端点的数据路径。

b615efa4bad5f86.png

启用 API 服务

启用网络连接 API(如果尚未启用):

gcloud services enable networkconnectivity.googleapis.com

创建 NCC Hub

使用以下 gcloud 命令创建 NCC hub。“--export-psc”标志指示 NCC Hub 将已知的 PSC 端点传播到所有 VPC spoke。

hub_name="ncc-hub"
gcloud network-connectivity hubs create "${hub_name}" \
--export-psc

描述新创建的 NCC hub,并记下名称和关联的路径。

gcloud network-connectivity hubs describe ncc-hub

将 VPC1 配置为 NCC spoke

hub_name="ncc-hub"
vpc_spoke_name="sql-vpc1-spoke"
vpc_spoke_network_name="vpc1-spoke"

gcloud network-connectivity spokes linked-vpc-network create "${vpc_spoke_name}" \
--hub="${hub_name}" \
--vpc-network="${vpc_spoke_network_name}" \
--global

将 VPC3 配置为 NCC spoke

hub_name="ncc-hub"
vpc_spoke_name="sql-vpc3-spoke"
vpc_spoke_network_name="vpc3-spoke"

gcloud network-connectivity spokes linked-vpc-network create "${vpc_spoke_name}" \
--hub="${hub_name}" \
--vpc-network="${vpc_spoke_network_name}" \
--global

使用以下命令检查 NCC Hub 的路由表中是否有通往 PSC 子网的路由。

gcloud network-connectivity hubs route-tables routes list \
--route_table=default \
--hub=ncc-hub

6. 验证 NCC 数据路径

在此步骤中,我们将验证 NCC 混合 spoke 与 VPC spoke 之间的数据路径。

验证配置的 NCC 数据路径是否指向 Cloud SQL 实例 PSC 端点

使用以下 gcloud 命令的输出登录本地虚拟机。

 gcloud compute instances list --filter="name=csql-vpc3-vm" 

登录本地网络中的虚拟机实例。

gcloud compute ssh csql-vpc3-vm \
--zone=us-central1-a \
--tunnel-through-iap

使用以下 mysql 命令连接到 Cloud SQL 实例。出现提示时,输入在上一步中创建的密码。

mysql -h 192.168.0.253 -u root -p 

成功登录后,系统会显示以下输出,

Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 8501
Server version: 8.0.31-google (Google)

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.005 sec)

使用 show databases; 命令验证 MySql 上默认创建的数据库

MySQL [(none)]> show databases;

7. 清理

登录 Cloud Shell 并删除 GCP 资源。

删除 Cloud SQL PSC 端点

gcloud compute forwarding-rules delete csql-psc-ep \
--region=us-central1 \
--quiet

gcloud compute addresses delete csql-psc-ip \
--region=us-central1 \
--quiet

gcloud compute networks subnets delete csql-psc-subnet \
--region=us-central1 \
--quiet

删除 Cloud SQL 实例

gcloud sql instances delete mysql-instance --quiet

删除防火墙规则

vpc_spoke_network_name="vpc3-spoke"

gcloud compute firewall-rules delete vpc3-allow-all \ --network="${vpc_spoke_network_name}" 
gcloud compute firewall-rules delete vpc3-allow-iap \ --network="${vpc_spoke_network_name}"
vpc_spoke_network_name="vpc1-spoke"

gcloud compute firewall-rules delete vpc1-allow-all \ --network="${vpc_spoke_network_name}"
gcloud compute firewall-rules delete vpc1-allow-iap \ --network="${vpc_spoke_network_name}"

删除 VPC1 和 VPC3 中的 GCE 实例

vm_vpc1_spoke_name="csql-vpc1-vm"
zone="us-central1-a"
gcloud compute instances delete "${vm_vpc1_spoke_name}" \
--zone="${zone}" \
--quiet


vm_vpc_spoke_name="csql-vpc3-vm"
zone="us-central1-a"
gcloud compute instances delete "${vm_vpc_spoke_name}" \
--zone="${zone}" --quiet

删除 NCC spoke

vpc_spoke_name="sql-vpc1-spoke"
gcloud network-connectivity spokes delete "${vpc_spoke_name}" \
--global \  
--quiet
vpc_spoke_name="sql-vpc3-spoke"
gcloud network-connectivity spokes delete "${vpc_spoke_name}" \
--global \  
--quiet

删除 NCC Hub

hub_name="ncc-hub"
gcloud network-connectivity hubs delete "${hub_name}" \
  --project=${project}

删除所有 VPC 中的子网

vpc_spoke_subnet_name="csql-psc-subnet"
region="us-central1"

gcloud compute networks subnets delete "${vpc_spoke_subnet_name}" \ 
--region="${region}" \
--quiet
vpc_spoke_subnet_name="subnet1"
region="us-central1"

gcloud compute networks subnets delete "${vpc_spoke_subnet_name}" \ 
--region="${region}" \
--quiet
vpc_spoke_subnet_name="subnet3"
region="us-central1"

gcloud compute networks subnets delete "${vpc_spoke_subnet_name}" \ 
--region="${region}" \
--quiet

删除 VPC1 和 VPC3

gcloud compute networks delete vpc1-spoke vpc3-spoke 

8. 恭喜!

您已完成“通过 Network Connectivity Center 进行 Private Service Connect 传播”实验!

所学内容

  • 通过 Network Connectivity Center 进行 Private Service Connect 端点传播

后续步骤