ห้องทดลอง: NCC VPC แบบ Spoke

1. บทนำ

ภาพรวม

ในชั้นเรียนนี้ ผู้ใช้จะได้สำรวจวิธีใช้ศูนย์การเชื่อมต่อเครือข่าย(NCC) เพื่อสร้างการเชื่อมต่อระหว่าง VPC หลายแห่งในวงกว้างผ่านการสนับสนุน Spoke ของ VPC เมื่อผู้ใช้กำหนด VPC เป็น Spoke ของ VPC จะทำให้ผู้ใช้เชื่อมต่อ VPC กับเครือข่าย VPC หลายเครือข่ายได้ผ่านฮับ NCC NCC ที่มีการกำหนดค่า Spoke ของ VPC จะลดความซับซ้อนในการดำเนินงานของการจัดการการเชื่อมต่อระหว่าง VPC แบบคู่ผ่าน VPC Peering แทนที่จะใช้รูปแบบการจัดการการเชื่อมต่อแบบรวมศูนย์

โปรดทราบว่าศูนย์การเชื่อมต่อเครือข่าย (NCC) เป็นรูปแบบ Control Plane แบบฮับและ Spoke สำหรับการจัดการการเชื่อมต่อเครือข่ายใน Google Cloud ทรัพยากรฮับเป็นรูปแบบการจัดการการเชื่อมต่อจากส่วนกลางเพื่อเชื่อมต่อกับสโปーク

สิ่งที่คุณจะสร้าง

ในโค้ดแล็บนี้ คุณจะได้สร้างโทโพโลยีฮับและ Spoke เชิงตรรกะด้วยฮับ NCC ที่จะใช้โครงสร้างการเชื่อมต่อ VPC แบบ Mesh เต็มรูปแบบใน VPC 3 รายการที่แตกต่างกัน

สิ่งที่คุณจะได้เรียนรู้

  • การเชื่อมต่อ VPC แบบ Mesh เต็มรูปแบบกับ NCC
  • Private NAT ใน VPC

สิ่งที่ต้องมี

  • ความรู้เกี่ยวกับเครือข่าย VPC ของ GCP
  • ความรู้เกี่ยวกับเราเตอร์ระบบคลาวด์และการกำหนดเส้นทาง BGP
  • โปรเจ็กต์ GCP แยกกัน 2 รายการ
  • Codelab นี้ต้องใช้ VPC 5 รายการ VPC รายการใดรายการหนึ่งต้องอยู่ในโปรเจ็กต์อื่นที่ไม่ใช่ฮับ NCC
  • ตรวจสอบโควต้า: เครือข่ายและขอเครือข่ายเพิ่มเติมหากจำเป็น ภาพหน้าจอด้านล่าง

6d1b99c6da87fd84.png

วัตถุประสงค์

  • ตั้งค่าสภาพแวดล้อม GCP
  • กำหนดค่าศูนย์การเชื่อมต่อเครือข่ายด้วย VPC เป็น Spoke
  • ตรวจสอบเส้นทางข้อมูล
  • สำรวจฟีเจอร์ความสามารถในการให้บริการของ NCC
  • ล้างทรัพยากรที่ใช้แล้ว

ก่อนเริ่มต้น

คอนโซล Google Cloud และ Cloud Shell

เราจะใช้ทั้ง Google Cloud Console และ Cloud Shell ตลอดทั้งห้องทดลองนี้เพื่อโต้ตอบกับ GCP

NCC Hub Project Google Cloud Console

ไปที่คอนโซลระบบคลาวด์ได้ที่ https://console.cloud.google.com

ตั้งค่ารายการต่อไปนี้ใน Google Cloud เพื่อให้กำหนดค่าศูนย์การเชื่อมต่อเครือข่ายได้ง่ายขึ้น

ในคอนโซล Google Cloud ให้เลือกหรือสร้างโปรเจ็กต์ Google Cloud ในหน้าตัวเลือกโปรเจ็กต์

เปิด Cloud Shell Codelab นี้ใช้ตัวแปร $เพื่อช่วยให้การติดตั้งใช้งานการกําหนดค่า gcloud ใน Cloud Shell ง่ายขึ้น

gcloud auth list
gcloud config list project
gcloud config set project [HUB-PROJECT-NAME]
projectname=[HUB-PROJECT-NAME]
echo $projectname
gcloud config set compute/zone us-central1-a
gcloud config set compute/region us-central1

บทบาท IAM

NCC กำหนดให้ต้องใช้บทบาท IAM เพื่อเข้าถึง API บางรายการ อย่าลืมกำหนดค่าผู้ใช้ด้วยบทบาท IAM ของ NCC ตามที่จำเป็น

บทบาท/คำอธิบาย

สิทธิ์

networkconnectivity.networkAdmin - อนุญาตให้ผู้ดูแลระบบเครือข่ายจัดการฮับและ Spoke

networkconnectivity.hubs.networkconnectivity.spokes.

networkconnectivity.networkSpokeManager - อนุญาตให้เพิ่มและจัดการ Spoke ในฮับ สำหรับใช้ใน VPC ที่แชร์ซึ่งโปรเจ็กต์โฮสต์เป็นเจ้าของฮับ แต่ผู้ดูแลระบบคนอื่นๆ ในโปรเจ็กต์อื่นๆ สามารถเพิ่ม Spoke สำหรับไฟล์แนบของตนลงในฮับได้

networkconnectivity.spokes.**

networkconnectivity.networkUsernetworkconnectivity.networkViewer - อนุญาตให้ผู้ใช้เครือข่ายดูแอตทริบิวต์ต่างๆ ของฮับและ Spoke

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

