Private Service Connect: การย้ายข้อมูลการเพียร์ VPC ไปยัง Private Service Connect

เกี่ยวกับ Codelab นี้
schedule74 นาที
subjectอัปเดตล่าสุดเมื่อ 28 เมษายน 2568
account_circleเขียนโดย Lorin Price

การเพียร์ VPC เป็นวิธีการทั่วไปสำหรับผู้ผลิตในการเสนอการใช้บริการแก่ผู้ใช้ อย่างไรก็ตาม การใช้การเพียร์ VPC มาพร้อมกับความซับซ้อนของการกำหนดเส้นทางมากมาย เช่น การเพียร์ VPC ที่ไม่ใช่แบบทางอ้อม การใช้ที่อยู่ IP ขนาดใหญ่ และการเปิดเผยทรัพยากรใน VPC ที่มีการเชื่อมต่อแบบเพียร์มากเกินไป

Private Service Connect (PSC) เป็นวิธีการเชื่อมต่อที่ช่วยให้ผู้ผลิตแสดงบริการผ่านปลายทางเดียวที่ผู้บริโภคจัดสรรใน VPC ภาระงาน ซึ่งช่วยลดปัญหามากมายที่ผู้ใช้พบเกี่ยวกับการเพียร์ VPC แม้ว่าบริการใหม่จำนวนมากจะสร้างด้วย PSC แต่ก็ยังมีบริการอีกมากมายที่เป็นบริการการเพียร์ VPC

Google Cloud มีความยินดีที่จะแนะนำเส้นทางการย้ายข้อมูลสำหรับบริการที่คุณสร้างขึ้นผ่านการเพียร์ VPC เพื่อย้ายไปยังสถาปัตยกรรมที่ใช้ PSC เมื่อใช้วิธีการย้ายข้อมูลนี้ ที่อยู่ IP สำหรับบริการของผู้ผลิตที่แสดงผ่านการเพียร์ VPC จะได้รับการเก็บรักษาผ่านไปยังสถาปัตยกรรมแบบ PSC เพื่อให้ผู้บริโภคดำเนินการเปลี่ยนแปลงน้อยที่สุด โดยทำตาม Codelab นี้เพื่อเรียนรู้ขั้นตอนทางเทคนิคในการย้ายข้อมูลนี้

หมายเหตุ: เส้นทางการย้ายข้อมูลนี้มีไว้สำหรับบริการที่มีผู้ผลิตและผู้บริโภคอยู่ภายในองค์กร Google Cloud เดียวกันเท่านั้น สำหรับบริการ Google Cloud หรือบริการของบุคคลที่สามที่ใช้การเพียร์ VPC บริการจะใช้ประโยชน์จากวิธีการย้ายข้อมูลที่คล้ายกัน แต่จะได้รับการปรับแต่งสำหรับตัวบริการเอง โปรดติดต่อฝ่ายที่เกี่ยวข้องเพื่อสอบถามเกี่ยวกับเส้นทางการย้ายข้อมูลสำหรับบริการประเภทนี้

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

  • วิธีตั้งค่าบริการที่ใช้การเพียร์ VPC
  • วิธีตั้งค่าบริการตาม PSC
  • การใช้ Internal-Ranges API เพื่อดำเนินการย้ายข้อมูลซับเน็ตผ่านการเพียร์ VPC เพื่อให้มีการย้ายข้อมูลบริการการเพียร์ VPC ไปยัง PSC
  • การทำความเข้าใจเมื่อต้องเกิดช่วงพักสำหรับการย้ายข้อมูลบริการ
  • ขั้นตอนการล้างข้อมูลการย้ายข้อมูล

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

  • โปรเจ็กต์ Google Cloud ที่มีสิทธิ์ระดับเจ้าของ

2. โทโพโลยี Codelab

Codelab นี้จะรวมทรัพยากรทั้งหมดไว้ในโปรเจ็กต์เดียวเพื่อให้ใช้งานได้ง่าย จะมีการระบุไว้ใน Codelab ว่าต้องดำเนินการใดในฝั่งผู้ผลิต และต้องดำเนินการใดในฝั่งผู้บริโภคในกรณีที่ผู้ผลิตและผู้บริโภคอยู่ในโปรเจ็กต์ที่ต่างกัน

Codelab นี้จะมี 4 สถานะ

7dbf27cf215f9703.png

สถานะ 1 คือสถานะการเพียร์ VPC VPC จะมี 2 รายการ ได้แก่ Consumer-vpc และ Producer-vpc ที่จะมีการเพียร์ร่วมกัน Producer-vpc จะมีบริการ Apache แบบง่ายที่เปิดเผยผ่านตัวจัดสรรภาระงานเครือข่าย Passthrough ภายใน Consumer-vpc จะมี Consumer-Vm เดี่ยวสำหรับวัตถุประสงค์ในการทดสอบ

7f64427c0e59d417.png

