1. بررسی اجمالی
Cloud NAT یک ابزار قدرتمند است: با استفاده از آن، Compute Engine و Google Kubernetes Engine (GKE) میتوانند به منابع اینترنتی به روشی مقیاسپذیر و امن دسترسی داشته باشند، بدون اینکه بارهای کاری در حال اجرا بر روی آنها را در معرض دسترسی خارجی با استفاده از IPهای خارجی قرار دهند.
Cloud NAT دارای طراحی بدون پروکسی است که NAT را مستقیماً در لایه Andromeda SDN پیاده سازی می کند. به این ترتیب، هیچ تأثیری بر عملکرد شما بر حجم کاری شما نمیگذارد و بدون دردسر به بسیاری از VMها، مناطق و VPCها تقسیم میشود.
قوانین NAT یک فرمت برای Cloud NAT هستند. ویژگی NAT Rules در Cloud NAT به شما امکان می دهد قوانین دسترسی ایجاد کنید که نحوه استفاده از Cloud NAT برای اتصال به اینترنت را مشخص می کند. در حال حاضر قوانین NAT از انتخاب آدرس منبع NAT بر اساس آدرس مقصد پشتیبانی می کنند.
بدون قوانین NAT، ماشین مجازی با Cloud NAT فعال از همان مجموعه آدرسهای IP NAT برای دسترسی به تمام آدرسهای اینترنتی استفاده میکند.
گاهی اوقات، یک مورد استفاده NAT از Cloud NAT میخواهد تا از آدرسهای IP منبع مختلف برای مقصدهای خاص استفاده کند. یک قانون NAT یک تطابق و یک عمل مربوطه را تعریف می کند. هنگامی که قوانین NAT را مشخص کردید، بسته با هر قانون NAT مطابقت داده می شود. اگر یک قانون مطابقت داشته باشد، عمل مربوط به آن مطابقت انجام می شود.
برای اطلاعات بیشتر لطفاً بخش مستندات در مورد قوانین NAT را بررسی کنید.
چیزی که یاد خواهید گرفت
- نحوه راه اندازی یک دروازه NAT ابری برای آماده سازی قوانین NAT.
- نحوه طراحی قوانین NAT با استفاده از زبان Common Expression (CEL).
- نحوه ایجاد قوانین NAT و پیوست کردن آنها به دروازه NAT.
- چگونه قوانین NAT را از یک نمونه آزمایش کنیم.
- چگونه قوانین یک NAT Gateway را به روز کنیم.
- چگونه قوانین NAT را حذف کنیم و به رفتار پیشفرض Cloud NAT برگردیم.
آنچه شما نیاز دارید
- دانش اولیه موتور محاسباتی گوگل
- دانش پایه شبکه و TCP/IP
- دانش اولیه خط فرمان یونیکس/لینوکس
- انجام یک تور شبکه در GCP مانند آزمایشگاه شبکه در Google Cloud مفید است.
- آشنایی با اصول Cloud NAT
2. استفاده از Google Cloud Console و Cloud Shell
برای تعامل با GCP، از Google Cloud Console و Cloud Shell در سراسر این آزمایشگاه استفاده خواهیم کرد.
Google Cloud Console
در https://console.cloud.google.com میتوانید به کنسول Cloud دسترسی پیدا کنید.
تنظیم محیط خود به خود
- به کنسول Cloud وارد شوید و یک پروژه جدید ایجاد کنید یا از یک موجود استفاده مجدد کنید. اگر قبلاً یک حساب Gmail یا Google Workspace ندارید، باید یک حساب ایجاد کنید .
- نام پروژه شناسه شخصی شما برای این پروژه است. تا زمانی که از قراردادهای نامگذاری آن پیروی کنید، می توانید از هر چیزی که می خواهید استفاده کنید و می توانید آن را در هر زمان به روز کنید.
- شناسه پروژه باید در تمام پروژههای Google Cloud منحصربهفرد باشد و تغییرناپذیر باشد (پس از تنظیم نمیتوان آن را تغییر داد). کنسول Cloud به طور خودکار یک رشته منحصر به فرد تولید می کند. معمولاً برای شما مهم نیست که چیست. در اکثر کدها، باید به شناسه پروژه ارجاع دهید (و معمولاً به عنوان
PROJECT_ID
شناخته میشود)، بنابراین اگر آن را دوست ندارید، یک نمونه تصادفی دیگر ایجاد کنید، یا میتوانید شناسه پروژه را امتحان کنید و ببینید در دسترس است. سپس پس از ایجاد پروژه "یخ زده" می شود.
- در مرحله بعد، برای استفاده از منابع Google Cloud، باید صورتحساب را در Cloud Console فعال کنید .
اجرا کردن از طریق این کد لبه نباید هزینه زیادی داشته باشد، اگر اصلاً باشد. حتماً دستورالعملهای موجود در بخش «تمیز کردن» را دنبال کنید که به شما توصیه میکند چگونه منابع را خاموش کنید تا بیش از این آموزش متحمل صورتحساب نشوید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان 300 دلاری هستند.
Cloud Shell را راه اندازی کنید
در حالی که Google Cloud را می توان از راه دور از لپ تاپ شما کار کرد، در این کد لبه از Google Cloud Shell استفاده خواهید کرد، یک محیط خط فرمان که در Cloud اجرا می شود.
از کنسول GCP روی نماد Cloud Shell در نوار ابزار بالا سمت راست کلیک کنید:
تهیه و اتصال به محیط فقط چند لحظه طول می کشد. وقتی تمام شد، باید چیزی شبیه به این را ببینید:
این ماشین مجازی با تمام ابزارهای توسعه که شما نیاز دارید بارگذاری شده است. این یک فهرست اصلی 5 گیگابایتی دائمی را ارائه می دهد و در Google Cloud اجرا می شود و عملکرد و احراز هویت شبکه را تا حد زیادی افزایش می دهد. تمام کارهای شما در این آزمایشگاه به سادگی با یک مرورگر قابل انجام است.
3. راه اندازی آزمایشگاه
برای این آزمایشگاه، شما از یک پروژه استفاده خواهید کرد و دو VPC با یک زیر شبکه در هر کدام ایجاد خواهید کرد. شما آدرس های IP خارجی را رزرو می کنید و سپس یک دروازه NAT Cloud (با یک Cloud Router)، دو نمونه تولید کننده و همچنین یک نمونه مصرف کننده ایجاد و پیکربندی می کنید. پس از تأیید رفتار پیشفرض Cloud NAT، قوانین سفارشی Cloud NAT را ایجاد کرده و رفتار آنها را تأیید میکنید.
نمای کلی معماری شبکه:
4. آدرس های IP خارجی را رزرو کنید
بیایید تمام آدرس های IP خارجی را برای استفاده در این آزمایشگاه رزرو کنیم. این به شما کمک می کند تا همه قوانین NAT و فایروال مرتبط را در 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 نویسنده سرویس موجود است.
برای تهیه سریع نمونهها با همه نرمافزارهای مورد نیاز، از ویژگی Container Deployment on 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. Consumer VPC، Cloud NAT و Instance را راه اندازی کنید
اکنون که سرویس تولید کننده را ایجاد کرده اید، اکنون زمان ایجاد VPC مصرف کننده و دروازه NAT Cloud آن است.
پس از ایجاد 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 Rules در 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"`
سپس سعی کنید به هر دو نمونه تولیدکننده بپیچید و آدرس 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" است.
به طور مشابه، یک حلقه به هر سرویس بازتاب دهنده 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 نمونه خارج شوید، پس از اینکه قوانین NAT را پیکربندی کردیم، SSH را برمیگردانیم.
8. قوانین Cloud NAT ایجاد کنید
قوانین NAT با استفاده از دستور زبان Common Expression نوشته می شوند. برای اطلاعات بیشتر در مورد زبان بیان قوانین، زبان بیان قوانین را ببینید.
همچنین میتوانید با استفاده از دستورات gcloud، یک قانون NAT به دروازه NAT موجود اضافه کنید. ما هر دو گزینه را برای ایجاد قوانین 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"`
سپس سعی کنید به هر دو نمونه تولیدکننده بپیچید و آدرس 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 برابر با "nat-address-2" باشد.
یک حلقه به هر سرویس بازتاب دهنده 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 Rules را به صورت زیر به روز کنیم
از 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 را از دروازه NAT Cloud خود حذف کنید و به رفتار پیش فرض برگردید. می توانید از دستور 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 gateway describe استفاده کنیم
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. مراحل پاکسازی
برای جلوگیری از شارژ مجدد، باید تمام منابع مرتبط با این کد لبه را حذف کنید.
ابتدا تمام نمونه ها را حذف کنید.
از 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 را تکمیل کرده اید!
آنچه شما پوشش داده اید
- نحوه راه اندازی یک دروازه NAT Cloud در آماده سازی برای قوانین NAT.
- نحوه طراحی قوانین NAT با استفاده از زبان Common Expression (CEL).
- نحوه ایجاد قوانین NAT و پیوست کردن آنها به دروازه NAT.
- چگونه قوانین NAT را از یک نمونه آزمایش کنیم.
- چگونه قوانین یک NAT Gateway را به روز کنیم.
- چگونه قوانین NAT را حذف کنیم و به رفتار پیشفرض Cloud NAT برگردیم.
مراحل بعدی
- با ایجاد قوانین پیچیده NAT مانند این مثال، آزمایش کنید
- تخلیه آدرس IP NAT را کاوش کنید و تأثیر اتصال را مشاهده کنید.
- درباره شبکه در Google Cloud Platform بیشتر بیاموزید
©Google، Inc. یا شرکت های وابسته به آن. تمامی حقوق محفوظ است. توزیع نکنید.