1. บทนำ
การเพียร์ 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 สถานะ
สถานะ 1 คือสถานะการเพียร์ VPC VPC จะมี 2 รายการ ได้แก่ Consumer-vpc และ Producer-vpc ที่จะมีการเพียร์ร่วมกัน Producer-vpc จะมีบริการ Apache แบบง่ายที่เปิดเผยผ่านตัวจัดสรรภาระงานเครือข่าย Passthrough ภายใน Consumer-vpc จะมี Consumer-Vm เดี่ยวสำหรับวัตถุประสงค์ในการทดสอบ
สถานะ 2 คือสถานะทดสอบของ PSC เราจะสร้างกฎการส่งต่อใหม่และใช้กฎนี้เพื่อเชื่อมโยงกับไฟล์แนบบริการของเรา จากนั้นเราจะสร้างปลายทาง PSC สำหรับการทดสอบใน Consumer-vpc เพื่อทดสอบว่าบริการ PSC ของเราทำงานตามที่คาดหมาย
สถานะ 3 คือสถานะการย้ายข้อมูล เราจะจองช่วงซับเน็ตใน manufacturers-vpc ที่มีการทำให้บริการที่มีการเพียร์ VPC ใช้งานได้เพื่อใช้ใน Consumer-vpc จากนั้นเราจะสร้างปลายทาง PSC ใหม่ด้วยที่อยู่ IP เดียวกันกับกฎการส่งต่อที่มีอยู่แล้วใน manufacturers-vpc
สถานะ 4 คือสถานะ PSC สุดท้าย เราจะล้างปลายทาง PSC ของการทดสอบและลบการเพียร์ VPC ระหว่าง Consumer-vpc และ Producer-vpc
3. การตั้งค่าและข้อกําหนด
การตั้งค่าสภาพแวดล้อมด้วยตนเอง
- ลงชื่อเข้าใช้ Google Cloud Console และสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ หากยังไม่มีบัญชี Gmail หรือ Google Workspace คุณต้องสร้างบัญชี
- ชื่อโปรเจ็กต์คือชื่อที่แสดงสำหรับผู้เข้าร่วมโปรเจ็กต์นี้ ซึ่งเป็นสตริงอักขระที่ Google APIs ไม่ได้ใช้ คุณจะอัปเดตได้ทุกเมื่อ
- รหัสโปรเจ็กต์จะซ้ำกันไม่ได้ในโปรเจ็กต์ Google Cloud ทั้งหมดและจะเปลี่ยนแปลงไม่ได้ (เปลี่ยนแปลงไม่ได้หลังจากตั้งค่าแล้ว) คอนโซล Cloud จะสร้างสตริงที่ไม่ซ้ำกันโดยอัตโนมัติ ซึ่งปกติแล้วคุณไม่จำเป็นต้องสนใจว่าสตริงนั้นจะเป็นอะไร ในโค้ดแล็บส่วนใหญ่ คุณจะต้องอ้างอิงรหัสโปรเจ็กต์ (ปกติจะระบุเป็น
PROJECT_ID
) หากไม่ชอบรหัสที่สร้างขึ้น คุณอาจสร้างรหัสอื่นแบบสุ่มได้ หรือจะลองใช้อุปกรณ์ของคุณเองเพื่อดูว่าอุปกรณ์พร้อมใช้งานหรือไม่ก็ได้ คุณจะเปลี่ยนแปลงชื่อหลังจากขั้นตอนนี้ไม่ได้ และชื่อดังกล่าวจะคงอยู่ตลอดระยะเวลาของโปรเจ็กต์ - โปรดทราบว่ามีค่าที่ 3 ซึ่งเป็นหมายเลขโปรเจ็กต์ที่ API บางรายการใช้ ดูข้อมูลเพิ่มเติมเกี่ยวกับค่าทั้ง 3 รายการนี้ได้ในเอกสารประกอบ
- ถัดไป คุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร/API ของ Cloud การทำตามโค้ดแล็บนี้จะไม่เสียค่าใช้จ่ายมากนัก หรืออาจไม่เสียค่าใช้จ่ายเลย หากต้องการปิดทรัพยากรเพื่อหลีกเลี่ยงการเรียกเก็บเงินหลังจากบทแนะนำนี้ คุณลบทรัพยากรที่สร้างไว้หรือลบโปรเจ็กต์ได้ ผู้ใช้ Google Cloud รายใหม่มีสิทธิ์เข้าร่วมโปรแกรมช่วงทดลองใช้ฟรีมูลค่า$300 USD
เริ่ม Cloud Shell
แม้ว่า Google Cloud จะทำงานจากระยะไกลจากแล็ปท็อปได้ แต่ในโค้ดแล็บนี้ คุณจะใช้ Google Cloud Shell ซึ่งเป็นสภาพแวดล้อมบรรทัดคำสั่งที่ทำงานในระบบคลาวด์
จาก Google Cloud Console ให้คลิกไอคอน Cloud Shell ในแถบเครื่องมือด้านขวาบน
การจัดสรรและเชื่อมต่อกับสภาพแวดล้อมจะใช้เวลาเพียงไม่กี่นาที เมื่อดำเนินการเสร็จแล้ว คุณควรเห็นข้อมูลดังต่อไปนี้
เครื่องเสมือนนี้โหลดเครื่องมือการพัฒนาทั้งหมดที่คุณต้องการ ซึ่งจะมีไดเรกทอรีหลักขนาด 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
- การทำความเข้าใจเมื่อต้องเกิดช่วงพักสำหรับการย้ายข้อมูลบริการ
- ขั้นตอนการล้างข้อมูลการย้ายข้อมูล