สถานะ 2 คือสถานะทดสอบของ PSC เราจะสร้างกฎการส่งต่อใหม่และใช้กฎนี้เพื่อเชื่อมโยงกับไฟล์แนบบริการของเรา จากนั้นเราจะสร้างปลายทาง PSC สำหรับการทดสอบใน Consumer-vpc เพื่อทดสอบว่าบริการ PSC ของเราทำงานตามที่คาดหมาย

98c324c59c1fbf68.png

สถานะ 3 คือสถานะการย้ายข้อมูล เราจะจองช่วงซับเน็ตใน manufacturers-vpc ที่มีการทำให้บริการที่มีการเพียร์ VPC ใช้งานได้เพื่อใช้ใน Consumer-vpc จากนั้นเราจะสร้างปลายทาง PSC ใหม่ด้วยที่อยู่ IP เดียวกันกับกฎการส่งต่อที่มีอยู่แล้วใน manufacturers-vpc

a64ab7b69132c722.png

สถานะ 4 คือสถานะ PSC สุดท้าย เราจะล้างปลายทาง PSC ของการทดสอบและลบการเพียร์ VPC ระหว่าง Consumer-vpc และ Producer-vpc

3. การตั้งค่าและข้อกําหนด

การตั้งค่าสภาพแวดล้อมด้วยตนเอง

  1. ลงชื่อเข้าใช้ Google Cloud Console และสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ หากยังไม่มีบัญชี Gmail หรือ Google Workspace คุณต้องสร้างบัญชี

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • ชื่อโปรเจ็กต์คือชื่อที่แสดงสำหรับผู้เข้าร่วมโปรเจ็กต์นี้ ซึ่งเป็นสตริงอักขระที่ Google APIs ไม่ได้ใช้ คุณจะอัปเดตได้ทุกเมื่อ
  • รหัสโปรเจ็กต์จะซ้ำกันไม่ได้ในโปรเจ็กต์ Google Cloud ทั้งหมดและจะเปลี่ยนแปลงไม่ได้ (เปลี่ยนแปลงไม่ได้หลังจากตั้งค่าแล้ว) คอนโซล Cloud จะสร้างสตริงที่ไม่ซ้ำกันโดยอัตโนมัติ ซึ่งปกติแล้วคุณไม่จำเป็นต้องสนใจว่าสตริงนั้นจะเป็นอะไร ในโค้ดแล็บส่วนใหญ่ คุณจะต้องอ้างอิงรหัสโปรเจ็กต์ (ปกติจะระบุเป็น PROJECT_ID) หากไม่ชอบรหัสที่สร้างขึ้น คุณอาจสร้างรหัสอื่นแบบสุ่มได้ หรือจะลองใช้อุปกรณ์ของคุณเองเพื่อดูว่าอุปกรณ์พร้อมใช้งานหรือไม่ก็ได้ คุณจะเปลี่ยนแปลงชื่อหลังจากขั้นตอนนี้ไม่ได้ และชื่อดังกล่าวจะคงอยู่ตลอดระยะเวลาของโปรเจ็กต์
  • โปรดทราบว่ามีค่าที่ 3 ซึ่งเป็นหมายเลขโปรเจ็กต์ที่ API บางรายการใช้ ดูข้อมูลเพิ่มเติมเกี่ยวกับค่าทั้ง 3 รายการนี้ได้ในเอกสารประกอบ
  1. ถัดไป คุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร/API ของ Cloud การทำตามโค้ดแล็บนี้จะไม่เสียค่าใช้จ่ายมากนัก หรืออาจไม่เสียค่าใช้จ่ายเลย หากต้องการปิดทรัพยากรเพื่อหลีกเลี่ยงการเรียกเก็บเงินหลังจากบทแนะนำนี้ คุณลบทรัพยากรที่สร้างไว้หรือลบโปรเจ็กต์ได้ ผู้ใช้ Google Cloud รายใหม่มีสิทธิ์เข้าร่วมโปรแกรมช่วงทดลองใช้ฟรีมูลค่า$300 USD

เริ่ม Cloud Shell

แม้ว่า Google Cloud จะทำงานจากระยะไกลจากแล็ปท็อปได้ แต่ในโค้ดแล็บนี้ คุณจะใช้ Google Cloud Shell ซึ่งเป็นสภาพแวดล้อมบรรทัดคำสั่งที่ทำงานในระบบคลาวด์

จาก Google Cloud Console ให้คลิกไอคอน Cloud Shell ในแถบเครื่องมือด้านขวาบน

55efc1aaa7a4d3ad.png

การจัดสรรและเชื่อมต่อกับสภาพแวดล้อมจะใช้เวลาเพียงไม่กี่นาที เมื่อดำเนินการเสร็จแล้ว คุณควรเห็นข้อมูลดังต่อไปนี้

7ffe5cbb04455448.png

