Codelab เกี่ยวกับการเปลี่ยนแปลงได้ของ Private Service Connect

1. บทนำ

Private Service Connect เป็นความสามารถของเครือข่าย Google Cloud ที่ช่วยให้ผู้ใช้เข้าถึงบริการที่มีการจัดการแบบส่วนตัวจากภายในเครือข่าย VPC ของตนได้ ในทำนองเดียวกัน ก็ช่วยให้ผู้ให้บริการที่มีการจัดการโฮสต์บริการเหล่านี้ในเครือข่าย VPC ของตนเองแยกต่างหาก และเสนอการเชื่อมต่อส่วนตัวแก่ผู้บริโภคได้

จนถึงตอนนี้ เมื่อมีการเปิดเผยบริการ PSC ผ่านการเชื่อมต่อบริการแล้ว คุณจะทำการเปลี่ยนแปลงในตัวจัดสรรภาระงานของบริการไม่ได้โดยไม่ต้องนำการเชื่อมต่อบริการออกและขัดขวางการเชื่อมต่อปลายทาง PSC ของผู้ใช้ การเปิดตัวความสามารถในการเปลี่ยนแปลงของ PSC ช่วยให้ผู้ผลิตอัปเดตตัวจัดสรรภาระงานได้ในขณะที่ยังคงการเชื่อมต่อปลายทาง PSC ไว้ การรักษาการเชื่อมต่อปลายทาง PSC กับการเชื่อมต่อบริการขณะเปลี่ยน Load Balancer มีข้อดีคือไม่จำเป็นต้องดำเนินการใดๆ ในฝั่งผู้ใช้

ขณะนี้ความสามารถในการเปลี่ยนแปลงของ PSC จะรองรับ

  • การย้ายข้อมูลไปยังกฎการส่งต่อของตัวจัดสรรภาระงานประเภทเดียวกัน (เช่น Network Passthrough ไปยัง Network Passthrough)
  • การย้ายข้อมูลไปยังกฎการส่งต่อของตัวจัดสรรภาระงานประเภทอื่น (เช่น การส่งผ่านเครือข่ายไปยังตัวจัดสรรภาระงานแอปพลิเคชัน)

ความเปลี่ยนแปลงของ PSC ไม่รองรับการแก้ไขกฎการส่งต่อในตำแหน่ง

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

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

  • สร้างเว็บเซอร์วิส Apache แบบง่ายที่แสดงเป็นบริการผู้ผลิต PSC
  • สร้างปลายทาง PSC
  • สร้างโซนส่วนตัวของ Cloud DNS สำหรับการเรียกใช้บริการของผู้บริโภค
  • อัปเดตกฎการส่งต่อที่เชื่อมโยงกับการเชื่อมต่อบริการโดยใช้ความสามารถในการเปลี่ยนแปลงของ PSC

สิ่งที่คุณต้องมี

  • โปรเจ็กต์ Google Cloud ที่มีสิทธิ์เจ้าของ
  • ความรู้พื้นฐานเกี่ยวกับเครือข่าย Google Cloud

2. สภาพแวดล้อมการทดสอบ

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

สำหรับแล็บนี้ เราจะเริ่มต้นด้วยการสร้าง producer-vpc ที่มี 3 ซับเน็ต ได้แก่ ซับเน็ตสำหรับโฮสต์บริการผู้ผลิตและ VM ทดสอบ ซับเน็ตสำหรับกฎการส่งต่อของตัวจัดสรรภาระ และซับเน็ต NAT ของ PSC เราจะต้องใช้ Cloud Router และ Cloud NAT เพื่อให้เข้าถึงอินเทอร์เน็ตได้เพื่อดาวน์โหลดแพ็กเกจ Linux เราจะเปิดเผยบริการ Apache ที่กำหนดค่าผ่านกลุ่มอินสแตนซ์ที่ไม่มีการจัดการผ่านตัวจัดสรรภาระงาน Network Passthrough ภายในระดับภูมิภาค และเชื่อมโยงกฎการส่งต่อกับ Service Attachment

ในฝั่งผู้ใช้ เราจะสร้าง consumer-vpc ที่มีซับเน็ตเดียวเพื่อโฮสต์ปลายทาง PSC และ VM ไคลเอ็นต์ทดสอบ เราจะกำหนดค่าโซนส่วนตัวของ Cloud DNS เพื่อเข้าถึงบริการผ่านชื่อโฮสต์