2. ตั้งค่าสภาพแวดล้อมเครือข่าย

ภาพรวม

ในส่วนนี้ เราจะทำให้เครือข่าย VPC และกฎไฟร์วอลล์ใช้งานได้ในโปรเจ็กต์เดียว แผนภาพเชิงตรรกะแสดงสภาพแวดล้อมเครือข่ายที่จะตั้งค่าในขั้นตอนนี้

ในขั้นตอนถัดไป เราจะสาธิตการรองรับ Spoke ข้ามโปรเจ็กต์โดยจะติดตั้งใช้งาน VPC และกฎไฟร์วอลล์ในโปรเจ็กต์อื่น

245f1002db33ca98.png

สร้าง VPC และซับเน็ต

เครือข่าย VPC มีซับเน็ตที่คุณจะใช้ติดตั้ง GCE VM เพื่อตรวจสอบเส้นทางข้อมูล

gcloud compute networks create vpc1-ncc --subnet-mode custom
gcloud compute networks create vpc2-ncc --subnet-mode custom
gcloud compute networks create vpc3-ncc --subnet-mode custom
gcloud compute networks create vpc4-ncc --subnet-mode custom

gcloud compute networks subnets create vpc1-ncc-subnet1 \
--network vpc1-ncc --range 10.1.1.0/24 --region us-central1

gcloud compute networks subnets create vpc1-ncc-subnet2 \
--network vpc1-ncc --range 10.1.2.0/25 --region us-central1

gcloud compute networks subnets create vpc1-ncc-subnet3 \
--network vpc1-ncc --range 10.1.2.128/25 --region us-central1

gcloud compute networks subnets create vpc2-ncc-subnet1 \
--network vpc2-ncc --range 10.2.2.0/24 --region us-central1

ช่วงซับเน็ตที่ VPC รองรับ

NCC รองรับช่วงซับเน็ต IPv4 ที่ถูกต้องทั้งหมด ยกเว้นที่อยู่ IP สาธารณะที่ใช้แบบส่วนตัว ในขั้นตอนนี้ ให้สร้างช่วงที่อยู่ IP ที่ถูกต้องใน VPC4 ซึ่งจะนําเข้าไปยังตารางเส้นทางของฮับ

gcloud compute networks subnets create benchmark-testing-rfc2544 \
--network vpc4-ncc --range 198.18.0.0/15 --region us-east1

gcloud compute networks subnets create class-e-rfc5735 \
--network vpc4-ncc --range 240.0.0.0/4 --region us-east1

gcloud compute networks subnets create ietf-protcol-assignment-rfc6890 \
--network vpc4-ncc --range 192.0.0.0/24 --region us-east1

gcloud compute networks subnets create ipv6-4-relay-rfc7526 \
--network vpc4-ncc --range 192.88.99.0/24 --region us-east1

gcloud compute networks subnets create pupi \
--network vpc4-ncc --range 50.50.50.0/24 --region us-east1

gcloud compute networks subnets create test-net-1-rfc5737 \
--network vpc4-ncc --range 192.0.2.0/24 --region us-east1

gcloud compute networks subnets create test-net-2-rfc5737 \
--network vpc4-ncc --range 198.51.100.0/24 --region us-east1

gcloud compute networks subnets create test-net-3-rfc5737 \
--network vpc4-ncc --range 203.0.113.0/24 --region us-east1

สร้างช่วงซับเน็ตที่ทับซ้อนกัน

NCC จะไม่นำเข้าช่วง IP ที่ทับซ้อนกันไปยังตารางเส้นทางของฮับ ผู้ใช้จะหลีกเลี่ยงข้อจำกัดนี้ได้ในขั้นตอนถัดไป ในระหว่างนี้ ให้สร้างช่วง IP ที่ทับซ้อนกัน 2 ช่วงสำหรับ VPC2 และ VPC3

gcloud compute networks subnets create overlapping-vpc2 \
--network vpc3-ncc --range 10.3.3.0/24 --region us-central1

gcloud compute networks subnets create overlapping-vpc3 \
--network vpc2-ncc --range 10.3.3.0/24 --region us-central1

กำหนดค่ากฎไฟร์วอลล์ VPC

กําหนดค่ากฎไฟร์วอลล์ใน VPC แต่ละรายการเพื่ออนุญาต

  • SSH
  • IAP ภายใน
  • ช่วง 10.0.0.0/8
gcloud compute firewall-rules create ncc1-vpc-internal \
--network vpc1-ncc \
--allow all \
--source-ranges 10.0.0.0/8

gcloud compute firewall-rules create ncc2-vpc-internal \
--network vpc2-ncc \
--allow all \
--source-ranges 10.0.0.0/8

gcloud compute firewall-rules create ncc3-vpc-internal \
--network vpc3-ncc \
--allow all \
--source-ranges 10.0.0.0/8

gcloud compute firewall-rules create ncc4-vpc-internal \
--network vpc4-ncc \
--allow all \
--source-ranges 10.0.0.0/8

gcloud compute firewall-rules create ncc1-vpc-iap \
--network vpc1-ncc \
--allow all \
--source-ranges 35.235.240.0/20

gcloud compute firewall-rules create ncc2-vpc-iap \
--network vpc2-ncc \
--allow=tcp:22 \
--source-ranges 35.235.240.0/20

gcloud compute firewall-rules create ncc3-vpc-iap \
--network vpc3-ncc \
--allow=tcp:22  \
--source-ranges 35.235.240.0/20

gcloud compute firewall-rules create ncc4-vpc-iap \
--network vpc4-ncc \
--allow=tcp:22  \
--source-ranges 35.235.240.0/20

กำหนดค่า GCE VM ใน VPC แต่ละรายการ