เครื่องเสมือนนี้โหลดเครื่องมือการพัฒนาทั้งหมดที่คุณต้องการ ซึ่งจะมีไดเรกทอรีหลักขนาด 5 GB ถาวรและทำงานบน Google Cloud ซึ่งจะช่วยเพิ่มประสิทธิภาพเครือข่ายและการรับรองได้อย่างมีประสิทธิภาพ คุณทํางานทั้งหมดในโค้ดแล็บนี้ได้ภายในเบราว์เซอร์ คุณไม่จำเป็นต้องติดตั้งอะไร

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

เปิดใช้ API

ตรวจสอบใน Cloud Shell ว่ามีการตั้งค่าโปรเจ็กต์และกำหนดค่าตัวแปรแล้ว

gcloud auth login
gcloud config list project
gcloud config set project [YOUR-PROJECT-ID]
export projectid=[YOUR-PROJECT-ID]
export region=us-central1
export zone=$region-a
echo $projectid
echo $region
echo $zone

เปิดใช้บริการที่จำเป็นทั้งหมด

gcloud services enable compute.googleapis.com
gcloud services enable networkconnectivity.googleapis.com
gcloud services enable dns.googleapis.com

5. สร้างเครือข่าย VPC ของ Producer (กิจกรรม Producer)

เครือข่าย VPC

จาก Cloud Shell

gcloud compute networks create producer-vpc \
    --subnet-mode=custom

สร้างซับเน็ต

จาก Cloud Shell

gcloud compute networks subnets create producer-service-subnet \
    --network=producer-vpc \
    --range=10.0.0.0/28 \
    --region=$region

gcloud compute networks subnets create producer-fr-subnet \
        --network=producer-vpc \
        --range=192.168.0.0/28 \
        --region=$region

สร้าง Cloud Router และ Cloud NAT ของ Producer

จาก Cloud Shell

gcloud compute routers create $region-cr \
   --network=producer-vpc \
   --region=$region

gcloud compute routers nats create $region-nat \
    --router=$region-cr \
    --region=$region \
    --nat-all-subnet-ip-ranges \
    --auto-allocate-nat-external-ips

สร้างนโยบายไฟร์วอลล์ของเครือข่ายผู้ผลิตและกฎไฟร์วอลล์

จาก 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 network-producer-vpc \
    --global-firewall-policy

หากต้องการอนุญาตให้ IAP เชื่อมต่อกับอินสแตนซ์ VM ให้สร้างกฎไฟร์วอลล์ที่มีลักษณะดังนี้

  • ใช้กับอินสแตนซ์ VM ทั้งหมดที่คุณต้องการให้เข้าถึงได้โดยใช้ IAP
  • อนุญาตการรับส่งข้อมูลขาเข้าจากช่วง IP 35.235.240.0/20 ช่วงนี้ประกอบด้วยที่อยู่ IP ทั้งหมดที่ IAP ใช้สำหรับการส่งต่อ TCP

จาก 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

นอกจากนี้ เราจะสร้างกฎอีก 2 ข้อที่อนุญาตให้มีการตรวจสอบประสิทธิภาพการทำงานของตัวจัดสรรภาระงานไปยังบริการ รวมถึงอนุญาตการจราจรของข้อมูลในเครือข่ายจาก VM ที่จะเชื่อมต่อจาก VPC ของผู้บริโภค

จาก Cloud Shell

gcloud compute network-firewall-policies rules create 2000 \
    --action ALLOW \
    --firewall-policy producer-vpc-policy \
    --description "LB healthchecks" \
    --direction INGRESS \
    --src-ip-ranges 130.211.0.0/22,35.191.0.0/16 \
    --layer4-configs tcp:80  \
    --global-firewall-policy


gcloud compute network-firewall-policies rules create 3000 \
    --action ALLOW \
    --firewall-policy producer-vpc-policy \
    --description "allow access from consumer-vpc" \
    --direction INGRESS \
    --src-ip-ranges 10.0.1.0/28 \
    --layer4-configs tcp:80  \
    --global-firewall-policy

6. การตั้งค่าบริการ Producer (กิจกรรม Producer)

เราจะสร้างบริการผู้ผลิตที่มี VM เดี่ยวที่เรียกใช้เว็บเซิร์ฟเวอร์ Apache ซึ่งจะเพิ่มลงในอินสแตนซ์ที่ไม่มีการจัดการอยู่ด้านหน้าด้วยตัวจัดสรรภาระงานการส่งผ่านเครือข่ายภายในระดับภูมิภาค

สร้าง VM และอินสแตนซ์ที่ไม่มีการจัดการ

จาก Cloud Shell

gcloud compute instances create producer-service-vm \
    --network producer-vpc \
    --subnet producer-service-subnet \
    --zone $zone \
    --no-address \
    --metadata startup-script='#! /bin/bash
    sudo apt-get update
    sudo apt-get install apache2 -y
    a2enmod ssl
    sudo a2ensite default-ssl
    echo "I am a Producer Service." | \
    tee /var/www/html/index.html
    systemctl restart apache2'