เราจะเพิ่มซับเน็ตอีก 2 รายการในฝั่งผู้ให้บริการเพื่อแสดงฟีเจอร์ความเปลี่ยนแปลงของ PSC โดยซับเน็ตหนึ่งจะโฮสต์ VM ของบริการใหม่ และอีกซับเน็ตหนึ่งจะใช้สำหรับซับเน็ตเฉพาะพร็อกซีของตัวจัดสรรภาระงาน เราจะสร้าง VM ใหม่ที่โฮสต์เว็บเซิร์ฟเวอร์ Apache ซึ่งกำหนดค่าผ่านกลุ่มอินสแตนซ์ที่ไม่มีการจัดการอีกครั้ง และเปิดเผยผ่าน Application Load Balancer ภายในระดับภูมิภาคใหม่ เราจะอัปเดตการเชื่อมต่อบริการให้ชี้ไปยังกฎการส่งต่อใหม่ และทดสอบว่าการเชื่อมต่อฝั่งผู้บริโภคยังคงอยู่

683e2b440a0cc07f.png

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

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

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

295004821bab6a87.png

37d264871000675d.png

96d86d3d5655cdbe.png

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

เริ่มต้น Cloud Shell

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

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

เปิดใช้งาน Cloud Shell

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

ภาพหน้าจอของเทอร์มินัล Google Cloud Shell ที่แสดงว่าสภาพแวดล้อมเชื่อมต่อแล้ว

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

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

เปิดใช้ API

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

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
export project=[YOUR-PROJECT-NAME]
export region=us-central1
export zone=$region-a
echo $project
echo $region
echo $zone

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

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

5. สร้างเครือข่ายผู้ผลิต [โปรเจ็กต์ Producer]

สร้างเครือข่าย VPC

จาก Cloud Shell

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

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

เราจะเริ่มด้วยการติดตั้งใช้งาน 3 เครือข่ายย่อยใน producer-vpc โดยจะใช้ 1 รายการสำหรับการติดตั้งใช้งานบริการผู้ผลิต 1 รายการสำหรับกฎการส่งต่อของตัวโหลดบาลานซ์ และ 1 รายการที่จะเชื่อมโยงกับไฟล์แนบบริการ PSC สำหรับเครือข่ายย่อย NAT ของ PSC

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

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

สร้าง Cloud NAT

คุณต้องมี Cloud NAT เพื่อติดตั้งแพ็กเกจที่เหมาะสมสำหรับบริการของผู้ผลิต

จาก Cloud Shell

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

จาก Cloud Shell

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

เราจะเริ่มด้วยกฎไฟร์วอลล์ 3 ข้อ โดยจะใช้พอร์ตหนึ่งเพื่ออนุญาตการเข้าถึง VM สำหรับการตรวจสอบสถานะของตัวโหลดบาลานซ์ (2000), พอร์ตหนึ่งเพื่ออนุญาตการเข้าถึง VM จากช่วง NAT ของ PSC (3000) และพอร์ตหนึ่งเพื่ออนุญาตการเชื่อมต่อระหว่าง VM ในเครือข่ายย่อยของบริการเพื่อวัตถุประสงค์ในการทดสอบ (4000) เราจะสร้างกฎทั้งหมดสำหรับพอร์ต 80 เนื่องจากเราจะใช้พอร์ตนี้สำหรับบริการของเรา

จาก 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 PSC NAT subnet" \
    --direction INGRESS \
    --src-ip-ranges 10.100.0.0/28 \
    --layer4-configs tcp:80  \
    --global-firewall-policy

 gcloud compute network-firewall-policies rules create 4000 \
    --action ALLOW \
    --firewall-policy producer-vpc-policy \
    --description "allow access between producer service VMs and testing client for testing purposes" \
    --direction INGRESS \
    --src-ip-ranges 10.0.0.0/28 \
    --layer4-configs tcp:80 \
    --global-firewall-policy

6. สร้างบริการของผู้ผลิต [โปรเจ็กต์ของผู้ผลิต]

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

สร้างอินสแตนซ์

จาก 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 producer-uig \
  --zone=$zone

เพิ่ม producer-service-vm ลงในกลุ่มอินสแตนซ์ที่ไม่มีการจัดการที่เราเพิ่งสร้าง

จาก Cloud Shell

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

สร้างคอมโพเนนต์ของตัวจัดสรรภาระงาน

สำหรับบริการของผู้ให้บริการเวอร์ชัน 1 เราจะแสดงบริการโดยใช้ตัวจัดสรรภาระงาน Network Passthrough ในพอร์ต 80

