1. סקירה כללית
Cloud NAT הוא כלי רב עוצמה: בעזרתו, עומסי עבודה של Compute Engine ו-Google Kubernetes Engine (GKE) יכולים לגשת למשאבים באינטרנט בצורה מאובטחת וניתנת להרחבה, בלי לחשוף את עומסי העבודה שפועלים בהם לגישה חיצונית באמצעות כתובות IP חיצוניות.
ל-Cloud NAT יש עיצוב ללא שרת proxy, והוא מטמיע NAT ישירות בשכבת Andromeda SDN. לכן, אין השפעה על הביצועים של עומס העבודה, והוא ניתן להרחבה בקלות למכונות וירטואליות, לאזורים ולרשתות VPC רבים.
כללי NAT הם הרחבה של Cloud NAT. התכונה 'כללי NAT' ב-Cloud NAT מאפשרת ליצור כללי גישה שמגדירים איך Cloud NAT משמש לחיבור לאינטרנט. בשלב הזה, כללי NAT תומכים בבחירה של כתובת NAT של המקור על סמך כתובת היעד.
בלי כללי NAT, מכונה וירטואלית שמופעל בה Cloud NAT משתמשת באותה קבוצה של כתובות IP של NAT כדי להגיע לכל כתובות האינטרנט.
לפעמים, בתרחיש שימוש ב-NAT, נדרש ש-Cloud NAT ישתמש בכתובות IP שונות של מקור ליעדים ספציפיים. כלל NAT מגדיר התאמה ופעולה תואמת. אחרי שמציינים כללי NAT, המערכת משווה את המנות לכל כלל NAT. אם נמצאת התאמה לכלל, מתבצעת הפעולה שמתאימה להתאמה הזו.
מידע נוסף מופיע בקטע בנושא כללי NAT .
מה תלמדו
- איך מגדירים שער Cloud NAT לקראת כללי NAT.
- איך מעצבים כללי NAT באמצעות Common Expression Language (CEL).
- איך יוצרים כללי NAT ומצרפים אותם לשער NAT.
- איך בודקים כללי NAT ממופע.
- איך מעדכנים את הכללים של שער NAT.
- איך מוחקים כללי NAT וחוזרים להתנהגות ברירת המחדל של Cloud NAT.
הדרישות
- ידע בסיסי ב-Google Compute Engine
- ידע בסיסי ברישות וב-TCP/IP
- ידע בסיסי בשורת הפקודה של Unix/Linux
- מומלץ להשלים סיור מודרך ברשתות ב-GCP, כמו שיעור ה-Lab Networking in Google Cloud.
- הבנה של היסודות של Cloud NAT.
2. שימוש במסוף Google Cloud וב-Cloud Shell
במהלך שיעור ה-Lab הזה נשתמש גם במסוף Google Cloud וגם ב-Cloud Shell כדי ליצור אינטראקציה עם GCP.
Google Cloud Console
אפשר להיכנס ל-Cloud Console בכתובת https://console.cloud.google.com.

הגדרת סביבה בקצב אישי
- נכנסים אל Cloud Console ויוצרים פרויקט חדש או משתמשים בפרויקט קיים. אם עדיין אין לכם חשבון Gmail או Google Workspace, אתם צריכים ליצור חשבון.



