1. סקירה כללית
Cloud NAT הוא כלי עוצמתי: איתו, עומסי העבודה של Compute Engine ו-Google Kubernetes Engine (GKE) יכולים לגשת למשאבי אינטרנט באופן ניתן להתאמה ומאובטחת, בלי לחשוף את עומסי העבודה שרצים עליהם לגישה חיצונית באמצעות כתובות IP חיצוניות.
Cloud NAT כולל עיצוב ללא שרת proxy, שמטמיע את NAT ישירות בשכבת SDN של Andromeda. לכן אין השפעה על הביצועים של עומס העבודה, והוא מותאם בקלות למכונות וירטואליות, לאזורים ולרשתות 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 Gateway.
- איך למחוק כללי NAT ולחזור להתנהגות ברירת המחדל של Cloud NAT.
למה תזדקק?
- ידע בסיסי ב-Google Compute Engine
- ידע בסיסי בנושא רישות ו-TCP/IP
- ידע בסיסי בשורת הפקודה Unix/Linux
- מומלץ להשלים סיור ברשתות ב-GCP, כמו שיעור ה-Lab Networking in Google Cloud.
- הבנה של העקרונות הבסיסיים של Cloud NAT.
2. שימוש במסוף Google Cloud וב-Cloud Shell
כדי לקיים אינטראקציה עם GCP, נשתמש גם ב-Google Cloud Console וגם ב-Cloud Shell בשיעור ה-Lab הזה.
מסוף Google Cloud
אפשר להגיע אל Cloud Console בכתובת https://console.cloud.google.com.
הגדרת סביבה בקצב עצמאי
- נכנסים למסוף Cloud ויוצרים פרויקט חדש או עושים שימוש חוזר בפרויקט קיים. אם אין לכם עדיין חשבון Gmail או חשבון Google Workspace, עליכם ליצור חשבון.
- Project Name (שם הפרויקט) הוא המזהה האישי שלכם לפרויקט הזה. כל עוד אתם פועלים בהתאם למוסכמות של מתן השמות, תוכלו להשתמש בכל מה שתרצו ולעדכן אותו בכל שלב.
- Project ID חייב להיות ייחודי בכל הפרויקטים ב-Google Cloud ואי אפשר לשנות אותו (אי אפשר לשנות אותו אחרי שמגדירים אותו). מסוף Cloud יוצר מחרוזת ייחודית באופן אוטומטי. בדרך כלל לא מעניין אותך מה זה. ברוב ה-Codelabs תצטרכו להפנות אל מזהה הפרויקט (ובדרך כלל הוא מזוהה כ-
PROJECT_ID
), כך שאם הוא לא מוצא חן בעיניכם, תוכלו ליצור פרויקט אקראי אחר או לנסות בעצמכם ולבדוק אם הוא זמין. ואז המכשיר 'קפוא' לאחר יצירת הפרויקט.
- בשלב הבא צריך להפעיל את החיוב במסוף Cloud כדי להשתמש במשאבים של Google Cloud.
מעבר ב-Codelab הזה לא אמור לעלות הרבה, אם בכלל. חשוב לבצע את כל ההוראות בקטע 'ניקוי' שמסביר איך להשבית משאבים כדי שלא תצברו חיובים מעבר למדריך הזה. משתמשים חדשים ב-Google Cloud זכאים להצטרף לתוכנית תקופת ניסיון בחינם בשווי 1,200 ש"ח.
הפעלת Cloud Shell
אומנם אפשר להפעיל את Google Cloud מרחוק מהמחשב הנייד, אבל ב-Codelab הזה משתמשים ב-Google Cloud Shell, סביבת שורת הפקודה שפועלת ב-Cloud.
ממסוף GCP, לוחצים על הסמל של Cloud Shell בסרגל הכלים שבפינה השמאלית העליונה:
נדרשים רק כמה דקות כדי להקצות את הסביבה ולהתחבר אליה. בסיום התהליך, אתם אמורים לראות משהו כזה:
למכונה הווירטואלית הזו נטען כל כלי הפיתוח הדרושים. יש בה ספריית בית בנפח מתמיד של 5GB והיא פועלת ב-Google Cloud, מה שמשפר משמעותית את ביצועי הרשת והאימות. כל העבודה בשיעור ה-Lab הזה יכולה להתבצע באמצעות דפדפן בלבד.
3. הגדרה של שיעור Lab
בשיעור ה-Lab הזה תשתמשו בפרויקט ותיצרו שתי רשתות VPC שבכל אחת מהן יש רשת משנה. צריך לשמור כתובות IP חיצוניות, ואז ליצור ולהגדיר שער של Cloud NAT (עם Cloud Router), שתי מכונות של יצרן וגם מכונה של לקוח. לאחר אימות התנהגות ברירת המחדל של Cloud NAT, תיצרו כללים מותאמים אישית של Cloud NAT ותאמתו את ההתנהגות שלהם.
סקירה כללית של ארכיטקטורת Networking:
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. Producer 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 (קוד המקור זמין במאגר GitHub של מחבר השירות.
כדי להקצות במהירות את המכונות עם כל התוכנות הנדרשות, נשתמש בתכונה Container Deploy ב-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 ואת רשת המשנה, נוסיף כלל פשוט של חומת אש לתעבורת נתונים נכנסת (ingress) כדי לאפשר את ה-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 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 פרטי אבל הוא לא רלוונטי לפעילויות של שיעור ה-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.
יוצרים את מופע הבדיקה של הצרכן. אנחנו מאכלסים כאן את כתובות ה-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'.
באופן דומה, כתובת URL של 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 קיים באמצעות פקודות 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 החדש.
כתובת URL של 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 כדי לבדוק את התרוקנות הכתובות.
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' במצב של התרוקנות. ולהוסיף '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' למצב של התרוקנות. אנחנו משאירים לכם את האחריות לביצוע תרגול כדי לאמת שחיבורים חדשים מה-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, נשתמש בפקודה שמתארת את שער 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
שימו לב איך אין 'כללים': בפלט 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. מעולה!
השלמת את ה-Cloud NAT Rules Lab!
מה נכלל?
- איך להגדיר שער Cloud NAT כהכנה לכללי NAT.
- איך לעצב כללי NAT באמצעות Common Expression Language (CEL).
- איך ליצור כללי NAT ולצרף אותם לשער NAT.
- איך בודקים כללי NAT במכונה.
- איך לעדכן את הכללים של NAT Gateway.
- איך למחוק כללי NAT ולחזור להתנהגות ברירת המחדל של Cloud NAT.
השלבים הבאים
- נסו ליצור כללי NAT מורכבים יותר, כמו הדוגמה הזו
- בדיקה של התרוקנות כתובות ה-IP של NAT ובדיקת ההשפעה של החיבור.
- מידע נוסף על Networking ב-Google Cloud Platform
©Google, Inc. או השותפים העצמאיים שלה. כל הזכויות שמורות. אסור להפיץ.