ติดตั้งใช้งานการตรวจสอบประสิทธิภาพการทำงานสำหรับพอร์ต 80

จาก Cloud Shell

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

ติดตั้งใช้งานบริการแบ็กเอนด์และเพิ่มแบ็กเอนด์ไปยังบริการแบ็กเอนด์

จาก Cloud Shell

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=producer-uig \
  --instance-group-zone=$zone

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

จาก Cloud Shell

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

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

จาก Cloud Shell

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. ทดสอบบริการผู้ผลิต [โปรเจ็กต์ผู้ผลิต]

สร้าง VM ทดสอบใน producer-service-subnet จากนั้นเข้าสู่ระบบ VM และทดสอบการเรียกใช้บริการ Apache

จาก Cloud Shell

 gcloud compute instances create producer-test-vm \
    --zone=$zone \
    --subnet=producer-service-subnet \
    --no-address

จาก Cloud Shell

gcloud compute ssh producer-test-vm \
    --zone=$zone \
    --command="curl -s 192.168.0.2/index.html"

ผลลัพธ์ที่คาดหวัง

I am a Producer Service.

8. เปิดเผยบริการของผู้ผลิตผ่านไฟล์แนบบริการ [โปรเจ็กต์ของผู้ผลิต]

สร้างไฟล์แนบบริการ เชื่อมโยงกับกฎการส่งต่อที่เราสร้างขึ้นโดยใช้ psc-nat-subnet

จาก Cloud Shell

gcloud compute service-attachments create producer-attachment \
    --region=$region \
    --producer-forwarding-rule=producer-fr  \
    --connection-preference=ACCEPT_AUTOMATIC \
    --nat-subnets=psc-nat-subnet

คุณควรจด URI ของการเชื่อมต่อบริการ (selfLink) ไว้ เนื่องจากคุณจะต้องใช้ในขั้นตอนถัดไปสำหรับการกำหนดค่าปลายทาง PSC คุณจะรับได้โดยการเรียกใช้คำสั่งต่อไปนี้ใน Cloud Shell

จาก Cloud Shell

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

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

connectionPreference: ACCEPT_AUTOMATIC
creationTimestamp: '2026-02-10T07:50:04.250-08:00'
description: ''
enableProxyProtocol: false
fingerprint: xxx
id: 'xxx'
kind: compute#serviceAttachment
name: producer-attachment
natSubnets:
- https://www.googleapis.com/compute/v1/projects/$project/regions/$region/subnetworks/psc-nat-subnet
pscServiceAttachmentId:
  high: 'xxx'
  low: 'xxx'
reconcileConnections: false
region: https://www.googleapis.com/compute/v1/projects/$project/regions/$region
selfLink: https://www.googleapis.com/compute/v1/projects/$project/regions/$region/serviceAttachments/producer-attachment
targetService: https://www.googleapis.com/compute/v1/projects/$project/regions/$region/forwardingRules/producer-fr

คัดลอก URI โดยเริ่มจาก projects

ตัวอย่าง: projects/$project/regions/$region/serviceAttachments/producer-attachment

9. สร้างเครือข่ายผู้บริโภค [โปรเจ็กต์ผู้บริโภค]

สร้างเครือข่าย VPC

จาก Cloud Shell

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

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

ระบบจะติดตั้งใช้งานเครือข่ายย่อยเดียวซึ่งเราจะติดตั้งใช้งานปลายทาง PSC และ VM ไคลเอ็นต์ทดสอบ

จาก Cloud Shell

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

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

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

นอกจากนี้ เราจะกำหนดค่า consumer-vpc ให้ใช้ IAP สำหรับ SSH ด้วย

จาก Cloud Shell

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

10. สร้างปลายทาง Private Service Connect [โปรเจ็กต์ผู้บริโภค]

สำรองที่อยู่ IP แบบคงที่จะใช้สำหรับปลายทาง PSC

จาก Cloud Shell

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

สร้างปลายทาง PSC โดยใช้ที่อยู่ IP แบบคงที่ที่สงวนไว้และ URI ของไฟล์แนบบริการที่เราจดไว้ก่อนหน้านี้

จาก Cloud Shell

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

11. กำหนดค่าโซน DNS ส่วนตัวสำหรับปลายทาง PSC [โปรเจ็กต์ผู้ใช้]

เราจะใช้ Cloud DNS เพื่อกำหนดค่าโซน DNS ส่วนตัวที่มีชื่อ DNS myservice.com เพื่อใช้กับปลายทาง PSC