จาก Cloud Shell

gcloud compute instance-groups unmanaged create prod-uig \
  --zone=$zone

gcloud compute instance-groups unmanaged add-instances prod-uig \
  --zone=$zone \
  --instances=producer-service-vm

สร้างตัวจัดสรรภาระงานการส่งผ่านเครือข่ายภายในระดับภูมิภาค

จาก Cloud Shell

gcloud compute health-checks create http producer-hc \
        --region=$region

gcloud compute backend-services create producer-bes \
  --load-balancing-scheme=internal \
  --protocol=tcp \
  --region=$region \
  --health-checks=producer-hc \
  --health-checks-region=$region

gcloud compute backend-services add-backend producer-bes \
  --region=$region \
  --instance-group=prod-uig \
  --instance-group-zone=$zone

gcloud compute addresses create producer-fr-ip\
  --region $region \
  --subnet producer-fr-subnet \
  --addresses 192.168.0.2

gcloud compute forwarding-rules create producer-fr \
  --region=$region \
  --load-balancing-scheme=internal \
  --network=producer-vpc \
  --subnet=producer-fr-subnet \
  --address=producer-fr-ip \
  --ip-protocol=TCP \
  --ports=80 \
  --backend-service=producer-bes \
  --backend-service-region=$region

7. สร้างเครือข่าย VPC ของผู้บริโภค (กิจกรรมของผู้บริโภค)

เครือข่าย VPC

จาก Cloud Shell

gcloud compute networks create consumer-vpc \
    --subnet-mode=custom

สร้างซับเน็ต

จาก Cloud Shell

gcloud compute networks subnets create consumer-vm-subnet \
    --network=consumer-vpc \
    --range=10.0.1.0/28 \
    --region=$region

สร้างนโยบายไฟร์วอลล์ของเครือข่ายผู้บริโภคและกฎไฟร์วอลล์

เราจะสร้างนโยบายไฟร์วอลล์เครือข่ายอีกรายการหนึ่งสำหรับ Consumer-vpc

จาก 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 network-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

8. สร้างเพียร์ VPC

กิจกรรมของผู้ผลิต

จาก Cloud Shell

gcloud compute networks peerings create producer-vpc-peering \
    --network=producer-vpc \
    --peer-project=$projectid \
    --peer-network=consumer-vpc

กิจกรรมของผู้บริโภค

จาก Cloud Shell

gcloud compute networks peerings create consumer-vpc-peering \
    --network=consumer-vpc \
    --peer-project=$projectid \
    --peer-network=producer-vpc

ยืนยันว่ามีการสร้างการเพียร์แล้วโดยการตรวจสอบรายการเส้นทางใน Consumer-vpc คุณควรเห็นเส้นทางสำหรับทั้ง consumer-vpc และ manufacturers-vpc

กิจกรรมของผู้บริโภค

จาก Cloud Shell

gcloud compute routes list --filter="network=consumer-vpc"

เอาต์พุตที่คาดหวัง

NAME: default-route-49dda7094977e231
NETWORK: consumer-vpc
DEST_RANGE: 0.0.0.0/0
NEXT_HOP: default-internet-gateway
PRIORITY: 1000

NAME: default-route-r-10d65e16cc6278b2
NETWORK: consumer-vpc
DEST_RANGE: 10.0.1.0/28
NEXT_HOP: consumer-vpc
PRIORITY: 0

NAME: peering-route-496d0732b4f11cea
NETWORK: consumer-vpc
DEST_RANGE: 192.168.0.0/28
NEXT_HOP: consumer-vpc-peering
PRIORITY: 0

NAME: peering-route-b4f9d3acc4c08d55
NETWORK: consumer-vpc
DEST_RANGE: 10.0.0.0/28
NEXT_HOP: consumer-vpc-peering
PRIORITY: 0

9. สร้างโซน DNS (กิจกรรมของผู้บริโภค)

เราจะสร้าง Cloud DNS Private Zone เพื่อเรียกใช้บริการผู้ผลิตผ่าน DNS แทนการส่งผ่านทางที่อยู่ IP ส่วนตัวเพื่อแสดงตัวอย่างที่สมจริงยิ่งขึ้น

เราจะเพิ่มระเบียน A ไปยังโดเมน example.com ชี้ service.example.com ไปยังที่อยู่ IP ของกฎการส่งต่อตัวจัดสรรภาระงานของ Network Passthrough ที่เราสร้างไว้ก่อนหน้านี้ ที่อยู่ IP ของกฎการส่งต่อคือ 192.168.0.2

จาก Cloud Shell

gcloud dns managed-zones create "producer-service" \
   --dns-name=example.com \
   --description="producer service dns" \
   --visibility=private \
   --networks=consumer-vpc

gcloud dns record-sets transaction start \
   --zone="producer-service"

