1. ภาพรวม
การจัดสรรพอร์ตแบบไดนามิก (DPA) เป็นฟีเจอร์ใหม่ใน Cloud NAT เมื่อเปิดใช้ DPA แล้ว Cloud NAT จะปรับขนาดการจัดสรรพอร์ตขึ้น/ลงแบบไดนามิกสำหรับอินสแตนซ์ตามความต้องการของอินสแตนซ์ DPA ได้รับการกำหนดค่าด้วยขีดจำกัดพอร์ตขั้นต่ำและสูงสุด เพื่อไม่ให้ลดขนาดพอร์ตต่ำกว่าขั้นต่ำ หรือเพิ่มขนาดเกินกว่าสูงสุด ซึ่งจะช่วยให้อินสแตนซ์บางรายการที่อยู่หลังเกตเวย์ NAT สามารถเพิ่มจำนวนการเชื่อมต่อแบบไดนามิกได้โดยไม่ต้องจัดสรรพอร์ตเพิ่มเติมให้กับอินสแตนซ์ทั้งหมดที่อยู่หลัง Cloud NAT
หากไม่มี DPA ระบบจะจัดสรรพอร์ตหมายเลขเดียวกันให้กับอินสแตนซ์ทั้งหมดที่อยู่หลัง Cloud NAT โดยไม่คำนึงถึงการใช้งาน ตามที่กำหนดโดยพารามิเตอร์ minPortsPerVm
ดูข้อมูลเพิ่มเติมได้ในส่วนเอกสารประกอบเกี่ยวกับ NAT DPA
สิ่งที่คุณจะได้เรียนรู้
- วิธีตั้งค่าเกตเวย์ Cloud NAT เพื่อเตรียมพร้อมสำหรับ DPA
- วิธีตรวจสอบการจัดสรรพอร์ตโดยไม่ต้องใช้ DPA
- วิธีเปิดใช้และกำหนดค่า DPA สำหรับเกตเวย์ NAT
- วิธีสังเกตผลกระทบของ DPA โดยการเรียกใช้การเชื่อมต่อขาออกแบบคู่ขนาน
- วิธีเพิ่มกฎ NAT ไปยังเกตเวย์ NAT ที่เปิดใช้ DPA
- วิธีดูลักษณะการทำงานของ DPA ที่มีกฎโดยการเรียกใช้การเชื่อมต่อขาออกไปยังปลายทางหลายแห่ง
สิ่งที่คุณต้องมี
- ความรู้พื้นฐานเกี่ยวกับ Google Compute Engine
- ความรู้พื้นฐานด้านเครือข่ายและ TCP/IP
- ความรู้พื้นฐานเกี่ยวกับบรรทัดคำสั่ง Unix/Linux
- การทัวร์เครือข่ายใน Google Cloud เช่น แล็บเครือข่ายใน Google Cloud จะช่วยให้คุณเข้าใจได้ดียิ่งขึ้น
- โปรเจ็กต์ Google Cloud ที่เปิดใช้ "การเข้าถึงเวอร์ชันอัลฟ่า"
- ความเข้าใจพื้นฐานของ Cloud NAT
2. การใช้ Google Cloud Console และ Cloud Shell
หากต้องการโต้ตอบกับ GCP เราจะใช้ทั้ง Google Cloud Console และ Cloud Shell ตลอดแล็บนี้
Google Cloud Console
คุณเข้าถึง Cloud Console ได้ที่ https://console.cloud.google.com

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



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

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

เครื่องเสมือนนี้มาพร้อมเครื่องมือพัฒนาซอฟต์แวร์ทั้งหมดที่คุณต้องการ โดยมีไดเรกทอรีหลักแบบถาวรขนาด 5 GB และทำงานบน Google Cloud ซึ่งช่วยเพิ่มประสิทธิภาพเครือข่ายและการตรวจสอบสิทธิ์ได้อย่างมาก คุณสามารถทำงานทั้งหมดในห้องทดลองนี้ได้โดยใช้เพียงเบราว์เซอร์
3. การตั้งค่าห้องทดลอง
สำหรับแล็บนี้ คุณจะใช้โปรเจ็กต์และสร้าง VPC 2 รายการที่มีซับเน็ตในแต่ละรายการ คุณจะจองที่อยู่ IP ภายนอก จากนั้นสร้างและกำหนดค่าเกตเวย์ Cloud NAT (พร้อม Cloud Router), อินสแตนซ์ผู้ผลิต 2 รายการ และอินสแตนซ์ผู้บริโภค 2 รายการ หลังจากตรวจสอบลักษณะการทำงานของ Cloud NAT เริ่มต้นแล้ว คุณจะเปิดใช้การจัดสรรพอร์ตแบบไดนามิกและตรวจสอบลักษณะการทำงาน สุดท้าย คุณจะต้องกำหนดค่านโยบาย NAT และสังเกตการโต้ตอบระหว่างนโยบาย DPA กับนโยบาย NAT
ภาพรวมสถาปัตยกรรมเครือข่าย

