การใช้การจัดสรรพอร์ตแบบไดนามิกของ Cloud NAT

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

75eef5f6fd6d7e41.png

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

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

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

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

เริ่มต้น Cloud Shell

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

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

bce75f34b2c53987.png

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

f6ef2b5f13479f3a.png

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

3. การตั้งค่าห้องทดลอง

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

ภาพรวมสถาปัตยกรรมเครือข่าย

a21caa6c333909d8.png

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 ที่มีกฎโดยการเรียกใช้การเชื่อมต่อขาออกไปยังปลายทางหลายแห่ง

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

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