จาก Cloud Shell

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

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

สร้างระเบียน A สำหรับ myservice.com และชี้ไปยังที่อยู่ IP ของปลายทาง PSC

จาก Cloud Shell

gcloud dns record-sets transaction add 10.0.0.2 \
   --name=myservice.com \
   --ttl=300 \
   --type=A \
   --zone="consumer-service"

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

12. ทดสอบปลายทาง PSC [โปรเจ็กต์ผู้บริโภค]

สร้าง VM ไคลเอ็นต์

จาก Cloud Shell

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

ทดสอบการเชื่อมต่อปลายทาง PSC

จาก Cloud Shell

gcloud compute ssh consumer-client-vm \
    --zone=$zone \
    --command="curl -s myservice.com/index.html"

ผลลัพธ์ที่คาดหวัง

I am a Producer Service.

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

13. สร้างบริการของผู้ผลิตที่อัปเดตแล้ว [โปรเจ็กต์ของผู้ผลิต]

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

อัปเดตเครือข่าย

สร้างซับเน็ตใหม่ที่จะใช้สำหรับซับเน็ตเฉพาะพร็อกซีสำหรับ Application Load Balancer

จาก Cloud Shell

gcloud compute networks subnets create lb-proxy-subnet \
    --network=producer-vpc \
    --range=10.200.0.0/24 \
    --region=$region \
    --purpose=REGIONAL_MANAGED_PROXY \
    --role=ACTIVE

สร้างเครือข่ายย่อยใหม่ที่จะโฮสต์บริการใหม่ของเรา

จาก Cloud Shell

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

สร้างกฎไฟร์วอลล์ใหม่ที่จะอนุญาตการเชื่อมต่อกับบริการผู้ผลิตใหม่จากซับเน็ตเฉพาะพร็อกซี

จาก Cloud Shell

 gcloud compute network-firewall-policies rules create 3001 \
    --action ALLOW \
    --firewall-policy producer-vpc-policy \
    --description "allow access from proxy only subnet" \
    --direction INGRESS \
    --src-ip-ranges 10.200.0.0/24 \
    --layer4-configs tcp:80  \
    --global-firewall-policy

สร้างอินสแตนซ์

จาก Cloud Shell

gcloud compute instances create new-producer-service-vm \
    --network producer-vpc \
    --subnet producer-service-new-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 NEW Producer Service." | \
    tee /var/www/html/index.html
    systemctl restart apache2'

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

จาก Cloud Shell

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

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

gcloud compute instance-groups unmanaged set-named-ports producer-new-uig \
    --named-ports=http:80 \
    --zone=$zone

สร้างคอมโพเนนต์ตัวจัดสรรภาระงานใหม่

สร้างบริการแบ็กเอนด์ โปรดทราบว่าเราใช้รูปแบบการจัดสรรภาระงาน INTERNAL_MANAGED เนื่องจากเรากำลังอัปเดตเป็นตัวจัดสรรภาระงานแอปพลิเคชันภายใน

จาก Cloud Shell

gcloud compute backend-services create producer-new-bes \
  --load-balancing-scheme=INTERNAL_MANAGED \
  --protocol=http \
  --region=$region \
  --health-checks=producer-hc \
  --health-checks-region=$region

เพิ่มกลุ่มอินสแตนซ์ที่ไม่มีการจัดการเป็นแบ็กเอนด์ให้กับบริการแบ็กเอนด์

จาก Cloud Shell

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

สร้างแผนที่ URL และพร็อกซี HTTP เป้าหมาย

จาก Cloud Shell

gcloud compute url-maps create producer-url-map \
  --default-service=producer-new-bes \
  --region=$region

gcloud compute target-http-proxies create http-proxy \
  --url-map=producer-url-map \
  --region=$region

สร้างที่อยู่ IP แบบคงที่ที่เราจะใช้สำหรับกฎการส่งต่อ ซึ่งจะมาจากซับเน็ตเดียวกันกับที่เราใช้สำหรับกฎการส่งต่อเดิม

จาก Cloud Shell

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

สร้างกฎการส่งต่อ

จาก Cloud Shell

gcloud compute forwarding-rules create new-producer-fr \
  --load-balancing-scheme=INTERNAL_MANAGED \
  --network=producer-vpc \
  --subnet=producer-fr-subnet \
  --address=producer-fr-new-ip \
  --ports=80 \
  --region=$region \
  --target-http-proxy=http-proxy \
  --target-http-proxy-region=$region