gcloud dns record-sets transaction add 192.168.0.2 \
   --name=service.example.com \
   --ttl=300 \
   --type=A \
   --zone="producer-service"

gcloud dns record-sets transaction execute \
   --zone="producer-service"

10. บริการผู้ผลิตการทดสอบผ่านแอปเทียบเท่า VPC (กิจกรรมของผู้บริโภค)

ในขณะนี้ มีการสร้างสถาปัตยกรรม State 1 ขึ้น

สร้าง VM สำหรับผู้บริโภค-ไคลเอ็นต์

จาก Cloud Shell

gcloud compute instances create consumer-client \
   --zone=$zone \
   --subnet=consumer-vm-subnet \
   --no-address

ทดสอบการเชื่อมต่อ

จาก Cloud Shell

gcloud compute ssh \
    --zone "$zone" "consumer-client" \
    --tunnel-through-iap \
    --project $projectid

จาก VM ของผู้บริโภคและไคลเอ็นต์

curl service.example.com

เอาต์พุตที่คาดหวัง

I am a Producer Service. 

จาก VM ของผู้บริโภคและไคลเอ็นต์

exit

11. เตรียมบริการสำหรับ Private Service Connect (กิจกรรม Producer)

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

สร้างซับเน็ตที่จะโฮสต์ IP ของกฎการส่งต่อตัวจัดสรรภาระงานใหม่

จาก Cloud Shell

gcloud compute networks subnets create producer-psc-fr-subnet \
    --network=producer-vpc \
    --range=10.0.2.64/28 \
    --region=$region

สร้างที่อยู่ IP ภายในของกฎการส่งต่อตัวจัดสรรภาระงาน

จาก Cloud Shell

gcloud compute addresses create producer-psc-ip \
  --region $region \
  --subnet producer-psc-fr-subnet \
  --addresses 10.0.2.66

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

จาก Cloud Shell

gcloud compute forwarding-rules create psc-service-fr \
  --region=$region \
  --load-balancing-scheme=internal \
  --network=producer-vpc \
  --subnet=producer-psc-fr-subnet \
  --address=producer-psc-ip \
  --ip-protocol=TCP \
  --ports=80 \
  --backend-service=producer-bes \
  --backend-service-region=$region

ซับเน็ต psc-nat-th จะเชื่อมโยงกับไฟล์แนบบริการ PSC เพื่อวัตถุประสงค์ในการแปลที่อยู่เครือข่าย สำหรับกรณีการใช้งานเวอร์ชันที่ใช้งานจริง ซับเน็ตนี้ต้องมีขนาดที่เหมาะสมเพื่อรองรับจำนวนปลายทางที่ต่อเชื่อม ดูข้อมูลเพิ่มเติมในเอกสารประกอบเกี่ยวกับขนาดซับเน็ตของ PSC NAT

จาก Cloud Shell

gcloud compute networks subnets create psc-nat-subnet \
    --network=producer-vpc \
    --range=10.100.100.0/28 \
    --region=$region \
    --purpose=PRIVATE_SERVICE_CONNECT

เราต้องเพิ่มกฎไฟร์วอลล์ไปยังนโยบายไฟร์วอลล์ของเครือข่ายเพื่ออนุญาตการรับส่งข้อมูลจากซับเน็ต psc-nat-subnet แล้ว เมื่อเข้าถึงบริการผ่าน PSC ซับเน็ต psc-nat-ป้อนจะเป็นแหล่งที่มาของการเข้าชม

จาก Cloud Shell

gcloud compute network-firewall-policies rules create 2001 \
    --action ALLOW \
    --firewall-policy producer-vpc-policy \
    --description "allow PSC NAT subnet" \
    --direction INGRESS \
    --src-ip-ranges 10.100.100.0/28 \
    --layer4-configs tcp:80  \
    --global-firewall-policy

สร้างไฟล์แนบบริการและบันทึก URI ของไฟล์แนบของบริการเพื่อกำหนดค่าปลายทาง PSC ในส่วนถัดไป

จาก Cloud Shell

gcloud compute service-attachments create producer-sa \
    --region=$region \
    --producer-forwarding-rule=psc-service-fr  \
    --connection-preference=ACCEPT_MANUAL \
    --consumer-accept-list=$projectid=5 \
    --nat-subnets=psc-nat-subnet

จาก Cloud Shell

gcloud compute service-attachments describe producer-sa --region=$region

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

connectionPreference: ACCEPT_MANUAL
consumerAcceptLists:
- connectionLimit: 5
  projectIdOrNum: $projectid
creationTimestamp: '2025-04-24T11:23:09.886-07:00'
description: ''
enableProxyProtocol: false
fingerprint: xxx
id: 'xxx'
kind: compute#serviceAttachment
name: producer-sa
natSubnets:
- https://www.googleapis.com/compute/v1/projects/$projectid/regions/$region/subnetworks/psc-nat-subnet
pscServiceAttachmentId:
  high: 'xxx'
  low: 'xxx'