คุณจะต้องเข้าถึงอินเทอร์เน็ตชั่วคราวเพื่อติดตั้งแพ็กเกจใน "vm1-vpc1-ncc"

สร้างเครื่องเสมือน 4 เครื่อง โดยแต่ละเครื่องจะกำหนดให้กับ VPC รายการใดรายการหนึ่งที่สร้างไว้ก่อนหน้านี้

gcloud compute instances create vm1-vpc1-ncc \
--subnet vpc1-ncc-subnet1 \
--metadata=startup-script='#!/bin/bash
  apt-get update
  apt-get install apache2 -y
  apt-get install tcpdump -y
  service apache2 restart
  echo "
<h3>Web Server: www-vm1</h3>" | tee /var/www/html/index.html'


gcloud compute instances create vm2-vpc2-ncc \
--zone us-central1-a \
--subnet vpc2-ncc-subnet1 \
--no-address 

gcloud compute instances create pnat-vm-vpc2 \
--zone us-central1-a \
--subnet overlapping-vpc3 \
--no-address 


gcloud compute instances create vm1-vpc4-ncc \
--zone us-east1-b \
--subnet class-e-rfc5735 \
--no-address

3. ฮับ Network Connectivity Center

ภาพรวม

ในส่วนนี้ เราจะกำหนดค่าฮับ NCC โดยใช้คำสั่ง gcloud NCC Hub จะทำหน้าที่เป็นแพลตฟอร์มควบคุมที่รับผิดชอบในการสร้างการกำหนดค่าการกำหนดเส้นทางระหว่าง Spoke ของ VPC แต่ละรายการ

8acc7651f52e251e.png

เปิดใช้บริการ API

เปิดใช้ Network Connectivity API ในกรณีที่ยังไม่ได้เปิดใช้

gcloud services enable networkconnectivity.googleapis.com

สร้างฮับ NCC

สร้างฮับ NCC โดยใช้คําสั่ง gcloud

gcloud network-connectivity hubs create ncc-hub

ตัวอย่างเอาต์พุต

Create request issued for: [ncc-hub]
Waiting for operation [projects/user-3p-dev/locations/global/operations/operation-1668793629598-5edc24b7ee3ce-dd4c765b-5ca79556] to complete...done.     
Created hub [ncc-hub]

อธิบายฮับ NCC ที่สร้างขึ้นใหม่ จดชื่อและเส้นทางที่เชื่อมโยงไว้

gcloud network-connectivity hubs describe ncc-hub
gcloud network-connectivity hubs describe ncc-hub
createTime: '2023-11-02T02:28:34.890423230Z'
name: projects/user-3p-dev/locations/global/hubs/ncc-hub
routeTables:
- projects/user-3p-dev/locations/global/hubs/ncc-hub/routeTables/default
state: ACTIVE
uniqueId: de749c4c-0ef8-4888-8622-1ea2d67450f8
updateTime: '2023-11-02T02:28:48.613853463Z'

NCC Hub ได้เปิดตัวตารางการกําหนดเส้นทางซึ่งกําหนดระนาบควบคุมสําหรับการสร้างการเชื่อมต่อข้อมูล ค้นหาชื่อตารางการกําหนดเส้นทางของ NCC Hub

 gcloud network-connectivity hubs route-tables list --hub=ncc-hub
NAME: default
HUB: ncc-hub
DESCRIPTION:

ค้นหา URI ของตารางเส้นทางเริ่มต้นของ NCC

gcloud network-connectivity hubs route-tables describe default --hub=ncc-hub
createTime: '2023-02-24T17:32:58.786269098Z'
name: projects/user-3p-dev/locations/global/hubs/ncc-hub/routeTables/default
state: ACTIVE
uid: eb1fdc35-2209-46f3-a8d6-ad7245bfae0b
updateTime: '2023-02-24T17:33:01.852456186Z'

แสดงรายการเนื้อหาในตารางการกําหนดเส้นทางเริ่มต้นของฮับ NCC หมายเหตุ* ตารางเส้นทางของฮับ NCC จะว่างเปล่าจนกว่าจะมี

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

ตารางเส้นทางของ NCC Hub ควรว่างเปล่า

4. NCC ที่มี Spoke ของ VPC

ภาพรวม

ในส่วนนี้ คุณจะต้องกำหนดค่า VPC 3 รายการเป็น Spoke ของ NCC โดยใช้คำสั่ง gcloud

a70bc80037927bb0.png

กำหนดค่า VPC เป็น Spoke ของ NCC

กําหนดค่า VPC ต่อไปนี้เป็น Spoke ของ NCC ตามลําดับนี้

  • VPC4
  • VPC1
  • VPC2
  • VPC3

กำหนดค่า VPC4 เป็น Spoke ของ NCC และกำหนดให้กับ Hub ของ NCC ที่สร้างขึ้นก่อนหน้านี้ การเรียก API ของ NCC Spoke กำหนดให้ต้องระบุตำแหน่ง Flag "–global" ลดความซับซ้อนของไวยากรณ์ gcloud โดยอนุญาตให้ผู้ใช้ไม่ต้องระบุเส้นทาง URI แบบเต็มเมื่อกําหนดค่า Spoke ของ NCC ใหม่

gcloud network-connectivity spokes linked-vpc-network create vpc4-spoke4 \
--hub=ncc-hub \
--vpc-network=vpc4-ncc \
--global

กำหนดค่า VPC1 เป็น Spoke ของ NCC