4. จองที่อยู่ IP ภายนอก
มาจองที่อยู่ IP ภายนอกทั้งหมดที่จะใช้ในแล็บนี้กัน ซึ่งจะช่วยให้คุณเขียนกฎ NAT และไฟร์วอลล์ที่เกี่ยวข้องทั้งหมดในทั้ง VPC ของผู้ใช้และผู้ผลิต
จาก Cloud Shell ให้ทำดังนี้
gcloud compute addresses create nat-address-1 nat-address-2 \ producer-address-1 producer-address-2 --region us-east4
เอาต์พุต:
Created [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/addresses/nat-address-1]. Created [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/addresses/nat-address-2]. Created [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/addresses/producer-address-1]. Created [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/addresses/producer-address-2].
ป้อนที่อยู่ IP ที่สงวนไว้เป็นตัวแปรสภาพแวดล้อม
export natip1=`gcloud compute addresses list --filter name:nat-address-1 --format="get(address)"` export natip2=`gcloud compute addresses list --filter name:nat-address-2 --format="get(address)"` export producerip1=`gcloud compute addresses list --filter name:producer-address-1 --format="get(address)"` export producerip2=`gcloud compute addresses list --filter name:producer-address-2 --format="get(address)"`
ไม่คาดหวังเอาต์พุต แต่เพื่อยืนยันว่ามีการป้อนที่อยู่อย่างถูกต้อง มาแสดงค่าของตัวแปรสภาพแวดล้อมทั้งหมดกัน
env | egrep '^(nat|producer)ip[1-3]'
เอาต์พุต:
producerip1=<Actual Producer IP 1> producerip2=<Actual Producer IP 2> natip1=<NAT IP 1> natip2=<NAT IP 2>
5. การตั้งค่า VPC และอินสแตนซ์ของผู้ผลิต
ตอนนี้เราจะสร้างแหล่งข้อมูลสำหรับแหล่งข้อมูลของโปรดิวเซอร์ อินสแตนซ์ที่ทำงานใน VPC ของผู้ผลิตจะให้บริการที่เชื่อมต่ออินเทอร์เน็ตโดยใช้ IP สาธารณะ 2 รายการ ได้แก่ "producer-address-1" และ "producer-address-2"
ก่อนอื่น มาสร้าง VPC กัน จาก Cloud Shell ให้ทำดังนี้
gcloud compute networks create producer-vpc --subnet-mode custom
เอาต์พุต:
Created [https://www.googleapis.com/compute/v1/projects/<Project-ID>/global/networks/producer-vpc]. NAME SUBNET_MODE BGP_ROUTING_MODE IPV4_RANGE GATEWAY_IPV4 producer-vpc CUSTOM REGIONAL Instances on this network will not be reachable until firewall rules are created. As an example, you can allow all internal traffic between instances as well as SSH, RDP, and ICMP by running: $ gcloud compute firewall-rules create <FIREWALL_NAME> --network producer-vpc --allow tcp,udp,icmp --source-ranges <IP_RANGE> $ gcloud compute firewall-rules create <FIREWALL_NAME> --network producer-vpc --allow tcp:22,tcp:3389,icmp
จากนั้นมาสร้างซับเน็ตใน us-east4 กัน จาก Cloud Shell ให้ทำดังนี้
gcloud compute networks subnets create prod-net-e4 \ --network producer-vpc --range 10.0.0.0/24 --region us-east4
เอาต์พุต:
Created [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/subnetworks/prod-net-e4]. NAME REGION NETWORK RANGE STACK_TYPE IPV6_ACCESS_TYPE IPV6_CIDR_RANGE EXTERNAL_IPV6_CIDR_RANGE prod-net-e4 us-east4 producer-vpc 10.0.0.0/24 IPV4_ONLY
จากนั้นมาสร้างกฎไฟร์วอลล์ VPC เพื่ออนุญาตให้ที่อยู่ IP ของ NAT เข้าถึงอินสแตนซ์ของโปรดิวเซอร์ในพอร์ต 8080 กัน
สำหรับกฎแรก ให้ทำดังนี้จาก Cloud Shell
gcloud compute firewall-rules create producer-allow-80 \ --network producer-vpc --allow tcp:80 \ --source-ranges $natip1,$natip2
เอาต์พุต:
Creating firewall...⠹Created [https://www.googleapis.com/compute/v1/projects/<Project ID>/global/firewalls/producer-allow-80]. Creating firewall...done. NAME NETWORK DIRECTION PRIORITY ALLOW DENY DISABLED producer-allow-80 producer-vpc INGRESS 1000 tcp:80 False
ขั้นตอนถัดไปคือการสร้างอินสแตนซ์ของโปรดิวเซอร์ 2 ราย
อินสแตนซ์โปรดิวเซอร์จะเรียกใช้การติดตั้งใช้งานพร็อกซี nginx อย่างง่าย
เราจะสร้างอินสแตนซ์ด้วยสคริปต์เริ่มต้นที่ติดตั้ง nginx โดยใช้ตัวจัดการแพ็กเกจ APT ของ Debian เพื่อจัดสรรอินสแตนซ์อย่างรวดเร็วด้วยซอฟต์แวร์ที่จำเป็นทั้งหมด
เราจะจัดสรรที่อยู่ IP ที่สงวนไว้ที่แตกต่างกันให้กับแต่ละอินสแตนซ์เพื่อให้เขียนกฎ NAT ได้
สร้างอินสแตนซ์แรก จาก Cloud Shell ให้ทำดังนี้
gcloud compute instances create producer-instance-1 \ --zone=us-east4-a --machine-type=e2-medium \ --network-interface=address=producer-address-1,network-tier=PREMIUM,subnet=prod-net-e4 \ --metadata startup-script="#! /bin/bash sudo apt update sudo apt install -y nginx mkdir /var/www/html/nginx/ cat <<EOF > /var/www/html/nginx/index.html <html><body><h1>This is producer instance 1</h1> </body></html> EOF"
เอาต์พุต:
Created [https://www.googleapis.com/compute/v1/projects/<Project ID>/zones/us-east4-a/instances/producer-instance-1]. NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS producer-instance-1 us-east4-a e2-medium 10.0.0.2 <Producer IP1> RUNNING
จากนั้นสร้างอินสแตนซ์ที่ 2 จาก Cloud Shell ให้ทำดังนี้
gcloud compute instances create producer-instance-2 \ --zone=us-east4-a --machine-type=e2-medium \ --network-interface=address=producer-address-2,network-tier=PREMIUM,subnet=prod-net-e4 \ --metadata startup-script="#! /bin/bash sudo apt update sudo apt install -y nginx mkdir /var/www/html/nginx/ cat <<EOF > /var/www/html/nginx/index.html <html><body><h1>This is producer instance 2</h1> </body></html> EOF"
เอาต์พุต:
Created [https://www.googleapis.com/compute/v1/projects/<Project ID>/zones/us-east4-a/instances/producer-instance-2]. NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS producer-instance-2 us-east4-a e2-medium 10.0.0.3 <Producer IP2> RUNNING
6. ตั้งค่า VPC, Cloud NAT และอินสแตนซ์ของผู้ใช้บริการ
เมื่อสร้างบริการผู้ผลิตแล้ว ก็ถึงเวลาสร้าง VPC ของผู้ใช้และเกตเวย์ Cloud NAT
หลังจากสร้าง VPC และซับเน็ตแล้ว เราจะเพิ่มกฎไฟร์วอลล์ขาเข้าแบบง่ายเพื่ออนุญาต IAP สำหรับช่วง IP ต้นทางของ TCP ซึ่งจะช่วยให้เรา SSH ไปยังอินสแตนซ์ผู้ใช้ได้โดยตรงโดยใช้ gcloud
จากนั้นเราจะสร้างเกตเวย์ Cloud NAT อย่างง่ายในโหมดการจัดสรรด้วยตนเอง และที่อยู่ที่สงวนไว้ "nat-address-1" ที่เชื่อมโยงกับเกตเวย์ ในส่วนต่อๆ ไปของโค้ดแล็บ เราจะอัปเดตการกำหนดค่าของเกตเวย์เพื่อเปิดใช้การจัดสรรพอร์ตแบบไดนามิก และเพิ่มกฎที่กำหนดเองในภายหลัง
ก่อนอื่น มาสร้าง VPC กัน จาก Cloud Shell ให้ทำดังนี้
gcloud compute networks create consumer-vpc --subnet-mode custom
เอาต์พุต:
Created [https://www.googleapis.com/compute/v1/projects/<Project ID>/global/networks/consumer-vpc]. NAME SUBNET_MODE BGP_ROUTING_MODE IPV4_RANGE GATEWAY_IPV4 consumer-vpc CUSTOM REGIONAL Instances on this network will not be reachable until firewall rules are created. As an example, you can allow all internal traffic between instances as well as SSH, RDP, and ICMP by running: $ gcloud compute firewall-rules create <FIREWALL_NAME> --network consumer-vpc --allow tcp,udp,icmp --source-ranges <IP_RANGE> $ gcloud compute firewall-rules create <FIREWALL_NAME> --network consumer-vpc --allow tcp:22,tcp:3389,icmp
จากนั้นมาสร้างซับเน็ตใน us-east4 กัน จาก Cloud Shell ให้ทำดังนี้
gcloud compute networks subnets create cons-net-e4 \ --network consumer-vpc --range 10.0.0.0/24 --region us-east4
เอาต์พุต:
Created [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/subnetworks/cons-net-e4]. NAME REGION NETWORK RANGE STACK_TYPE IPV6_ACCESS_TYPE IPV6_CIDR_RANGE EXTERNAL_IPV6_CIDR_RANGE cons-net-e4 us-east4 consumer-vpc 10.0.0.0/24 IPV4_ONLY
จากนั้นมาสร้างกฎไฟร์วอลล์ VPC เพื่ออนุญาตให้ที่อยู่ช่วง IAP เข้าถึงอินสแตนซ์ผู้ใช้บนพอร์ต 22 กัน
สำหรับกฎไฟร์วอลล์แรก ให้เรียกใช้คำสั่งต่อไปนี้จาก Cloud Shell
gcloud compute firewall-rules create consumer-allow-iap \ --network consumer-vpc --allow tcp:22 \ --source-ranges 35.235.240.0/20
เอาต์พุต:
Creating firewall...⠹Created [https://www.googleapis.com/compute/v1/projects/<Project-ID>/global/firewalls/consumer-allow-iap]. Creating firewall...done. NAME NETWORK DIRECTION PRIORITY ALLOW DENY DISABLED consumer-allow-iap consumer-vpc INGRESS 1000 tcp:22 False
ก่อนสร้าง NAT Gateway เราต้องสร้างอินสแตนซ์ Cloud Router ก่อน (เราใช้หมายเลข ASN ส่วนตัว แต่ไม่เกี่ยวข้องกับกิจกรรมใน Lab นี้) จาก Cloud Shell ให้ทำดังนี้
gcloud compute routers create consumer-cr \ --region=us-east4 --network=consumer-vpc \ --asn=65501
เอาต์พุต:
Creating router [consumer-cr]...done. NAME REGION NETWORK consumer-cr us-east4 consumer-vpc
จากนั้นสร้างอินสแตนซ์เกตเวย์ NAT จาก Cloud Shell ให้ทำดังนี้
gcloud compute routers nats create consumer-nat-gw \
--router=consumer-cr \
--router-region=us-east4 \
--nat-all-subnet-ip-ranges \
--nat-external-ip-pool=nat-address-1
เอาต์พุต:
Creating NAT [consumer-nat-gw] in router [consumer-cr]...done.
โปรดทราบว่าโดยค่าเริ่มต้น ระบบจะสร้างเกตเวย์ Cloud NAT โดยตั้งค่า minPortsPerVm เป็น 64
สร้างอินสแตนซ์ทดสอบสำหรับผู้บริโภค เราจะป้อนข้อมูล IP ของผู้ผลิตที่สงวนไว้ที่นี่เพื่อให้สามารถอ้างอิง IP เหล่านั้นภายในอินสแตนซ์ได้ในภายหลัง จาก Cloud Shell ให้ทำดังนี้
gcloud compute instances create consumer-instance-1 --zone=us-east4-a \ --machine-type=e2-medium --network-interface=subnet=cons-net-e4,no-address \ --metadata=producer-service-ip1=$producerip1,producer-service-ip2=$producerip2 gcloud compute instances create consumer-instance-2 --zone=us-east4-a \ --machine-type=e2-medium --network-interface=subnet=cons-net-e4,no-address \ --metadata=producer-service-ip1=$producerip1,producer-service-ip2=$producerip2
เอาต์พุต:
Created [https://www.googleapis.com/compute/v1/projects/<Project ID>/zones/us-east4-a/instances/consumer-instance-1]. NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS consumer-instance-1 us-east4-a e2-medium 10.0.0.2 RUNNING Created [https://www.googleapis.com/compute/v1/projects/<Project ID>/zones/us-east4-a/instances/consumer-instance-2]. NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS consumer-instance-2 us-east4-a e2-medium 10.0.0.3 RUNNING
7. ยืนยันลักษณะการทำงานเริ่มต้นของ Cloud NAT
ในตอนนี้ อินสแตนซ์ผู้ใช้จะใช้ลักษณะการทำงานเริ่มต้นของ Cloud NAT ซึ่งใช้ IP ที่สงวนไว้เดียวกัน "nat-address-1" สำหรับการสื่อสารกับที่อยู่ภายนอกทั้งหมด นอกจากนี้ Cloud NAT ยังไม่ได้เปิดใช้ DPA
มาตรวจสอบพอร์ตที่ Cloud NAT จัดสรรให้กับอินสแตนซ์ผู้ใช้ของเราโดยการเรียกใช้คำสั่งต่อไปนี้
gcloud compute routers get-nat-mapping-info consumer-cr --region=us-east4
เอาต์พุตตัวอย่าง
--- instanceName: consumer-instance-1 interfaceNatMappings: - natIpPortRanges: - <NAT Consumer IP1>:1024-1055 numTotalDrainNatPorts: 0 numTotalNatPorts: 32 sourceAliasIpRange: '' sourceVirtualIp: 10.0.0.2 - natIpPortRanges: - <NAT Consumer IP1>:32768-32799 numTotalDrainNatPorts: 0 numTotalNatPorts: 32 sourceAliasIpRange: '' sourceVirtualIp: 10.0.0.2 --- instanceName: consumer-instance-2 interfaceNatMappings: - natIpPortRanges: - <NAT Address IP1>:1056-1087 numTotalDrainNatPorts: 0 numTotalNatPorts: 32 sourceAliasIpRange: '' sourceVirtualIp: 10.0.0.3 - natIpPortRanges: - <NAT Address IP1>:32800-32831 numTotalDrainNatPorts: 0 numTotalNatPorts: 32 sourceAliasIpRange: '' sourceVirtualIp: 10.0.0.3
ดังที่เห็นจากเอาต์พุตด้านบน Cloud NAT ได้จัดสรรพอร์ต 64 พอร์ตต่ออินสแตนซ์จาก IP ภายนอกเดียวกัน nat-address-1
มาตรวจสอบจำนวนการเชื่อมต่อที่เราเปิดแบบขนานได้ก่อนเปิดใช้ DPA กัน
SSH ไปยังอินสแตนซ์ผู้บริโภคเครื่องแรก จาก Cloud Shell ให้ทำดังนี้
gcloud compute ssh consumer-instance-1 --zone=us-east4-a
ตอนนี้คุณควรอยู่ในเชลล์ของอินสแตนซ์แล้ว
เอาต์พุตตัวอย่าง (ตัดเอาต์พุตทั้งหมดออกเพื่อความกระชับ)
External IP address was not found; defaulting to using IAP tunneling. ... ... <username>@consumer-instance-1:~$
จากภายในอินสแตนซ์ผู้บริโภค ให้ดึงข้อมูลทั้ง IP ของผู้ผลิตและป้อนข้อมูลเป็นตัวแปรสภาพแวดล้อมก่อน
export producerip1=`curl -s "http://metadata.google.internal/computeMetadata/v1/instance/attributes/producer-service-ip1" -H "Metadata-Flavor: Google"` export producerip2=`curl -s "http://metadata.google.internal/computeMetadata/v1/instance/attributes/producer-service-ip2" -H "Metadata-Flavor: Google"`
จากนั้นลองใช้คำสั่ง curl ไปยังอินสแตนซ์ของ Producer ทั้ง 2 รายการเพื่อให้แน่ใจว่าเราเข้าถึงอินสแตนซ์เหล่านั้นได้สำเร็จ
<username>@consumer-instance-1:~$ curl http://$producerip1/nginx/ <html><body><h1>This is producer instance 1</h1> </body></html> <username>@consumer-instance-1:~$ curl http://$producerip2/nginx/ <html><body><h1>This is producer instance 2</h1> </body></html>
ตอนนี้เรามาลองสร้างการเชื่อมต่อแบบขนานหลายรายการกับอินสแตนซ์ของโปรดิวเซอร์โดยการเรียกใช้ curl ผ่านลูปกัน โปรดทราบว่า Cloud NAT ไม่อนุญาตให้ใช้ซ็อกเก็ตที่ปิดแล้วซ้ำเป็นเวลา 2 นาที ดังนั้น ตราบใดที่เราสามารถวนซ้ำความพยายามในการเชื่อมต่อทั้งหมดภายใน 2 นาที เราก็จะจำลองการเชื่อมต่อแบบขนานได้ด้วยวิธีนี้
เรียกใช้คำสั่งต่อไปนี้ในเซสชัน SSH ของอินสแตนซ์
while true; do for i in {1..64}; do curl -s -o /dev/null --connect-timeout 5 http://$producerip1/nginx/; if [ $? -ne 0 ] ; then echo -e "\nConnection # $i failed" ; else echo -en "\rConnection # $i successful"; fi; done; echo -e "\nLoop Done, Sleeping for 150s"; sleep 150; done
คุณควรเปิดการเชื่อมต่อแบบขนาน 64 รายการได้สำเร็จ และสคริปต์ควรพิมพ์ข้อความต่อไปนี้
Connection # 64 successful Loop Done, Sleeping for 150s Connection # 64 successful Loop Done, Sleeping for 150s
หากต้องการดูว่าเราไม่สามารถเชื่อมต่อแบบขนานเกิน 64 รายการได้ ให้รอ 2 นาทีก่อนเพื่อให้ซ็อกเก็ตเก่าทั้งหมดเคลียร์ จากนั้นปรับแต่งคำสั่งบรรทัดเดียวเดียวกันเป็นคำสั่งต่อไปนี้ แล้วเรียกใช้อีกครั้ง
while true; do for i in {1..70}; do curl -s -o /dev/null --connect-timeout 5 http://$producerip1/nginx/; if [ $? -ne 0 ] ; then echo -e "\nConnection # $i failed" ; else echo -en "\rConnection # $i successful"; fi; done; echo -e "\nLoop Done, Sleeping for 150s"; sleep 150; done
ตอนนี้คุณควรเห็นเอาต์พุตต่อไปนี้
Connection # 64 successful Connection # 65 failed Connection # 66 failed Connection # 67 failed Connection # 68 failed Connection # 69 failed Connection # 70 failed Loop Done, Sleeping for 150s
ซึ่งแสดงว่าการเชื่อมต่อ 64 รายการแรกสำเร็จ แต่การเชื่อมต่ออีก 6 รายการไม่สำเร็จเนื่องจากพอร์ตไม่พร้อมใช้งาน
มาจัดการเรื่องนี้กัน ออกจากเชลล์ SSH แล้วเปิดใช้ DPA ในส่วนต่อไปนี้
8. เปิดใช้ DPA และตรวจสอบลักษณะการทำงาน
เรียกใช้คำสั่ง gcloud ต่อไปนี้ ซึ่งจะเปิดใช้ DPA ตั้งค่าการจัดสรรพอร์ตขั้นต่ำต่อ VM เป็น 64 และการจัดสรรพอร์ตสูงสุดเป็น 1024
gcloud alpha compute routers nats update consumer-nat-gw --router=consumer-cr \ --region=us-east4 --min-ports-per-vm=64 --max-ports-per-vm=1024 \ --enable-dynamic-port-allocation
ซึ่งจะแสดงผลดังนี้
Updating nat [consumer-nat-gw] in router [consumer-cr]...done.
ตอนนี้เรามาเรียกใช้ get-nat-mapping-info อีกครั้งเพื่อยืนยันว่าอินสแตนซ์ทั้ง 2 ยังคงมีพอร์ตที่จัดสรรไว้เพียง 64 พอร์ต
gcloud compute routers get-nat-mapping-info consumer-cr --region=us-east4
เอาต์พุตตัวอย่าง (ตัดทอนเพื่อความสั้นกระชับ)
--- instanceName: consumer-instance-1 ... - <NAT Consumer IP1>:1024-1055 numTotalNatPorts: 32 ... - natIpPortRanges: - <NAT Consumer IP1>:32768-32799 numTotalNatPorts: 32 ... --- instanceName: consumer-instance-2 ... - <NAT Address IP1>:1056-1087 numTotalNatPorts: 32 ... - <NAT Address IP1>:32800-32831 numTotalNatPorts: 32 ...
การจัดสรรพอร์ตไม่ได้เปลี่ยนแปลงมากนักเนื่องจากอินสแตนซ์ยังไม่ได้ใช้พอร์ตใดๆ
มา SSH กลับเข้าไปในอินสแตนซ์กัน
gcloud compute ssh consumer-instance-1 --zone=us-east4-a
ส่งออกตัวแปรสภาพแวดล้อมของ IP ผู้ผลิตอีกครั้ง
export producerip1=`curl -s "http://metadata.google.internal/computeMetadata/v1/instance/attributes/producer-service-ip1" -H "Metadata-Flavor: Google"` export producerip2=`curl -s "http://metadata.google.internal/computeMetadata/v1/instance/attributes/producer-service-ip2" -H "Metadata-Flavor: Google"`
และเรียกใช้ลูปก่อนหน้าอีกครั้งเพื่อจำลองการเชื่อมต่อแบบขนาน
while true; do for i in {1..70}; do curl -s -o /dev/null --connect-timeout 5 http://$producerip1/nginx/; if [ $? -ne 0 ] ; then echo -e "\nConnection # $i failed" ; else echo -en "\rConnection # $i successful"; fi; done; echo -e "\nLoop Done, Sleeping for 150s"; sleep 150; done
ตอนนี้เราควรเห็นเอาต์พุตต่อไปนี้
Connection # 64 successful Connection # 65 failed Connection # 66 failed Connection # 70 successful Loop Done, Sleeping for 150s
เกิดอะไรขึ้น Cloud NAT จะเพิ่มการจัดสรรพอร์ตเมื่อมีการใช้งานพอร์ตเพิ่มขึ้น แต่ต้องใช้เวลาสักระยะในการตั้งโปรแกรมทั่วทั้งเลเยอร์เครือข่าย ดังนั้นเราจึงเห็นการเชื่อมต่อหมดเวลา 1-3 ครั้งก่อนที่จะพยายามเชื่อมต่อส่วนที่เหลือได้สำเร็จ
เราได้ระบุการหมดเวลาที่รวดเร็วสำหรับ curl (5 วินาที) แต่แอปพลิเคชันที่มีการหมดเวลาที่นานกว่านั้นควรจะเชื่อมต่อให้เสร็จสมบูรณ์ได้ในขณะที่ DPA เพิ่มการจัดสรรพอร์ต
พฤติกรรมการเพิ่มขึ้นนี้จะเห็นได้ชัดเจนยิ่งขึ้นเมื่อเราเรียกใช้ลูปสำหรับการพยายามเชื่อมต่อ 1,024 ครั้งดังนี้
while true; do for i in {1..1024}; do curl -s -o /dev/null --connect-timeout 5 http://$producerip1/nginx/; if [ $? -ne 0 ] ; then echo -e "\nConnection # $i failed" ; else echo -en "\rConnection # $i successful"; fi; done; echo -e "\nLoop Done, Sleeping for 150s"; sleep 150; done
ตอนนี้เราคาดว่าจะเห็นเอาต์พุตต่อไปนี้
Connection # 64 successful Connection # 65 failed Connection # 66 failed Connection # 129 successful Connection # 130 failed Connection # 131 failed Connection # 258 successful Connection # 259 failed Connection # 260 failed Connection # 515 successful Connection # 516 failed Connection # 1024 successful Loop Done, Sleeping for 150s
เนื่องจาก Cloud NAT จัดสรรพอร์ตเป็นเลขยกกำลังของ 2 ซึ่งโดยพื้นฐานแล้วจะเพิ่มการจัดสรรเป็น 2 เท่าในแต่ละขั้นตอน เราจึงเห็นการหมดเวลาการเชื่อมต่อที่ไฮไลต์ไว้รอบๆ เลขยกกำลังของ 2 ระหว่าง 64 ถึง 1024
เนื่องจากเราตั้งค่า maxPortsPerVM เป็น 1024 เราจึงไม่คาดหวังว่าจะเชื่อมต่อได้มากกว่า 1024 รายการ เราสามารถทดสอบได้โดยการเรียกใช้ลูป curl อีกครั้งโดยมีจำนวนมากกว่า 1024 (หลังจากรอ 2 นาทีเพื่อรีเซ็ตพอร์ตที่ไม่ได้ใช้งาน)
while true; do for i in {1..1035}; do curl -s -o /dev/null --connect-timeout 5 http://$producerip1/nginx/; if [ $? -ne 0 ] ; then echo -e "\nConnection # $i failed" ; else echo -en "\rConnection # $i successful"; fi; done; echo -e "\nLoop Done, Sleeping for 150s"; sleep 150; done
และตามที่คาดไว้ เอาต์พุตแสดงให้เห็นว่าการเชื่อมต่อที่เกิน 1, 024 รายการเริ่มล้มเหลว
<truncated output> ... Connection # 1028 successful Connection # 1029 failed Connection # 1030 failed Connection # 1031 failed Connection # 1032 failed Connection # 1033 failed Connection # 1034 failed Connection # 1035 failed ... Loop Done, Sleeping for 150s
การตั้งค่า maxPortsPerVM เป็น 1024 เป็นการสั่งให้ Cloud NAT ไม่ขยายการจัดสรรพอร์ตเกิน 1024 พอร์ตต่อ VM
หากเราออกจากเซสชัน SSH และเรียกใช้ get-nat-mapping-info อีกครั้งอย่างรวดเร็ว เราจะเห็นพอร์ตเพิ่มเติมที่จัดสรร
gcloud compute routers get-nat-mapping-info consumer-cr --region=us-east4
และดูเอาต์พุตต่อไปนี้
--- instanceName: consumer-instance-1 interfaceNatMappings: - natIpPortRanges: - <NAT Address IP1>:1024-1055 - <NAT Address IP1>1088-1119 -<NAT Address IP1>:1152-1215 - <NAT Address IP1>:1280-1407 - <NAT Address IP1>:1536-1791 numTotalDrainNatPorts: 0 numTotalNatPorts: 512 sourceAliasIpRange: '' sourceVirtualIp: 10.0.0.2 - natIpPortRanges: - <NAT Address IP1>:32768-32799 - <NAT Address IP1>:32832-32863 - <NAT Address IP1>:32896-32959 - <NAT Address IP1>:33024-33151 - <NAT Address IP1>:33536-33791 numTotalDrainNatPorts: 0 numTotalNatPorts: 512 sourceAliasIpRange: '' sourceVirtualIp: 10.0.0.2 --- instanceName: consumer-instance-2 interfaceNatMappings: - natIpPortRanges: - <NAT Address IP1>:1056-1087 numTotalDrainNatPorts: 0 numTotalNatPorts: 32 sourceAliasIpRange: '' sourceVirtualIp: 10.0.0.3 - natIpPortRanges: - <NAT Address IP1>:32800-32831 numTotalDrainNatPorts: 0 numTotalNatPorts: 32 sourceAliasIpRange: '' sourceVirtualIp: 10.0.0.3
โปรดสังเกตว่า consumer-instance-1 มีการจัดสรรพอร์ต 1024 พอร์ต แต่ consumer-instance-2 มีการจัดสรรพอร์ตเพียง 64 พอร์ต ซึ่งก่อน DPA จะทำได้ยาก และแสดงให้เห็นถึงประสิทธิภาพของ DPA สำหรับ Cloud NAT อย่างชัดเจน
หากรอ 2 นาทีก่อนที่จะเรียกใช้คำสั่ง get-nat-mapping-info อีกครั้ง คุณจะเห็นว่า consumer-instance-1 กลับมามีค่าต่ำสุดที่พอร์ตที่จัดสรรเพียง 64 พอร์ต ซึ่งไม่เพียงแสดงให้เห็นความสามารถของ DPA ในการเพิ่มการจัดสรรพอร์ต แต่ยังแสดงให้เห็นถึงการปล่อยพอร์ตเมื่อไม่ได้ใช้งานเพื่อให้อินสแตนซ์อื่นๆ ที่อยู่เบื้องหลัง NAT Gateway เดียวกันนำไปใช้ได้
9. ทดสอบกฎ Cloud NAT ด้วย DPA
นอกจากนี้ เมื่อเร็วๆ นี้เรายังได้เปิดตัวฟังก์ชันกฎ NAT สำหรับ Cloud NAT ซึ่งช่วยให้ลูกค้าเขียนกฎที่ใช้ IP NAT ที่เฉพาะเจาะจงสำหรับปลายทางภายนอกบางแห่งได้ โปรดดูข้อมูลเพิ่มเติมในหน้าเอกสารประกอบของกฎ NAT
ในแบบฝึกหัดนี้ เราจะสังเกตการโต้ตอบระหว่าง DPA กับกฎ NAT ก่อนอื่น เรามากำหนดกฎ NAT เพื่อใช้ nat-address-2 เมื่อเข้าถึง producer-address-2 กัน
เรียกใช้คำสั่ง gcloud ต่อไปนี้ ซึ่งจะสร้างกฎ NAT โดยใช้
gcloud alpha compute routers nats rules create 100 \ --match='destination.ip == "'$producerip2'"' \ --source-nat-active-ips=nat-address-2 --nat=consumer-nat-gw \ --router=consumer-cr --router-region=us-east4
คุณควรคาดหวังผลลัพธ์ต่อไปนี้
Updating nat [consumer-nat-gw] in router [consumer-cr]...done.
ตอนนี้มาเรียกใช้ get-nat-mapping-info อีกครั้งเพื่อดูผลของกฎ NAT ใหม่กัน
gcloud alpha compute routers get-nat-mapping-info consumer-cr --region=us-east4
ซึ่งควรแสดงผลดังนี้
---
instanceName: consumer-instance-1
interfaceNatMappings:
- natIpPortRanges:
- <NAT Address IP1>:1024-1055
numTotalDrainNatPorts: 0
numTotalNatPorts: 32
ruleMappings:
- natIpPortRanges:
- <NAT Address IP2>:1024-1055
numTotalDrainNatPorts: 0
numTotalNatPorts: 32
ruleNumber: 100
sourceAliasIpRange: ''
sourceVirtualIp: 10.0.0.2
- natIpPortRanges:
- <NAT Address IP1>:32768-32799
numTotalDrainNatPorts: 0
numTotalNatPorts: 32
ruleMappings:
- natIpPortRanges:
- <NAT Address IP2>:32768-32799
numTotalDrainNatPorts: 0
numTotalNatPorts: 32
ruleNumber: 100
sourceAliasIpRange: ''
sourceVirtualIp: 10.0.0.2
โปรดสังเกตว่าตอนนี้เรามีพอร์ตเพิ่มเติมที่จัดสรรไว้ (ที่ 64 ซึ่งเป็นค่าต่ำสุดที่ระบุ) สำหรับ nat-address-2 โดยเฉพาะภายใต้ลำดับชั้น ruleMappings
แล้วจะเกิดอะไรขึ้นหากอินสแตนซ์เปิดการเชื่อมต่อจำนวนมากไปยังปลายทางที่ระบุโดยกฎ NAT มาดูกัน
มา SSH กลับเข้าไปในอินสแตนซ์กัน
gcloud compute ssh consumer-instance-1 --zone=us-east4-a
ส่งออกตัวแปรสภาพแวดล้อมของ IP ผู้ผลิตอีกครั้ง
export producerip1=`curl -s "http://metadata.google.internal/computeMetadata/v1/instance/attributes/producer-service-ip1" -H "Metadata-Flavor: Google"` export producerip2=`curl -s "http://metadata.google.internal/computeMetadata/v1/instance/attributes/producer-service-ip2" -H "Metadata-Flavor: Google"`
ตอนนี้มาเรียกใช้ลูป curl กับ producerip2 อีกครั้ง
while true; do for i in {1..1024}; do curl -s -o /dev/null --connect-timeout 5 http://$producerip2/nginx/; if [ $? -ne 0 ] ; then echo -e "\nConnection # $i failed" ; else echo -en "\rConnection # $i successful"; fi; done; echo -e "\nLoop Done, Sleeping for 150s"; sleep 150; done
คุณจะเห็นเอาต์พุตคล้ายกับตัวอย่างต่อไปนี้
Connection # 64 successful Connection # 65 failed Connection # 66 failed Connection # 129 successful Connection # 130 failed Connection # 131 failed Connection # 258 successful Connection # 259 failed Connection # 260 failed Connection # 515 successful Connection # 516 failed Connection # 1024 successful Loop Done, Sleeping for 150s
ซึ่งโดยพื้นฐานแล้วจะเหมือนกับการทดสอบครั้งก่อน เราจะออกจากเซสชัน SSH ของอินสแตนซ์และดูการแมป NAT อีกครั้ง
gcloud alpha compute routers get-nat-mapping-info consumer-cr --region=us-east4
ซึ่งควรแสดงผลดังนี้
---
instanceName: consumer-instance-1
interfaceNatMappings:
- natIpPortRanges:
- <NAT Address IP1>:1024-1055
numTotalDrainNatPorts: 0
numTotalNatPorts: 32
ruleMappings:
- natIpPortRanges:
- <NAT Address IP2>:1024-1055
- <NAT Address IP2>:1088-1119
- <NAT Address IP2>:1152-1215
- <NAT Address IP2>:1280-1407
- <NAT Address IP2>:1536-1791
numTotalDrainNatPorts: 0
numTotalNatPorts: 512
ruleNumber: 100
sourceAliasIpRange: ''
sourceVirtualIp: 10.0.0.2
- natIpPortRanges:
- <NAT Address IP1>:32768-32799
numTotalDrainNatPorts: 0
numTotalNatPorts: 32
ruleMappings:
- natIpPortRanges:
- <NAT Address IP2>:32768-32799
- <NAT Address IP2>:32832-32863
- <NAT Address IP2>:32896-32959
- <NAT Address IP2>:33024-33151
- <NAT Address IP2>:33280-33535
numTotalDrainNatPorts: 0
numTotalNatPorts: 512
ruleNumber: 100
sourceAliasIpRange: ''
sourceVirtualIp: 10.0.0.2
---
instanceName: consumer-instance-2
interfaceNatMappings:
- natIpPortRanges:
- <NAT Address IP1>:1056-1087
numTotalDrainNatPorts: 0
numTotalNatPorts: 32
ruleMappings:
- natIpPortRanges:
- <NAT Address IP2>:1056-1087
numTotalDrainNatPorts: 0
numTotalNatPorts: 32
ruleNumber: 100
sourceAliasIpRange: ''
sourceVirtualIp: 10.0.0.3
- natIpPortRanges:
- <NAT Address IP1>:32800-32831
numTotalDrainNatPorts: 0
numTotalNatPorts: 32
ruleMappings:
- natIpPortRanges:
- <NAT Address IP2>:32800-32831
numTotalDrainNatPorts: 0
numTotalNatPorts: 32
ruleNumber: 100
sourceAliasIpRange: ''
sourceVirtualIp: 10.0.0.3
---
instanceName: consumer-instance-1
interfaceNatMappings:
- natIpPortRanges:
- <NAT Address IP1>:1024-1055
numTotalDrainNatPorts: 0
numTotalNatPorts: 32
ruleMappings:
- natIpPortRanges:
- <NAT Address IP2>:1024-1055
numTotalDrainNatPorts: 0
numTotalNatPorts: 32
ruleNumber: 100
sourceAliasIpRange: ''
sourceVirtualIp: 10.0.0.2
- natIpPortRanges:
- <NAT Address IP1>:32768-32799
numTotalDrainNatPorts: 0
numTotalNatPorts: 32
ruleMappings:
- natIpPortRanges:
- <NAT Address IP2>:32768-32799
numTotalDrainNatPorts: 0
numTotalNatPorts: 32
ruleNumber: 100
sourceAliasIpRange: ''
sourceVirtualIp: 10.0.0.2
ดังที่เห็นด้านบน ที่อยู่ IP NAT เริ่มต้นของ consumer-instance-1 ( IP สำหรับ nat-address-1) ยังคงมีพอร์ตที่จัดสรรเพียง 64 พอร์ต แต่ IP ของกฎ NAT (IP สำหรับ nat-address-2) มีพอร์ตที่จัดสรร 1024 พอร์ต ในขณะเดียวกัน consumer-instance-2 ก็ยังคงการจัดสรรพอร์ตเริ่มต้นที่ 64 พอร์ตสำหรับ IP NAT ทั้งหมด
คุณสามารถทดสอบกรณีที่กลับกันได้เพื่อเป็นการฝึก ให้ Cloud NAT ยกเลิกการจัดสรรพอร์ตพิเศษทั้งหมด จากนั้นเรียกใช้ลูป curl กับ producerip1 และสังเกตผลกระทบต่อเอาต์พุตของ get-nat-mapping-info
10. ขั้นตอนการล้างข้อมูล
หากต้องการหลีกเลี่ยงการเรียกเก็บเงินที่เกิดซ้ำ คุณควรลบทรัพยากรทั้งหมดที่เชื่อมโยงกับโค้ดแล็บนี้
ก่อนอื่นให้ลบอินสแตนซ์ทั้งหมด
จาก Cloud Shell ให้ทำดังนี้
gcloud compute instances delete consumer-instance-1 consumer-instance-2 \ producer-instance-1 producer-instance-2 \ --zone us-east4-a --quiet
ผลลัพธ์ที่คาดไว้ :
Deleted [https://www.googleapis.com/compute/v1/projects/<Project Id>/zones/us-east4-a/instances/consumer-instance-1]. Deleted [https://www.googleapis.com/compute/v1/projects/<Project Id>/zones/us-east4-a/instances/consumer-instance-2]. Deleted [https://www.googleapis.com/compute/v1/projects/<Project Id>/zones/us-east4-a/instances/producer-instance-1]. Deleted [https://www.googleapis.com/compute/v1/projects/<Project Id>/zones/us-east4-a/instances/producer-instance-2].
จากนั้นลบ Cloud Router จาก Cloud Shell ให้ทำดังนี้
gcloud compute routers delete consumer-cr \ --region us-east4 --quiet
คุณควรเห็นเอาต์พุตต่อไปนี้
Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/routers/consumer-cr].
ปล่อยที่อยู่ IP ภายนอกทั้งหมด จาก Cloud Shell ให้ทำดังนี้
gcloud compute addresses delete nat-address-1 \ nat-address-2 producer-address-1 \ producer-address-2 --region us-east4 --quiet
คุณควรเห็นเอาต์พุตต่อไปนี้
Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/addresses/nat-address-1]. Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/addresses/nat-address-2]. Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/addresses/nat-address-3]. Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/addresses/producer-address-1]. Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/addresses/producer-address-2].
ลบกฎไฟร์วอลล์ VPC จาก Cloud Shell ให้ทำดังนี้
gcloud compute firewall-rules delete consumer-allow-iap \ producer-allow-80 --quiet
คุณควรเห็นเอาต์พุตต่อไปนี้
Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/global/firewalls/consumer-allow-iap]. Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/global/firewalls/producer-allow-80].
ลบซับเน็ต จาก Cloud Shell ให้ทำดังนี้
gcloud compute networks subnets delete cons-net-e4 \ prod-net-e4 --region=us-east4 --quiet
คุณควรเห็นเอาต์พุตต่อไปนี้
Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/subnetworks/cons-net-e4]. Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/subnetworks/prod-net-e4].
สุดท้าย มาลบ VPC กัน จาก Cloud Shell ให้ทำดังนี้
gcloud compute networks delete consumer-vpc \ producer-vpc --quiet
คุณควรเห็นเอาต์พุตต่อไปนี้
Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/global/networks/consumer-vpc]. Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/global/networks/producer-vpc].
11. ยินดีด้วย
คุณทำแล็บ DPA ของ Cloud NAT เสร็จแล้ว
สิ่งที่คุณครอบคลุม
- วิธีตั้งค่าเกตเวย์ Cloud NAT เพื่อเตรียมพร้อมสำหรับ DPA
- วิธีตรวจสอบการจัดสรรพอร์ตโดยไม่ต้องใช้ DPA
- วิธีเปิดใช้และกำหนดค่า DPA สำหรับเกตเวย์ NAT
- วิธีสังเกตผลกระทบของ DPA โดยการเรียกใช้การเชื่อมต่อขาออกแบบคู่ขนาน
- วิธีเพิ่มกฎ NAT ไปยังเกตเวย์ NAT ที่เปิดใช้ DPA
- วิธีดูลักษณะการทำงานของ DPA ที่มีกฎโดยการเรียกใช้การเชื่อมต่อขาออกไปยังปลายทางหลายแห่ง
ขั้นตอนถัดไป
- เรียกดูหน้าเอกสารประกอบการจัดสรรพอร์ตแบบไดนามิก
- ทดลองปรับการหมดเวลา NAT และค่าการจัดสรรพอร์ตกับแอปพลิเคชัน
- ดูข้อมูลเพิ่มเติมเกี่ยวกับเครือข่ายใน Google Cloud Platform
©Google, Inc. หรือบริษัทในเครือ สงวนลิขสิทธิ์ ห้ามเผยแพร่