14. ทดสอบบริการผู้ผลิตที่อัปเดตแล้ว [โปรเจ็กต์ผู้ผลิต]

เราจะใช้ VM สำหรับทดสอบตัวเดียวกันกับที่เราสร้างขึ้นเพื่อทดสอบบริการที่ติดตั้งใช้งานในตอนแรก

จาก Cloud Shell

gcloud compute ssh producer-test-vm \
    --zone=$zone \
    --command="curl -s 192.168.0.3/index.html"

โปรดทราบว่าเรากำลังเรียกที่อยู่ IP ที่อัปเดต 192.168.0.3 คือที่อยู่ IP สำหรับ Application Load Balancer ภายในระดับภูมิภาค

ผลลัพธ์ที่คาดหวัง

I am a NEW Producer Service.

15. อัปเดตไฟล์แนบบริการ [โปรเจ็กต์ผู้ผลิต]

หากต้องการเห็นภาพการอัปเดตกฎการส่งต่อ Service Attachment ได้ดียิ่งขึ้น เราสามารถเรียกใช้คำสั่ง describe ใน Service Attachment ก่อนและหลังการเปลี่ยนแปลงได้

จาก Cloud Shell

gcloud compute service-attachments describe producer-attachment \
    --region=$region \
    --format="value(targetService)"

ผลลัพธ์ที่คาดหวัง

https://www.googleapis.com/compute/v1/projects/$project/regions/$region/forwardingRules/producer-fr

อัปเดตไฟล์แนบบริการ

จาก Cloud Shell

gcloud compute service-attachments update producer-attachment \
  --region=$region \
  --target-service=projects/$project/regions/$region/forwardingRules/new-producer-fr

ตอนนี้ให้เรียกใช้ describe อีกครั้งเพื่อดูกฎการส่งต่อใหม่

จาก Cloud Shell

gcloud compute service-attachments describe producer-attachment \
    --region=$region \
    --format="value(targetService)"

ผลลัพธ์ที่คาดหวัง

https://www.googleapis.com/compute/v1/projects/$project/regions/$region/forwardingRules/new-producer-fr

16. ทดสอบการเชื่อมต่อ PSC ของผู้บริโภคอีกครั้ง [โปรเจ็กต์ของผู้บริโภค]

เข้าสู่ระบบไคลเอ็นต์ผู้บริโภคเดียวกัน

จาก Cloud Shell

gcloud compute ssh consumer-client-vm \
    --zone=$zone \
    --command="curl -s myservice.com/index.html"

ผลลัพธ์ที่คาดหวัง

 I am a NEW Producer Service.

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

17. ขั้นตอนการล้างข้อมูล [โปรเจ็กต์ของผู้บริโภค]

ลบคอมโพเนนต์ของ Lab จากเทอร์มินัล Cloud Shell เดียว

gcloud dns record-sets delete myservice.com --zone="consumer-service" --type=A -q

gcloud dns managed-zones delete "consumer-service" -q

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-vm --zone=$zone --project $project -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-subnet --region $region -q

gcloud compute networks delete consumer-vpc -q

18. ขั้นตอนการล้างข้อมูล [โปรเจ็กต์ของโปรดิวเซอร์]

ลบคอมโพเนนต์ของ Lab จากเทอร์มินัล Cloud Shell เดียว

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

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

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

gcloud compute addresses delete producer-fr-new-ip --region $region -q

gcloud compute target-http-proxies delete http-proxy --region $region -q

gcloud compute url-maps delete producer-url-map --region $region -q

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

gcloud compute instance-groups unmanaged delete producer-new-uig --zone $zone -q

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

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

gcloud compute networks subnets delete lb-proxy-subnet --region $region -q

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

gcloud compute addresses delete producer-fr-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 producer-uig --zone $zone -q

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

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

gcloud compute network-firewall-policies rules delete 3001 --firewall-policy producer-vpc-policy --global-firewall-policy -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 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-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 เสร็จสมบูรณ์

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

  • สร้างเว็บเซอร์วิส Apache แบบง่ายที่แสดงเป็นบริการผู้ผลิต PSC
  • สร้างปลายทาง PSC
  • สร้างโซนส่วนตัวของ Cloud DNS สำหรับการเรียกใช้บริการของผู้บริโภค
  • อัปเดตกฎการส่งต่อที่เชื่อมโยงกับการเชื่อมต่อบริการโดยใช้ความสามารถในการเปลี่ยนแปลงของ PSC