ผู้ดูแลระบบสามารถยกเว้นไม่ให้ส่งออกเส้นทางซับเน็ตจาก Spoke ของ VPC ไปยังตารางเส้นทางของฮับ NCC ในส่วนนี้ของโค้ดแล็บ ให้สร้างกฎการส่งออกการยกเว้นตามคำนำหน้าข้อมูลสรุปเพื่อป้องกันไม่ให้ส่งออกซับเน็ตของ VPC1 ไปยังตารางเส้นทางของฮับ NCC

ใช้คำสั่ง gcloud นี้เพื่อแสดงรายการซับเน็ตทั้งหมดของ VPC1

gcloud config set accessibility/screen_reader false
gcloud compute networks subnets list --network=vpc1-ncc

จดบันทึกคู่ซับเน็ต /25 ที่สร้างขึ้นก่อนหน้านี้ในส่วนการตั้งค่า

NAME              REGION       NETWORK   RANGE          STACK_TYPE  
vpc1-ncc-subnet1  us-central1  vpc1-ncc  10.1.1.0/24    IPV4_ONLY
vpc1-ncc-subnet2  us-central1  vpc1-ncc  10.1.2.0/25    IPV4_ONLY
vpc1-ncc-subnet3  us-central1  vpc1-ncc  10.1.2.128/25  IPV4_ONLY

กําหนดค่า VPC1 เป็น Spoke ของ NCC และยกเว้นไม่ให้นําเข้าคู่ซับเน็ต /25 ไปยังตารางการกําหนดเส้นทางของฮับโดยใช้คีย์เวิร์ด "export-exclude-ranges" เพื่อกรองเส้นทางสรุป /24 ออกจากช่วงนั้น

gcloud network-connectivity spokes linked-vpc-network create vpc1-spoke1 \
--hub=ncc-hub \
--vpc-network=vpc1-ncc \
--exclude-export-ranges=10.1.2.0/24 \
--global 

หมายเหตุ* ผู้ใช้จะกรองช่วง IP ที่ไม่ซ้ำกันได้สูงสุด 16 ช่วงต่อ Spoke ของ NCC

แสดงรายการเนื้อหาของตารางการกําหนดเส้นทางเริ่มต้นของฮับ NCC เกิดอะไรขึ้นกับคู่ซับเน็ต /25 ในตารางการกําหนดเส้นทางของ NCC Hub

gcloud network-connectivity hubs route-tables routes list --hub=ncc-hub --route_table=default --filter="NEXT_HOP:vpc1-ncc"
IP_CIDR_RANGE  STATE   TYPE                  NEXT_HOP  HUB      ROUTE_TABLE
10.1.1.0/24    ACTIVE  VPC_PRIMARY_SUBNET    vpc1-ncc  ncc-hub  default

กำหนดค่า VPC2 เป็น Spoke ของ NCC

gcloud network-connectivity spokes linked-vpc-network create vpc2-spoke2 \
--hub=ncc-hub \
--vpc-network=vpc2-ncc \
--global

กำหนดค่า VPC3 เป็น Spoke ของ NCC และกำหนดให้กับ Hub ของ NCC ที่สร้างไว้ก่อนหน้านี้

gcloud  network-connectivity spokes linked-vpc-network create vpc3-spoke3 \
--hub=ncc-hub \
--vpc-network=vpc3-ncc \
--global

เกิดอะไรขึ้น

ERROR: (gcloud.network-connectivity.spokes.linked-vpc-network.create) Invalid resource state for "https://www.googleapis.com/compute/v1/projects/xxxxxxxx/global/networks/vpc3-ncc": 10.3.3.0/24 (SUBNETWORK) overlaps with 10.3.3.0/24 (SUBNETWORK) from "projects/user-3p-dev/global/networks/vpc2-ncc" (peer)

ฮับ NCC ตรวจพบช่วง IP ที่ทับซ้อนกันกับ VPC2 โปรดทราบว่าทั้ง VPC2 และ VPC3 ได้รับการตั้งค่าด้วยเครือข่ายย่อย IP 10.3.3.0/24 เดียวกัน

การกรองช่วง IP ที่ทับซ้อนกันด้วย "ยกเว้นการส่งออก"

ขณะเขียนโค้ดแล็บนี้ ปัญหาที่ทราบคือผู้ใช้ต้องลบและสร้าง Spoke ของ NCC อีกครั้งเพื่อทำการเปลี่ยนแปลงการกำหนดค่าตัวกรองการส่งออก

gcloud network-connectivity spokes delete vpc2-spoke2 --global --quiet

หมายเหตุ: การลบ Spoke ของ VPC ที่เชื่อมโยงกับ VPC หนึ่งๆ จะต้องรอให้พ้นระยะเวลาพัก 10 นาทีจึงจะสร้าง Spoke ใหม่ซึ่งอ้างอิง VPC เดียวกันนั้นได้

gcloud  network-connectivity spokes linked-vpc-network create vpc2-spoke2 \
--hub=ncc-hub \
--vpc-network=vpc2-ncc \
--exclude-export-ranges=10.3.3.0/24 \
--global

กําหนดค่า VPC3 เป็น Spoke ของ NCC และมอบหมายให้กับ Hub ของ NCC ที่สร้างไว้ก่อนหน้านี้ การพยายามเพิ่ม VPC3 เป็น Spoke ไปยัง NCC ควรสำเร็จ

gcloud network-connectivity spokes linked-vpc-network create vpc3-spoke3 \
--hub=ncc-hub \
--vpc-network=vpc3-ncc \
--exclude-export-ranges=10.3.3.0/24 \
--global

แสดงรายการเนื้อหาของตารางการกําหนดเส้นทางเริ่มต้นของ NCC Hub และตรวจสอบเอาต์พุต

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

