1. 简介
概览
在本实验中,用户将探索 Network Connectivity Center 的 hub 如何将 Private Service Connect 端点传播到 VPC spoke。
hub 资源提供集中式连接管理模型,用于将 VPC spoke 流量与 PSC 端点互连。
构建内容
在本 Codelab 中,您将构建一个 NCC 网络,该网络将将 Private Service Connect 端点传播到 Cloud SQL 实例。
学习内容
- 使用 Private Service Connect 连接到 Cloud SQL 实例
- 使用 NCC hub 将 PSC 子网传播到所有 VPC spoke,以允许来自多个 VPC 网络的网络连接。
所需条件
- 熟悉 GCP Cloud 网络
- Cloud SQL 基本知识
- Google Cloud 项目
- 请查看您的配额:网络,并在需要时申请额外的网络(屏幕截图如下):
目标
- 设置 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 网络和防火墙规则。逻辑图展示了将在此步骤中设置的网络环境。
创建 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 端点的数据路径。
启用 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 端点传播
后续步骤