reconcileConnections: false
region: https://www.googleapis.com/compute/v1/projects/$projectid/regions/$region
selfLink: https://www.googleapis.com/compute/v1/projects/$projectid/regions/$region/serviceAttachments/producer-sa
targetService: https://www.googleapis.com/compute/v1/projects/$projectid/regions/$region/forwardingRules/psc-service-fr

12. เชื่อมต่อปลายทาง PSC ของผู้บริโภค "ทดสอบ" กับบริการและการทดสอบของ Producer (กิจกรรมของผู้บริโภค)

ขณะนี้สถาปัตยกรรมอยู่ในสถานะ 2

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

สร้างปลายทาง PSC

จาก Cloud Shell

gcloud compute addresses create test-psc-endpoint-ip \
    --region=$region \
    --subnet=consumer-vm-subnet \
    --addresses 10.0.1.3

บริการเป้าหมายด้านล่างจะเป็น URI ของไฟล์แนบบริการที่คุณระบุในขั้นตอนสุดท้าย

จาก Cloud Shell

gcloud compute forwarding-rules create test-psc-endpoint \
  --region=$region \
  --network=consumer-vpc \
  --address=test-psc-endpoint-ip \
  --target-service-attachment=projects/$projectid/regions/$region/serviceAttachments/producer-sa

ทดสอบปลายทาง PSC "ทดสอบ"

จาก Cloud Shell

gcloud compute ssh \
    --zone "$zone" "consumer-client" \
    --tunnel-through-iap \
    --project $projectid

จากผู้บริโภค-ลูกค้า

curl 10.0.1.3

เอาต์พุตที่คาดหวัง

I am a Producer Service. 

จากผู้บริโภค-ลูกค้า

exit

13. ย้ายข้อมูลซับเน็ตของกฎการส่งต่อผู้ผลิตที่มีอยู่

การทำตามขั้นตอนเหล่านี้จะทำให้บริการ Producer ที่ใช้การเพียร์ VPC แบบสดหยุดทำงาน ตอนนี้เราจะย้ายซับเน็ตของกฎการส่งต่อจาก manufacturers-vpc ไปยัง Consumer-vpc โดยใช้ internal Ranges API ซึ่งจะล็อกไม่ให้มีการใช้ซับเน็ตในช่วงเวลาระหว่างที่เราลบซับเน็ตใน Producer-vpc นี้ และจะกำหนดให้ใช้ในการย้ายข้อมูลเพื่อสร้างใน Consumer-vpc เท่านั้น

API ช่วงภายในกำหนดให้คุณต้องจองซับเน็ตของกฎการส่งต่อการเพียร์ VPC ที่มีอยู่ (manufacturers-fr-subnet, 192.168.0.0/28) และตั้งชื่อซับเน็ตเป้าหมายใน consumer-vpc (consumer-psc-subnet) เราจะสร้างเครือข่ายย่อยใหม่ใน VPC ของผู้บริโภคด้วยชื่อนี้ในไม่กี่ขั้นตอน

จองซับเน็ตของผู้ผลิตเพื่อการย้ายข้อมูล

กิจกรรมของผู้ผลิต

จาก Cloud Shell

gcloud network-connectivity internal-ranges create producer-peering-internal-range \
    --ip-cidr-range=192.168.0.0/28 \
    --network=producer-vpc \
    --usage=FOR_MIGRATION \
    --migration-source=projects/$projectid/regions/$region/subnetworks/producer-fr-subnet \
    --migration-target=projects/$projectid/regions/$region/subnetworks/consumer-psc-subnet

เรียกใช้คำอธิบายสำหรับช่วงภายในที่เราสร้างขึ้นเพื่อดูสถานะของซับเน็ต

กิจกรรมของผู้ผลิต

จาก Cloud Shell

gcloud network-connectivity internal-ranges describe producer-peering-internal-range

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

createTime: '2025-04-24T19:26:10.589343291Z'
ipCidrRange: 192.168.0.0/28
migration:
  source: projects/$projectid/regions/$region/subnetworks/producer-fr-subnet
  target: projects/$projectid/regions/$region/subnetworks/consumer-psc-subnet
name: projects/$projectid/locations/global/internalRanges/producer-peering-internal-range
network: https://www.googleapis.com/compute/v1/projects/$project/global/networks/producer-vpc
peering: FOR_SELF
updateTime: '2025-04-24T19:26:11.521960016Z'
usage: FOR_MIGRATION

ลบกฎการส่งต่อที่ใช้การเพียร์ VPC และซับเน็ต

กิจกรรมของผู้ผลิต

จาก Cloud Shell

gcloud compute forwarding-rules delete producer-fr --region=$region

gcloud compute addresses delete producer-fr-ip --region=$region

gcloud compute networks subnets delete producer-fr-subnet --region=$region

ย้ายข้อมูลซับเน็ต