ระบบจะไม่รวมช่วง IP ที่ทับซ้อนกันจาก VPC2 และ VPC3 ตารางการกําหนดเส้นทางของฮับ NCC รองรับประเภทช่วงที่ถูกต้องทั้งหมดของ IPv4 ยกเว้นที่อยู่ IP สาธารณะที่ใช้แบบส่วนตัว (PUPI)

5. NCC ที่มี Spokes ข้ามโปรเจ็กต์

ภาพรวม

จนถึงตอนนี้ คุณได้กําหนดค่า Spoke ของ NCC ที่อยู่ในโปรเจ็กต์เดียวกับ Hub แล้ว ในส่วนนี้ คุณจะต้องกำหนดค่า VPC เป็น Spoke ของ NCC จากโปรเจ็กต์อื่นที่ไม่ใช่ฮับ NCC โดยใช้คำสั่ง gcloud

ซึ่งจะช่วยให้เจ้าของโปรเจ็กต์ที่จัดการ VPC ของตนเองเข้าร่วมการเชื่อมต่อเครือข่ายกับ NCC Hub ได้

e1190fa898c5097d.png

ข้ามโปรเจ็กต์: คอนโซล Google Cloud และ Cloud Shell

เราจะใช้ทั้ง Google Cloud Console และ Cloud Shell ตลอดทั้งห้องทดลองนี้เพื่อโต้ตอบกับ GCP

Google Cloud Console ของ Spoke แบบข้ามโปรเจ็กต์

ไปที่คอนโซลระบบคลาวด์ได้ที่ https://console.cloud.google.com

ตั้งค่ารายการต่อไปนี้ใน Google Cloud เพื่อให้กำหนดค่าศูนย์การเชื่อมต่อเครือข่ายได้ง่ายขึ้น

ในคอนโซล Google Cloud ให้เลือกหรือสร้างโปรเจ็กต์ Google Cloud ในหน้าตัวเลือกโปรเจ็กต์

เปิด Cloud Shell Codelab นี้ใช้ตัวแปร $เพื่อช่วยให้การติดตั้งใช้งานการกําหนดค่า gcloud ใน Cloud Shell ง่ายขึ้น

gcloud auth list
gcloud config list project
gcloud config set project [YOUR-CROSSPROJECT-NAME]
xprojname=[YOUR-CROSSPROJECT-NAME]
echo $xprojname
gcloud config set compute/zone us-central1-a
gcloud config set compute/region us-central1

บทบาท IAM

NCC กำหนดให้ต้องใช้บทบาท IAM เพื่อเข้าถึง API บางรายการ อย่าลืมกำหนดค่าผู้ใช้ด้วยบทบาท IAM ของ NCC ตามที่จำเป็น

ผู้ดูแลระบบ Spoke ข้ามโปรเจ็กต์ต้องได้รับบทบาท IAM อย่างน้อย "networkconnectivity.networkSpokeManager" "

ตารางด้านล่างแสดงบทบาท IAM ที่จําเป็นสําหรับผู้ดูแลระบบฮับและ Spoke ของ NCC เพื่อใช้เป็นข้อมูลอ้างอิง

บทบาท/คำอธิบาย

สิทธิ์

networkconnectivity.networkAdmin - อนุญาตให้ผู้ดูแลระบบเครือข่ายจัดการฮับและ Spoke

networkconnectivity.hubs.networkconnectivity.spokes.

networkconnectivity.networkSpokeManager - อนุญาตให้เพิ่มและจัดการ Spoke ในฮับ สำหรับใช้ใน VPC ที่แชร์ซึ่งโปรเจ็กต์โฮสต์เป็นเจ้าของฮับ แต่ผู้ดูแลระบบคนอื่นๆ ในโปรเจ็กต์อื่นๆ สามารถเพิ่ม Spoke สำหรับไฟล์แนบของตนลงในฮับได้

networkconnectivity.spokes.**

networkconnectivity.networkUsernetworkconnectivity.networkViewer - อนุญาตให้ผู้ใช้เครือข่ายดูแอตทริบิวต์ต่างๆ ของฮับและ Spoke

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

สร้าง VPC และซับเน็ตในโปรเจ็กต์ข้าม

เครือข่าย VPC มีซับเน็ตที่คุณจะใช้ติดตั้ง GCE VM เพื่อตรวจสอบเส้นทางข้อมูล

gcloud compute networks create xproject-vpc \
--subnet-mode custom

gcloud compute networks subnets create xprj-net-1 \
--network xproject-vpc \
--range 10.100.1.0/24 \
--region us-central1

URI ของโปรเจ็กต์ NCC Hub

ใช้คำสั่ง gcloud นี้เพื่อค้นหา URI ของฮับ NCC คุณต้องใช้เส้นทาง URI เพื่อกําหนดค่า NCC แบบข้ามโปรเจ็กต์ที่กล่าวถึงในขั้นตอนถัดไป

gcloud network-connectivity hubs describe ncc-hub

VPC Spoke ข้ามโปรเจ็กต์

เข้าสู่ระบบโปรเจ็กต์อื่นที่ VPC ไม่ได้เป็นส่วนหนึ่งของโปรเจ็กต์ NCC Hub ใน Cloud Shell ให้ใช้คำสั่งนี้เพื่อกำหนดค่า VPC เป็น Spoke ของ NCC

  • HUB_URI ควรเป็น URI ของฮับในโปรเจ็กต์อื่น
  • VPC_URI ควรอยู่ในโปรเจ็กต์เดียวกับ Spoke
  • VPC-network ระบุ VPC ในโปรเจ็กต์ข้ามโปรเจ็กต์นี้จะเข้าร่วมฮับ NCC ในโปรเจ็กต์อื่น