- שם הפרויקט הוא המזהה האישי שלכם בפרויקט הזה. כל עוד אתם פועלים לפי מוסכמות השמות, אתם יכולים להשתמש בכל שם שתרצו ולעדכן אותו מתי שתרצו.
- מזהה הפרויקט חייב להיות ייחודי בכל הפרויקטים ב-Google Cloud, והוא קבוע (אי אפשר לשנות אותו אחרי שמגדירים אותו). מסוף Cloud יוצר באופן אוטומטי מחרוזת ייחודית, ובדרך כלל לא צריך להתייחס אליה. ברוב ה-codelab, תצטרכו להפנות למזהה הפרויקט (ובדרך כלל הוא מזוהה כ-
PROJECT_ID), אז אם אתם לא אוהבים אותו, תוכלו ליצור מזהה אקראי אחר, או לנסות מזהה משלכם ולראות אם הוא זמין. אחרי שהפרויקט נוצר, הוא 'קפוא'.
- לאחר מכן, תצטרכו להפעיל את החיוב ב-Cloud Console כדי להשתמש במשאבים של Google Cloud.
העלות של התרגול הזה לא אמורה להיות גבוהה, ואולי אפילו לא תצטרכו לשלם בכלל. חשוב לפעול לפי ההוראות בקטע 'ניקוי' כדי להשבית את המשאבים, וכך לא תחויבו אחרי שתסיימו את המדריך הזה. משתמשים חדשים ב-Google Cloud זכאים לתוכנית תקופת ניסיון בחינם בשווי 300$.
מפעילים את Cloud Shell
אפשר להפעיל את Google Cloud מרחוק מהמחשב הנייד, אבל ב-codelab הזה תשתמשו ב-Google Cloud Shell, סביבת שורת פקודה שפועלת בענן.
ב-GCP Console, לוחצים על סמל Cloud Shell בסרגל הכלים שבפינה הימנית העליונה:

יחלפו כמה רגעים עד שההקצאה והחיבור לסביבת העבודה יושלמו. בסיום התהליך, אמור להופיע משהו כזה:

המכונה הווירטואלית הזו כוללת את כל הכלים שדרושים למפתחים. יש בה ספריית בית בנפח מתמיד של 5GB והיא פועלת ב-Google Cloud, מה שמשפר מאוד את הביצועים והאימות ברשת. אפשר לבצע את כל העבודה ב-Lab הזה רק באמצעות דפדפן.
3. הגדרת מעבדה
בשיעור ה-Lab הזה תשתמשו בפרויקט ותיצרו שתי רשתות VPC עם תת-רשת בכל אחת מהן. תשמרו כתובות IP חיצוניות, ואז תיצרו ותגדירו שער Cloud NAT (עם Cloud Router), שתי מכונות וירטואליות של יצרן ומכונה וירטואלית של צרכן. אחרי שתאמתו את התנהגות ברירת המחדל של Cloud NAT, תיצרו כללים מותאמים אישית של Cloud NAT ותאמתו את ההתנהגות שלהם.
סקירה כללית על ארכיטקטורת הרשת:

4. שמירת כתובות IP חיצוניות
נשמור את כל כתובות ה-IP החיצוניות לשימוש ב-Lab הזה. כך תוכלו לכתוב את כל כללי ה-NAT וחומת האש הרלוונטיים ב-VPC של הצרכן וב-VPC של היצרן.
מתוך Cloud Shell:
gcloud compute addresses create nat-address-1 nat-address-2 nat-address-3 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/nat-address-3]. 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 natip3=`gcloud compute addresses list --filter name:nat-address-3 --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> natip3=<NAT IP 3>
5. הגדרה של VPC ומכונות של היוצר.
עכשיו ניצור את המשאבים למשאבי המפיק. האינסטנסים שפועלים ב-VPC של הספק יציעו את השירות שפונה לאינטרנט באמצעות שתי כתובות IP ציבוריות: 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 producer-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/producer-e4]. NAME REGION NETWORK RANGE producer-e4 us-east4 producer-vpc 10.0.0.0/24
בשלב הבא, ניצור כללי חומת אש של VPC כדי לאפשר לכתובות ה-IP של NAT להגיע למכונות המפיקות ביציאה 8080.
לכלל הראשון, מ-Cloud Shell:
gcloud compute firewall-rules create producer-allow-8080 \ --network producer-vpc --allow tcp:8080 \ --source-ranges $natip1,$natip2,$natip3
פלט:
Creating firewall...⠹Created [https://www.googleapis.com/compute/v1/projects/<Project-ID>/global/firewalls/producer-allow-8080]. Creating firewall...done. NAME NETWORK DIRECTION PRIORITY ALLOW DENY DISABLED producer-allow-8080 producer-vpc INGRESS 1000 tcp:8080 False
השלב הבא הוא ליצור את שני מופעי היצרן.
במופעים של היצרן יפעל שירות הד של כתובת IP בקונטיינר של Docker שזמין ב-Docker Hub (קוד המקור זמין במאגר GitHub של מחבר השירות).
כדי להקצות במהירות את המכונות עם כל התוכנות הנדרשות, נשתמש בתכונה פריסת קונטיינרים ב-Compute Engine.
כדי שנוכל לכתוב כללי NAT, נספק לכל מכונה כתובת IP שמורה שונה.
יוצרים את המופע הראשון. מתוך Cloud Shell:
gcloud compute instances create-with-container producer-instance-1 \ --zone=us-east4-a --machine-type=e2-medium \ --network-interface=address=producer-address-1,network-tier=PREMIUM,subnet=producer-e4 \ --container-image=mpolden/echoip --container-restart-policy=always
פלט:
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 IP 1> RUNNING
לאחר מכן יוצרים את המכונה השנייה. מתוך Cloud Shell:
gcloud compute instances create-with-container producer-instance-2 \ --zone=us-east4-a --machine-type=e2-medium \ --network-interface=address=producer-address-2,network-tier=PREMIUM,subnet=producer-e4 \ --container-image=mpolden/echoip --container-restart-policy=always
פלט:
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 IP 2> RUNNING
6. הגדרת VPC לצרכן, Cloud NAT ומופע
אחרי שיצרתם את השירות של הבעלים, הגיע הזמן ליצור את ה-VPC של הצרכן ואת שער Cloud NAT שלו.
אחרי שיוצרים את ה-VPC ואת תת-הרשת, מוסיפים כלל פשוט של חומת אש לתעבורת נתונים נכנסת כדי לאפשר ל-IAP טווחי כתובות IP של מקור TCP. כך נוכל להשתמש ב-gcloud כדי לבצע SSH ישירות למכונות הצרכן.
לאחר מכן ניצור שער 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 producer-vpc --allow tcp:22,tcp:3389,icmp
בשלב הבא, ניצור רשת משנה באזור us-east4. מתוך Cloud Shell:
gcloud compute networks subnets create consumer-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/consumer-e4]. NAME REGION NETWORK RANGE consumer-e4 us-east4 consumer-vpc 10.0.0.0/24
בשלב הבא, ניצור כללים בחומת האש של ה-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.
יוצרים את מכונת הבדיקה לצרכן. אנחנו מאכלסים כאן את כתובות ה-IP השמורות של המפיק כדי שנוכל להתייחס אליהן במופע מאוחר יותר. מתוך Cloud Shell:
gcloud compute instances create consumer-instance --zone=us-east4-a \ --machine-type=e2-medium --network-interface=subnet=consumer-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]. NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS consumer-instance us-east4-a e2-medium 10.0.0.2 RUNNING
7. אימות התנהגות ברירת המחדל של Cloud NAT
בשלב הזה, מופעלת במכונת הצרכן התנהגות ברירת המחדל של Cloud NAT, שבה נעשה שימוש באותה כתובת IP שמורה nat-address-1 לתקשורת עם כל הכתובות החיצוניות.
לפני שמשתמשים בתכונה החדשה של כללי NAT ב-Cloud NAT, צריך קודם לאמת את ההתנהגות הזו.
מתחברים באמצעות SSH למופע של הצרכן. מתוך Cloud Shell:
gcloud compute ssh consumer-instance --zone=us-east4-a
עכשיו אתם אמורים להיות במעטפת של המופע.
פלט לדוגמה (פלט מלא שקוצר לצורך נוחות)
No zone specified. Using zone [us-east4-a] for instance: [consumer-instance]. External IP address was not found; defaulting to using IAP tunneling. ... ... <username>@consumer-instance:~$
מתוך מופע הצרכן, קודם צריך לאחזר את כתובות ה-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 בשני מופעי היצרן ומתבוננים בכתובת ה-IP של המקור שמוחזרת.
<username>@consumer-instance:~$ curl http://$producerip1:8080 34.136.8.83 <username>@consumer-instance:~$ curl http://$producerip2:8080 34.136.8.83
כתובת ה-IP שמוחזרת בשתי נקודות הקצה צריכה להיות זהה, והיא שווה לערך של כתובת ה-IP החיצונית השמורה nat-address-1.
באופן דומה, פקודת curl לכל שירות חיצוני להחזרת כתובת IP צריכה להציג את אותה כתובת IP, לדוגמה:
<username>@consumer-instance:~$ curl http://ifconfig.co 34.136.8.83 <username>@consumer-instance:~$ curl http://ifconfig.me 34.136.8.83 <username>@consumer-instance:~$ curl http://ip.fyr.io 34.136.8.83
יוצאים מחיבור ה-SSH של המופע בינתיים, ונחזור ל-SSH אחרי שנסיים להגדיר את כללי ה-NAT.
8. יצירת כללי Cloud NAT
כללי NAT נכתבים באמצעות תחביר של Common Expression Language. מידע נוסף על שפת הביטויים של הכללים זמין במאמר שפת הביטויים של הכללים.
אפשר גם להוסיף כלל NAT ל-NAT gateway קיים באמצעות פקודות gcloud. נלמד על שתי האפשרויות ליצירת כללי Cloud NAT.
קודם ניצור קובץ YAML של כלל NAT.
מתוך Cloud Shell:
export projectid=`gcloud config get-value project`
cat <<EOF >natrulesfile.txt
rules:
- ruleNumber: 100
match: destination.ip == '$producerip2'
action:
sourceNatActiveIps:
- /projects/$projectid/regions/us-east4/addresses/nat-address-2
EOF
עכשיו נעדכן את שער ה-NAT הקיים באמצעות קובץ הכללים הזה. מתוך Cloud Shell:
gcloud alpha compute routers nats update consumer-nat-gw \
--router=consumer-cr \
--rules=natrulesfile.txt \
--router-region=us-east4
הפלט הבא אמור להתקבל :
Updating nat [consumer-nat-gw] in router [consumer-cr]...done.
מוודאים שהכלל הוגדר בהצלחה. מתוך Cloud Shell:
gcloud alpha compute routers nats rules list \ --nat=consumer-nat-gw --router=consumer-cr \ --router-region=us-east4
הפלט הבא אמור להתקבל :
RULE_NUMBER MATCH 100 destination.ip == '35.192.142.134'
ננסה ליצור מחדש את אותו כלל באמצעות פקודות gcloud בלבד. קודם מוחקים את הכלל הקיים. מתוך Cloud Shell:
gcloud alpha compute routers nats rules delete 100 \ --nat=consumer-nat-gw --router=consumer-cr \ --router-region=us-east4 --quiet
הפלט הבא אמור להתקבל :
Updated [https://www.googleapis.com/compute/alpha/projects/ghaleb-s2/regions/us-east4/routers/consumer-cr]
לאחר מכן יוצרים מחדש את הכלל באמצעות הפקודה הזו של gcloud. מתוך Cloud Shell:
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
הפלט הבא אמור להתקבל :
Creating Rule [100] in NAT [consumer-nat-gw]...done.
כדי לוודא שהכלל נוצר, חוזרים על הפקודה הקודמת. הפעם נוסיף את המתג של עיצוב YAML כדי לראות את הפרטים המלאים של הכלל.
מתוך Cloud Shell:
gcloud alpha compute routers nats rules list\ --nat=consumer-nat-gw --router=consumer-cr \ --router-region=us-east4 --format=yaml
הפלט הבא אמור להתקבל :
--- action: sourceNatActiveIps: - https://www.googleapis.com/compute/alpha/projects/<Project-ID>/regions/us-east4/addresses/nat-address-2 match: destination.ip == <actual IP for producer-IP 2> ruleNumber: 100
לבסוף, שימו לב שעכשיו גם הכתובות החיצוניות nat-address1 וגם nat-address-2 מופיעות כ-IN_USE. כדי לראות את זה, מריצים את הפקודה הבאה מ-Cloud Shell:
$ gcloud compute addresses list
הפלט הבא אמור להתקבל (כתובות ה-IP בפועל צריכות להיות זהות לכתובות ששמרתם) :
NAME ADDRESS/RANGE TYPE PURPOSE NETWORK REGION SUBNET STATUS nat-address-1 34.136.8.83 EXTERNAL us-east4 IN_USE nat-address-2 34.70.137.35 EXTERNAL us-east4 IN_USE nat-address-3 34.135.103.88 EXTERNAL us-east4 RESERVED producer-address-1 34.66.0.105 EXTERNAL us-east4 IN_USE producer-address-2 35.192.142.134 EXTERNAL us-east4 IN_USE
9. אימות ההתנהגות של כללי Cloud NAT
בשלב הזה, מופע הצרכן צריך להשתמש בכלל Cloud NAT שנוצר כדי להשתמש ב-nat-address-2 לתקשורת עם producer-address-2.
כדאי לאמת את ההתנהגות הזו. מתחברים באמצעות SSH למופע של הצרכן. מתוך Cloud Shell:
gcloud compute ssh consumer-instance --zone=us-east4-a
עכשיו אתם אמורים להיות במעטפת של המופע.
פלט לדוגמה (פלט מלא שקוצר לצורך נוחות)
No zone specified. Using zone [us-east4-a] for instance: [consumer-instance]. External IP address was not found; defaulting to using IAP tunneling. ... ... <username>@consumer-instance:~$
מתוך מופע הצרכן, קודם צריך לאחזר את כתובות ה-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 בשני מופעי היצרן ומתבוננים בכתובת ה-IP של המקור שמוחזרת.
<username>@consumer-instance:~$ curl http://$producerip1:8080 34.136.8.83 <username>@consumer-instance:~$ curl http://$producerip2:8080 34.70.137.35
עכשיו אמורה להיות כתובת IP שונה שמוחזרת לשתי נקודות הקצה. כתובת ה-IP הראשונה צריכה להיות זהה להתנהגות ברירת המחדל. כתובת ה-IP השנייה צריכה להיות שווה ל-nat-address-2 אחרי הוספת כלל ה-NAT החדש.
פעולת curl לכל שירות רפלקטור של כתובת IP חיצונית עדיין צריכה להציג את אותה כתובת IP כמו התנהגות ברירת המחדל, לדוגמה:
<username>@consumer-instance:~$ curl http://ifconfig.co 34.136.8.83 <username>@consumer-instance:~$ curl http://ifconfig.me 34.136.8.83 <username>@consumer-instance:~$ curl http://ip.fyr.io 34.136.8.83
יוצאים מהסשן של ה-SSH של המופע, ונחזור אליו כדי לבדוק את ניקוי הכתובות.
10. עדכון ומחיקה של כללי Cloud NAT
אפשר לעדכן כללי Cloud NAT קיימים. לדוגמה, אפשר לשייך כתובות IP חדשות ולבטל את השיוך של כתובות IP קיימות שמשויכות לכללים קיימים.
נעדכן את קובץ כללי ה-NAT באופן הבא
מתוך Cloud Shell:
export projectid=`gcloud config get-value project`
cat <<EOF >natrulesfile.txt
rules:
- ruleNumber: 100
match: destination.ip == '$producerip2'
action:
sourceNatDrainIps:
- /projects/$projectid/regions/us-east4/addresses/nat-address-2
sourceNatActiveIps:
- /projects/$projectid/regions/us-east4/addresses/nat-address-3
EOF
הקובץ החדש הזה מעביר את nat-address-2 למצב drained (ריקון). מוסיפים את nat-address-3 במצב פעיל. השינוי הזה אמור לאפשר לחיבורים קיימים שמשתמשים ב-nat-address-2 להסתיים בצורה תקינה, וליצור חיבורים חדשים רק באמצעות nat-address-3.
עכשיו נעדכן את שער ה-NAT הקיים באמצעות קובץ הכללים הזה. מתוך Cloud Shell:
gcloud alpha compute routers nats update consumer-nat-gw \
--router=consumer-cr \
--rules=natrulesfile.txt \
--router-region=us-east4
הפלט הבא אמור להתקבל :
Updating nat [consumer-nat-gw] in router [consumer-cr]...done.
מוודאים שהכלל הוגדר בהצלחה. מתוך Cloud Shell:
gcloud alpha compute routers nats rules list \ --nat=consumer-nat-gw --router=consumer-cr \ --router-region=us-east4 --format=yaml
הפלט הבא אמור להתקבל :
--- action: sourceNatActiveIps: - https://www.googleapis.com/compute/alpha/projects/ghaleb-s2/regions/us-east4/addresses/nat-address-3 sourceNatDrainIps: - https://www.googleapis.com/compute/alpha/projects/ghaleb-s2/regions/us-east4/addresses/nat-address-2 match: destination.ip == '35.192.142.134' ruleNumber: 100
שימו לב שהכתובת nat-address-2 עברה למצב drained (ריקון). כדי לוודא שחיבורים חדשים מ-VPC של הצרכן משתמשים עכשיו בכתובות ה-IP הנכונות של NAT, אתם יכולים לבצע את התרגיל הבא.
לבסוף, כדי למחוק כללי NAT משער Cloud NAT ולחזור להתנהגות ברירת המחדל. אפשר להשתמש בפקודת gcloud הבאה. מתוך Cloud Shell:
gcloud alpha compute routers nats rules delete 100 \ --nat=consumer-nat-gw --router=consumer-cr \ --router-region=us-east4 --quiet
הפלט הבא אמור להתקבל :
Updated [https://www.googleapis.com/compute/alpha/projects/ghaleb-s2/regions/us-east4/routers/consumer-cr]
כדי לוודא שלא קיימים יותר כללי NAT, נשתמש בפקודה describe של שער NAT
gcloud alpha compute routers nats describe consumer-nat-gw \ --router=consumer-cr --router-region=us-east4
הפלט הבא אמור להתקבל :
enableEndpointIndependentMapping: false name: consumer-nat-gw natIpAllocateOption: MANUAL_ONLY natIps: - https://www.googleapis.com/compute/alpha/projects/ghaleb-s2/regions/us-east4/addresses/nat-address-1 sourceSubnetworkIpRangesToNat: ALL_SUBNETWORKS_ALL_IP_RANGES
שימו לב שאין קטע rules: ב-YAML של הפלט. המשמעות היא שלא הוגדרו כללי NAT.
11. שלבים לניקוי נתונים
כדי להימנע מחיובים חוזרים, מומלץ למחוק את כל המשאבים שמשויכים ל-codelab הזה.
קודם צריך למחוק את כל המופעים.
מתוך Cloud Shell:
gcloud compute instances delete consumer-instance \ 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]. 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 nat-address-3 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-8080 --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-8080].
מחיקת תת-רשתות. מתוך Cloud Shell:
gcloud compute networks subnets delete consumer-e4 \ producer-e4 --region=us-east4 --quiet
הפלט הבא אמור להתקבל :
Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/subnetworks/consumer-e4]. Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/subnetworks/producer-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].
12. מעולה!
השלמת את שיעור ה-Lab בנושא כללי Cloud NAT.
מה כיסיתם
- איך מגדירים שער Cloud NAT לקראת כללי NAT.
- איך מעצבים כללי NAT באמצעות Common Expression Language (CEL).
- איך יוצרים כללי NAT ומצרפים אותם לשער NAT.
- איך בודקים כללי NAT ממופע.
- איך מעדכנים את הכללים של שער NAT.
- איך מוחקים כללי NAT וחוזרים להתנהגות ברירת המחדל של Cloud NAT.
השלבים הבאים
- אפשר להתנסות ביצירת כללי NAT מורכבים יותר, כמו בדוגמה הזו
- בודקים את כתובות ה-IP של NAT שמתרוקנות ומתבוננים בהשפעה על החיבור.
- מידע נוסף על רשתות ב-Google Cloud Platform
©Google, Inc. או השותפים העצמאיים שלה. כל הזכויות שמורות. אין להפיץ.