ย้ายข้อมูลซับเน็ตไปยัง VPC ของผู้บริโภคโดยการสร้างซับเน็ตใหม่โดยใช้ช่วงภายในที่เราสร้างไว้ก่อนหน้านี้ ชื่อของซับเน็ตนี้ต้องเป็นชื่อเดียวกับที่เรากำหนดเป้าหมายไว้ก่อนหน้านี้ (consumer-psc-subnet) วัตถุประสงค์เฉพาะของ PEER_MIGRATION โปรดทราบว่าซับเน็ตสงวนไว้สำหรับการย้ายข้อมูลซับเน็ตระหว่าง VPC ที่มีการเชื่อมต่อแบบเพียร์ แฟล็กสำหรับวัตถุประสงค์นี้ทำให้ซับเน็ตนี้มีได้เฉพาะที่อยู่ IP แบบคงที่และปลายทาง PSC ที่สงวนไว้เท่านั้น

กิจกรรมของผู้บริโภค

จาก Cloud Shell

gcloud compute networks subnets create consumer-psc-subnet \
  --purpose=PEER_MIGRATION \
  --network=consumer-vpc \
  --range=192.168.0.0/28 \
  --region=$region

14. สร้างปลายทาง PSC ของสถานะปลายทาง (กิจกรรมของผู้บริโภค)

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

จาก Cloud Shell

gcloud compute instances create test-consumer-vm \
    --zone=$zone \
    --subnet=consumer-psc-subnet \
    --no-address

เอาต์พุตที่คาดหวัง

ERROR: (gcloud.compute.instances.create) Could not fetch resource:
 - Subnetwork must have purpose=PRIVATE.

เราใช้ซับเน็ตนี้เพื่อสร้างปลายทาง PSC ได้เท่านั้น โปรดทราบว่าที่อยู่ IP ที่เราสร้างจะใช้ IP เดียวกับกฎการส่งต่อที่บริการของผู้ผลิตใช้ผ่านเพียร์ VPC

จาก Cloud Shell

gcloud compute addresses create psc-endpoint-ip \
    --region=$region \
    --subnet=consumer-psc-subnet \
    --addresses 192.168.0.2

ขอย้ำอีกครั้งว่า คุณต้องใช้ URI ของไฟล์แนบบริการเดิมที่จดไว้ก่อนหน้า และที่ใช้สร้างปลายทาง PSC "ทดสอบ" ด้วยเช่นกัน

จาก Cloud Shell

gcloud compute forwarding-rules create psc-endpoint \
    --region=$region \
    --network=consumer-vpc \
    --address=psc-endpoint-ip \
    --target-service-attachment=projects/$projectid/regions/$region/serviceAttachments/producer-sa

15. ทดสอบปลายทาง PSC ของสถานะปลายทาง (กิจกรรมของผู้บริโภค)

ตอนนี้คุณอยู่ที่สถาปัตยกรรม State 3

จาก Cloud Shell

gcloud compute ssh \
    --zone "$zone" "consumer-client" \
    --tunnel-through-iap \
    --project $projectid

จาก VM ของผู้บริโภคและไคลเอ็นต์

curl service.example.com

เอาต์พุตที่คาดหวัง

I am a Producer Service. 

จาก VM ของผู้บริโภคและไคลเอ็นต์

exit

ในขั้นนี้ การหยุดให้บริการได้สิ้นสุดลงแล้ว และระบบจะกลับมาให้บริการอีกครั้ง โปรดทราบว่าเราไม่จำเป็นต้องทำการเปลี่ยนแปลงใดๆ กับ DNS ที่มีอยู่ โดยที่ไม่ต้องทำการเปลี่ยนแปลงไคลเอ็นต์ฝั่งผู้บริโภค แอปพลิเคชันจะทำงานต่อกับบริการที่ย้ายข้อมูลมาได้

16. การล้างข้อมูลการย้ายข้อมูล

เรามีขั้นตอนการล้างข้อมูล 2-3 รายการที่ต้องดำเนินการเพื่อให้การย้ายข้อมูลเสร็จสมบูรณ์ เราต้องลบและปลดล็อกทรัพยากร

ปลดล็อกซับเน็ตของช่วงภายใน

การดำเนินการนี้จะปลดล็อกซับเน็ตที่ย้ายข้อมูลแล้ว เพื่อเปลี่ยนวัตถุประสงค์จาก "PEER_MIGRATION" เป็น "PRIVATE"

กิจกรรมของผู้ผลิต

จาก Cloud Shell

gcloud network-connectivity internal-ranges delete producer-peering-internal-range

กิจกรรมของผู้บริโภค

จาก Cloud Shell

gcloud compute networks subnets update consumer-psc-subnet \
    --region=$region \
    --purpose=PRIVATE

gcloud compute networks subnets describe consumer-psc-subnet --region=$region

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