gcloud network-connectivity spokes linked-vpc-network create xproj-spoke \
--hub=projects/[YOUR-PROJECT-NAME]/locations/global/hubs/ncc-hub \
--global \
--vpc-network=xproject-vpc

.

Create request issued for: [xproj-spoke]
Waiting for operation [projects/xproject/locations/global/operations/operation-1689790411247-600dafd351158-2b862329-19b747f1] to complete...done.                           
Created spoke [xproj-spoke].
createTime: '2023-07-19T18:13:31.388500663Z'
hub: projects/[YOUR-PROJECT-NAME]/locations/global/hubs/ncc-hub
linkedVpcNetwork:
  uri: https://www.googleapis.com/compute/v1/projects/xproject/global/networks/xproject-vpc
name: projects/xproject/locations/global/spokes/xproj-spoke
reasons:
- code: PENDING_REVIEW
  message: Spoke is Pending Review
spokeType: VPC_NETWORK
state: INACTIVE
uniqueId: 46b4d091-89e2-4760-a15d-c244dcb7ad69
updateTime: '2023-07-19T18:13:38.652800902Z'

สถานะของ NCC ที่พูดถึงโปรเจ็กต์ข้ามสายเป็นอย่างไร เหตุผล

6. ปฏิเสธหรือยอมรับ Spoke ข้ามโปรเจ็กต์

ภาพรวม

ผู้ดูแลระบบฮับ NCC ต้องยอมรับ Spoke ข้ามโปรเจ็กต์อย่างชัดเจนเพื่อเข้าร่วมฮับ ซึ่งจะช่วยป้องกันไม่ให้เจ้าของโปรเจ็กต์แนบ Spoke ของ NCC ที่ไม่น่าไว้วางใจกับตารางการกําหนดเส้นทางทั่วโลกของ NCC เมื่อยอมรับหรือปฏิเสธ Spoke แล้ว คุณจะปฏิเสธหรือยอมรับ Spoke ดังกล่าวได้หลายครั้งตามต้องการโดยเรียกใช้คำสั่งข้างต้น

กลับไปที่โปรเจ็กต์ที่มีฮับ NCC โดยเข้าสู่ระบบ Cloud Shell

ระบุ Spoke ข้ามโปรเจ็กต์ที่จะตรวจสอบ

gcloud network-connectivity hubs list-spokes ncc-hub \
 --filter="reason:PENDING_REVIEW"

การยอมรับ Spoke

gcloud network-connectivity spokes accept xproj-spoke --global

ไม่บังคับ: การปฏิเสธคำพูด

gcloud network-connectivity spokes reject xproj-spoke \
--global \
--details="some reason to reject"

แสดงรายการ Spoke ที่ใช้งานอยู่ใน Hub

gcloud network-connectivity hubs list-spokes ncc-hub \
 --filter="state:ACTIVE"
NAME            PROJECT          LOCATION  TYPE         STATE   STATE REASON
Xproj-spoke     xproj            global    VPC_NETWORK  ACTIVE
vpc4-spoke4     user-3p-dev      global    VPC_NETWORK  ACTIVE
vpc1-spoke1     user-3p-dev      global    VPC_NETWORK  ACTIVE
vpc2-spoke2     user-3p-dev      global    VPC_NETWORK  ACTIVE
vpc3-spoke3     user-3p-dev      global    VPC_NETWORK  ACTIVE

แสดงรายการเส้นทางซับเน็ตใน Hub

คุณเห็นเส้นทางซับเน็ตจาก Spoke แบบข้าม VPC จากเอาต์พุตไหม

gcloud network-connectivity hubs route-tables routes list \
--route_table=default \
--hub=ncc-hub \
--filter="NEXT_HOP:xprj-vpc"
IP_CIDR_RANGE  STATE   TYPE                NEXT_HOP  HUB      ROUTE_TABLE
10.100.0.0/16  ACTIVE  VPC_PRIMARY_SUBNET  xprj-vpc  ncc-hub  default

7. Private NAT ระหว่าง VPC

ภาพรวม

ในส่วนนี้ คุณจะต้องกำหนดค่า NAT ส่วนตัวสำหรับช่วงซับเน็ตที่ทับซ้อนกันระหว่าง VPC 2 รายการ โปรดทราบว่า NAT ส่วนตัวระหว่าง VPC ต้องใช้ NCC

ในส่วนก่อนหน้านี้ VPC2 และ VPC3 ได้รับการกําหนดค่าให้มีช่วงเครือข่ายย่อยที่ทับซ้อนกันของ "10.3.3.0/24" ทั้ง 2 VPC ได้รับการกําหนดค่าเป็น Spoke ของ NCC เพื่อยกเว้นไม่ให้ใส่ซับเน็ตที่ทับซ้อนกันในตารางเส้นทางของฮับ NCC ซึ่งหมายความว่าไม่มีเส้นทางข้อมูลเลเยอร์ 3 เพื่อเข้าถึงโฮสต์ที่อยู่ในซับเน็ตนั้น

ใช้คำสั่งเหล่านี้ในโปรเจ็กต์ฮับ NCC เพื่อค้นหาช่วงซับเน็ตที่ทับซ้อนกัน

gcloud compute networks subnets list --network vpc2-ncc

gcloud compute networks subnets list --network vpc3-ncc

ใน vpc2-ncc ชื่อซับเน็ตที่มีช่วง IP ที่ซ้อนทับกันคืออะไร

*จดชื่อซับเน็ตไว้ คุณจะต้องกำหนดค่า NAT ต้นทางสำหรับช่วงนี้

กําหนดค่า Private NAT

