实验: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 网络
  • Cloud SQL 基本知识
  • Google Cloud 项目
  • 请查看您的配额:网络,并在需要时申请额外的网络(屏幕截图如下):

6bc606cb34bce7e8.png

目标

  • 设置 GCP 环境
  • 使用 Private Service Connect 为 MySQL 设置 Cloud SQL 实例
  • 配置 Network Connectivity Center Hub 以传播 PSC 端点
  • 将 VPC 配置为 spoke,以便配置 Network Connectivity Center
  • 验证数据路径
  • 探索 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 - 允许网络管理员管理中心和 spoke。

networkconnectivity.hubs.networkconnectivity.spokes.

networkconnectivity.networkSpokeManager - 允许在 hub 中添加和管理 spoke。适用于共享 VPC 场景,其中宿主项目拥有 Hub,但其他项目中的其他管理员可以为其关联添加 spoke。

networkconnectivity.spokes.**

networkconnectivity.networkUsernetworkconnectivity.networkViewer - 允许影音平台用户查看中心和辐射点的不同属性。

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

2. 设置网络环境

概览

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

8884a55988881e17.png

创建 VPC1 和子网

VPC 网络包含您将用于安装 GCE VM 以进行数据路径验证的子网

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 子网

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

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 和身份访问代理范围的网络连接

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 服务

如果尚未启用 Network Connectivity API,请启用该 API:

gcloud services enable networkconnectivity.googleapis.com

创建 NCC Hub

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

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

描述新创建的 NCC 中心。记下名称和关联的路径。

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 辐射

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 端点传播

后续步骤