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

1. ภาพรวม

Dynamic Port Allocation (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

คุณติดต่อ 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 ของระบบคลาวด์ การใช้งาน Codelab นี้น่าจะไม่มีค่าใช้จ่ายใดๆ หากมี หากต้องการปิดทรัพยากรเพื่อไม่ให้มีการเรียกเก็บเงินนอกเหนือจากบทแนะนำนี้ ให้ทำตาม "การล้าง" ดูได้ที่ตอนท้ายของ Codelab ผู้ใช้ใหม่ของ Google Cloud จะมีสิทธิ์เข้าร่วมโปรแกรมทดลองใช้ฟรี$300 USD

เริ่มต้น Cloud Shell

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

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

bce75f34b2c53987.png

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

f6ef2b5f13479f3a.png

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

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

สำหรับห้องทดลองนี้ คุณจะใช้โปรเจ็กต์ และสร้าง VPC 2 รายการที่มีซับเน็ตในแต่ละโปรเจ็กต์ คุณจะจองที่อยู่ IP ภายนอก จากนั้นสร้างและกำหนดค่าเกตเวย์ Cloud NAT (ด้วย Cloud Router) อินสแตนซ์ของผู้ผลิต 2 อินสแตนซ์ และอินสแตนซ์ของผู้บริโภค 2 อินสแตนซ์ หลังจากตรวจสอบลักษณะการทำงาน Cloud NAT เริ่มต้นแล้ว คุณจะเปิดใช้ Dynamic Port Allocation และตรวจสอบลักษณะการทำงาน และสุดท้าย คุณจะต้องกำหนดค่ากฎ 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 รายการ "manufacturers-address-1" และ "ผู้ผลิต-ที่อยู่-2" ที่ใช้เวลาเพียง 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 โดยใช้ตัวจัดการแพ็กเกจ Debian APT

เราจะจัดสรรแต่ละอินสแตนซ์ด้วยที่อยู่ 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" ที่สงวนไว้ ที่เกี่ยวข้อง ในส่วนต่อไปของ Codelab เราจะอัปเดตการกำหนดค่าของเกตเวย์เพื่อเปิดใช้การจัดสรรพอร์ตแบบไดนามิก และเพิ่มกฎที่กำหนดเองในภายหลัง

ก่อนอื่น ให้สร้าง 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 เราต้องสร้างอินสแตนซ์ Cloud Router ก่อน (เราใช้หมายเลข ASN ส่วนตัว แต่ไม่เกี่ยวข้องกับกิจกรรมของห้องทดลองนี้) จาก 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 ผู้ผลิตที่จองไว้ที่นี่เพื่อให้อ้างอิงถึงภายในอินสแตนซ์ได้ในภายหลัง จาก 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

ตอนนี้คุณควรอยู่ใน Shell ของอินสแตนซ์แล้ว

ตัวอย่างเอาต์พุต (เอาต์พุตแบบเต็มถูกตัดเพื่อความกระชับ)

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"`

จากนั้นพยายามขดดูอินสแตนซ์ของผู้สร้างทั้ง 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 รายการที่เหลือล้มเหลวเนื่องจากพอร์ตไม่พร้อมใช้งาน

มาลองแก้ปัญหาด้วยการออกจาก Shell ของ 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 เราจึงคาดว่าจะทำการเชื่อมต่อได้สูงสุด 1, 024 รายการ เราสามารถทดสอบได้โดยการเรียกใช้ Curl Loop อีกครั้งด้วยจำนวนที่สูงกว่า 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 เดียวกันด้วย

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 ของอินสแตนซ์และดูการแมปแนทอีกครั้ง

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 Loop กับ producerip1 และสังเกตผลกระทบที่มีต่อเอาต์พุตของ get-nat-mapping-info

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

คุณควรลบทรัพยากรทั้งหมดที่เชื่อมโยงกับ Codelab เพื่อหลีกเลี่ยงการเรียกเก็บเงินซ้ำ

ขั้นแรกให้ลบอินสแตนซ์ทั้งหมดก่อน

จาก 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. ยินดีด้วย

คุณดำเนินการตาม Cloud NAT DPA Lab เสร็จสมบูรณ์แล้ว

สิ่งที่คุณได้พูดคุยกัน

  • วิธีตั้งค่าเกตเวย์ Cloud NAT เพื่อเตรียมพร้อมสำหรับ DPA
  • วิธีตรวจสอบการจัดสรรพอร์ตโดยไม่ใช้ DPA
  • วิธีเปิดใช้และกำหนดค่า DPA สำหรับเกตเวย์ NAT
  • วิธีสังเกตผลกระทบของ DPA โดยเรียกใช้การเชื่อมต่อขาออกแบบคู่ขนาน
  • วิธีเพิ่มกฎ NAT ไปยังเกตเวย์ NAT ที่เปิดใช้ DPA
  • วิธีดูลักษณะการทำงานของ DPA กับกฎโดยการเรียกใช้การเชื่อมต่อขาออกไปยังปลายทางหลายแห่ง

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

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