กำหนดช่วงซับเน็ตที่กำหนดเส้นทางได้ให้กับการรับส่งข้อมูล NAT ต้นทางจากซับเน็ตที่ซ้อนทับกันของ VPC2 โดยกำหนดค่าช่วงซับเน็ตที่ไม่ทับซ้อนกันโดยใช้แฟล็ก "–purpose=PRIVATE_NAT"

gcloud compute networks subnets create ncc2-spoke-nat \
--network=vpc2-ncc \
--region=us-central1 \
--range=10.10.10.0/29 \
--purpose=PRIVATE_NAT

สร้าง Cloud Router โดยเฉพาะเพื่อใช้ NAT แบบส่วนตัว

gcloud compute routers create private-nat-cr \
--network vpc2-ncc \
--region us-central1

กำหนดค่าเราเตอร์ระบบคลาวด์ให้ใช้ NAT ช่วงที่ซ้อนทับกันของ 10.3.3.0/24 จาก vpc2-ncc ในตัวอย่างนี้ "overlapping-vpc3" คือชื่อของซับเน็ตที่ทับซ้อนกัน คีย์เวิร์ด "ALL" จะระบุว่าช่วง IP ทั้งหมดในสับเน็ตจะใช้ NAT ของต้นทาง

gcloud compute routers nats create ncc2-nat \
--router=private-nat-cr \
--type=PRIVATE \
--nat-custom-subnet-ip-ranges=overlapping-vpc3:ALL \
--router-region=us-central1

ขั้นตอนก่อนหน้าได้สร้างพูลของช่วง IP NAT และซับเน็ตที่เฉพาะเจาะจงที่จะได้รับการแปล ในขั้นตอนนี้ ให้สร้างกฎ NAT "1" ที่แปลแพ็กเก็ตเครือข่ายที่ตรงกับการเข้าชมที่มาจากช่วงซับเน็ตที่ทับซ้อนกัน หากเครือข่ายปลายทางใช้เส้นทางจากตารางการกําหนดเส้นทางของฮับ NCC

gcloud compute routers nats rules create 1 \
--router=private-nat-cr \
--region=us-central1 \
--match='nexthop.hub == "//networkconnectivity.googleapis.com/projects/$projectname/locations/global/hubs/ncc-hub"' \
--source-nat-active-ranges=ncc2-spoke-nat \
--nat=ncc2-nat

ยืนยัน NAT ส่วนตัว

gcloud compute routers nats describe ncc2-nat --router=private-nat-cr

ตัวอย่างเอาต์พุต

enableDynamicPortAllocation: true
enableEndpointIndependentMapping: false
endpointTypes:
- ENDPOINT_TYPE_VM
name: ncc2-nat
rules:
- action:
    sourceNatActiveRanges:
    - https://www.googleapis.com/compute/projects/yueri-3p-dev/regions/us-central1/subnetworks/ncc2-spoke-nat
  match: nexthop.hub == "//networkconnectivity.googleapis.com/projects/yueri-3p-dev/locations/global/hubs/ncc-hub"
  ruleNumber: 1
sourceSubnetworkIpRangesToNat: LIST_OF_SUBNETWORKS
subnetworks:
- name: https://www.googleapis.com/compute/projects/yueri-3p-dev/regions/us-central1/subnetworks/overlapping-vpc3
  sourceIpRangesToNat:
  - ALL_IP_RANGES
type: PRIVATE

ไม่บังคับ

  • เปลี่ยนไปใช้เว็บคอนโซล
  • ไปที่ "บริการเครือข่าย > Cloud NAT > ncc2-nat"

ตรวจสอบว่าเปิดใช้การจัดสรรพอร์ตแบบไดนามิกโดยค่าเริ่มต้น

114050bb65e0c4e2.png

ถัดไป คุณจะต้องยืนยันเส้นทางข้อมูลที่ใช้เส้นทาง NAT ส่วนตัวที่กําหนดค่าไว้สําหรับ VPC2

5035b181aeaa30a8.png

เปิดเซสชัน SSH ไปยัง "vm1-vpc1-ncc" และใช้คำสั่ง tcpdump ด้านล่างเพื่อบันทึกแพ็กเก็ตที่มาจากช่วงพูล NAT "10.10.10.0/29"

vm1-vpc1-ncc

sudo tcpdump -i any net 10.10.10.0/29 -n

ณ เวลาที่เขียน Codelab นี้ NAT ส่วนตัวไม่รองรับแพ็กเก็ต ICMP เซสชัน SSH ไปยัง "pNat-vm-vpc2" และใช้คำสั่ง curl ตามที่แสดงด้านล่างเพื่อเชื่อมต่อกับ "vm1-vpc1-ncc" ในพอร์ต TCP 80

pnat-vm-vpc2

curl 10.1.1.2 -v 

ตรวจสอบเอาต์พุตของ tcpdump ใน "vm1-vpc1-ncc" ที่อยู่ IP ต้นทางที่เป็นต้นทางของเซสชัน TCP ไปยังเว็บเซิร์ฟเวอร์ของเราใน "vm1-vpc1-ncc" คืออะไร

tcpdump: data link type LINUX_SLL2
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on any, link-type LINUX_SLL2 (Linux cooked v2), snapshot length 262144 bytes
19:05:27.504761 ens4  In  IP 10.10.10.2.1024 > 10.1.1.2:80: Flags [S], seq 2386228656, win 65320, options [mss 1420,sackOK,TS val 3955849029 ecr 0,nop,wscale 7], length 0
19:05:27.504805 ens4  Out IP 10.1.1.2:80 > 10.10.10.2.1024: Flags [S.], seq 48316785, ack 2386228657, win 64768, options [mss 1420,sackOK,TS val 1815983704 ecr 3955849029,nop,wscale 7], length 0
<output snipped>