creationTimestamp: '2025-04-24T12:29:33.883-07:00'
fingerprint: xxx
gatewayAddress: 192.168.0.1
id: 'xxx'
ipCidrRange: 192.168.0.0/28
kind: compute#subnetwork
name: consumer-psc-subnet
network: https://www.googleapis.com/compute/v1/projects/$projectid/global/networks/consumer-vpc
privateIpGoogleAccess: false
privateIpv6GoogleAccess: DISABLE_GOOGLE_ACCESS
purpose: PRIVATE
region: https://www.googleapis.com/compute/v1/projects/$projectid/regions/$region
selfLink: https://www.googleapis.com/compute/v1/projects/$projectid/regions/$region/subnetworks/consumer-psc-subnet

ลบเพียร์ VPC

กิจกรรมของผู้ผลิต

จาก Cloud Shell

gcloud compute networks peerings delete producer-vpc-peering \
    --network=producer-vpc

กิจกรรมของผู้บริโภค

จาก Cloud Shell

gcloud compute networks peerings delete consumer-vpc-peering \
        --network=consumer-vpc

ลบปลายทาง PSC "ทดสอบ"

กิจกรรมผู้บริโภค

จาก Cloud Shell

gcloud compute forwarding-rules delete test-psc-endpoint --region=$region
gcloud compute addresses delete test-psc-endpoint-ip --region=$region

17. การทดสอบครั้งสุดท้ายหลังจากล้างข้อมูลการย้ายข้อมูล (กิจกรรมของผู้บริโภค)

ในขณะนี้ สถาปัตยกรรม State 4 (สถานะสุดท้าย) ได้รับความสำเร็จแล้ว

ทดสอบการเชื่อมต่อปลายทาง PSC อีกครั้งเพื่อให้แน่ใจว่าไม่มีปัญหาที่ไม่พึงประสงค์จากการล้างข้อมูลการย้ายข้อมูล

จาก Cloud Shell

gcloud compute ssh \
    --zone "$zone" "consumer-client" \
    --tunnel-through-iap \
    --project $projectid

จาก VM ของผู้บริโภคและไคลเอ็นต์

curl service.example.com

เอาต์พุตที่คาดหวัง

I am a Producer Service. 

จาก VM ของผู้บริโภคและไคลเอ็นต์

exit

สำเร็จ!

18. ขั้นตอนการทำความสะอาด

จาก Cloud Shell

gcloud compute forwarding-rules delete psc-endpoint --region=$region -q

gcloud compute addresses delete psc-endpoint-ip --region=$region -q

gcloud compute instances delete consumer-client --zone=$zone --project=$projectid -q

gcloud dns record-sets delete service.example.com --zone="producer-service" --type=A -q

gcloud dns managed-zones delete "producer-service" -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=network-consumer-vpc --global-firewall-policy -q

gcloud compute network-firewall-policies delete consumer-vpc-policy --global -q

gcloud compute networks subnets delete consumer-psc-subnet --region=$region -q

gcloud compute networks subnets delete consumer-vm-subnet --region=$region -q

gcloud compute networks delete consumer-vpc -q

gcloud compute service-attachments delete producer-sa --region=$region -q

gcloud compute forwarding-rules delete psc-service-fr --region=$region -q

gcloud compute addresses delete producer-psc-ip --region=$region -q

gcloud compute backend-services delete producer-bes --region=$region -q

gcloud compute health-checks delete producer-hc --region=$region -q

gcloud compute instance-groups unmanaged delete prod-uig --zone=$zone -q

gcloud compute instances delete producer-service-vm --zone=$zone --project=$projectid -q

gcloud compute network-firewall-policies rules delete 3000 --firewall-policy producer-vpc-policy --global-firewall-policy -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=network-producer-vpc --global-firewall-policy -q

gcloud compute network-firewall-policies delete producer-vpc-policy --global -q

gcloud compute routers nats delete $region-nat --router=$region-cr --region=$region -q

gcloud compute routers delete $region-cr --region=$region -q

gcloud compute networks subnets delete psc-nat-subnet --region=$region -q

gcloud compute networks subnets delete producer-psc-fr-subnet --region=$region -q

gcloud compute networks subnets delete producer-service-subnet --region=$region -q

gcloud compute networks delete producer-vpc -q

19. ยินดีด้วย

ขอแสดงความยินดีที่ทํา Codelab จนเสร็จสมบูรณ์

สิ่งที่เราได้พูดถึง

  • วิธีตั้งค่าบริการที่ใช้การเพียร์ VPC
  • วิธีตั้งค่าบริการตาม PSC
  • การใช้ Internal-Ranges API เพื่อดำเนินการย้ายข้อมูลซับเน็ตผ่านการเพียร์ VPC เพื่อให้มีการย้ายข้อมูลบริการการเพียร์ VPC ไปยัง PSC
  • การทำความเข้าใจเมื่อต้องเกิดช่วงพักสำหรับการย้ายข้อมูลบริการ
  • ขั้นตอนการล้างข้อมูลการย้ายข้อมูล