8. ยืนยันการเชื่อมต่อเส้นทางข้อมูล

ดูแผนภาพเพื่อยืนยันเส้นทางข้อมูลระหว่างเครื่องเสมือนแต่ละเครื่อง

424df0ebe4510ebb.png

SSH ไปยัง "vm1-vpc1-ncc" และเริ่มการดัมพ์ TCP เพื่อติดตามแพ็กเก็ต ICMP จาก " vm2-vpc2-ncc" โปรดทราบว่า VM นี้อยู่ใน VPC2

vm1-vpc1-ncc

sudo tcpdump -i any icmp -v -e -n

สร้างเซสชัน SSH กับ "vm1-vpc2-ncc" และ "ping" ที่อยู่ IP ของ "vm1-vpc1-ncc"

vm1-vpc2-ncc

ping 10.1.1.2

สร้าง SSH ไปยัง "vm1-vpc2-ncc" และ "ping" ที่อยู่ IP ของ "vm1-vpc4-ncc"

vm1-vpc2-ncc

ping 240.0.0.2

9. ล้าง

เข้าสู่ระบบ Cloud Shell และลบอินสแตนซ์ VM ในเครือข่ายฮับและเครือข่ายไซต์สาขา

ลบการกำหนดค่า NAT ของ VPC ส่วนตัว

gcloud compute routers nats rules delete 1 \
--nat=ncc2-nat \
--router=private-nat-cr \
--region=us-central1 \
--quiet

gcloud compute routers nats delete ncc2-nat \
--router=private-nat-cr \
--router-region=us-central1 \
--quiet

gcloud compute routers delete private-nat-cr \
--region=us-central1 \
--quiet

Delete ncc spokes

gcloud network-connectivity spokes delete vpc1-spoke1 --global --quiet

gcloud network-connectivity spokes delete vpc2-spoke2 --global --quiet

gcloud network-connectivity spokes delete vpc3-spoke3 --global --quiet

gcloud network-connectivity spokes delete vpc4-spoke4 --global --quiet

ปฏิเสธการพูดข้ามโปรเจ็กต์

ปฏิเสธ Spoke VPC ข้ามโปรเจ็กต์จากฮับ NCC

gcloud network-connectivity spokes reject projects/$xprojname/locations/global/spokes/xproj-spoke \--details="cleanup" \
--global

ลบฮับ NCC

gcloud network-connectivity hubs delete ncc-hub --quiet

ลบกฎไฟร์วอลล์

gcloud compute firewall-rules delete ncc1-vpc-internal --quiet
gcloud compute firewall-rules delete ncc2-vpc-internal --quiet
gcloud compute firewall-rules delete ncc3-vpc-internal --quiet
gcloud compute firewall-rules delete ncc4-vpc-internal --quiet
gcloud compute firewall-rules delete ncc1-vpc-iap --quiet
gcloud compute firewall-rules delete ncc2-vpc-iap --quiet
gcloud compute firewall-rules delete ncc3-vpc-iap --quiet
gcloud compute firewall-rules delete ncc4-vpc-iap --quiet

ลบอินสแตนซ์ GCE

gcloud compute instances delete vm1-vpc1-ncc --zone=us-central1-a --quiet
gcloud compute instances delete vm2-vpc2-ncc --zone=us-central1-a --quiet
gcloud compute instances delete pnat-vm-vpc2 --zone=us-central1-a --quiet
gcloud compute instances delete vm1-vpc4-ncc --zone=us-east1-b --quiet

ลบซับเน็ต VPC

gcloud compute networks subnets delete ncc2-spoke-nat --region us-central1 --quiet
gcloud compute networks subnets delete vpc1-ncc-subnet1 --region us-central1 --quiet
gcloud compute networks subnets delete vpc1-ncc-subnet2 --region us-central1 --quiet
gcloud compute networks subnets delete vpc1-ncc-subnet3 --region us-central1 --quiet
gcloud compute networks subnets delete vpc2-ncc-subnet1 --region us-central1 --quiet
gcloud compute networks subnets delete overlapping-vpc2 --region us-central1 --quiet 
gcloud compute networks subnets delete overlapping-vpc3 --region us-central1 --quiet

gcloud compute networks subnets delete benchmark-testing-rfc2544 --region us-east1 --quiet
gcloud compute networks subnets delete class-e-rfc5735 --region us-east1 --quiet
gcloud compute networks subnets delete ietf-protcol-assignment-rfc6890 --region us-east1 --quiet
gcloud compute networks subnets delete ipv6-4-relay-rfc7526 --region us-east1 --quiet
gcloud compute networks subnets delete pupi --region us-east1 --quiet
gcloud compute networks subnets delete test-net-1-rfc5737 --region us-east1 --quiet
gcloud compute networks subnets delete test-net-2-rfc5737 --region us-east1 --quiet
gcloud compute networks subnets delete test-net-3-rfc5737 --region us-east1 --quiet

ลบ VPC

gcloud compute networks delete vpc1-ncc vpc2-ncc vpc3-ncc vpc4-ncc 
--quiet 

10. ยินดีด้วย

คุณทำ Lab ของ Network Connectivity Center เสร็จแล้ว

สิ่งที่คุณครอบคลุม

  • เครือข่ายการเพียร์ VPC แบบ Mesh เต็มที่ที่กําหนดค่าแล้วด้วยฮับ NCC
  • ตัวกรองการยกเว้นของ NCC Spoke
  • การสนับสนุน Spoke แบบข้ามโปรเจ็กต์
  • Private NAT ระหว่าง VPC

ขั้นตอนถัดไป

©Google, LLC หรือบริษัทในเครือ สงวนลิขสิทธิ์ ห้ามเผยแพร่