1. Genel Bakış
Cloud NAT, güçlü bir araçtır: Bu araç sayesinde Compute Engine ve Google Kubernetes Engine (GKE) iş yükleri, üzerlerinde çalışan iş yüklerini harici IP'ler kullanarak dış erişime açmadan internet kaynaklarına ölçeklenebilir ve güvenli bir şekilde erişebilir.
Cloud NAT, NAT'yi doğrudan Andromeda SDN katmanında uygulayan, proxy'siz bir tasarıma sahiptir. Bu nedenle, iş yükünüzün performansı etkilenmez ve birçok sanal makine, bölge ve VPC'ye kolayca ölçeklenebilir.
NAT kuralları, Cloud NAT'in bir uzantısıdır. Cloud NAT'teki NAT kuralları özelliği, Cloud NAT'in internete bağlanmak için nasıl kullanılacağını tanımlayan erişim kuralları oluşturmanıza olanak tanır. NAT kuralları şu anda hedef adrese göre kaynak NAT adresi seçimini desteklemektedir.
NAT kuralları olmadan, Cloud NAT'in etkin olduğu bir sanal makine, tüm internet adreslerine ulaşmak için aynı NAT IP adresleri grubunu kullanır.
Bazen bir NAT kullanım alanı, Cloud NAT'in belirli hedefler için farklı kaynak IP adresleri kullanmasını gerektirir. NAT kuralı, bir eşleşmeyi ve ilgili işlemi tanımlar. NAT kurallarını belirledikten sonra paket, her NAT kuralıyla eşleştirilir. Bir kural eşleşirse bu eşleşmeye karşılık gelen işlem gerçekleştirilir.
Daha fazla bilgi için lütfen NAT kuralları hakkındaki dokümanlar bölümünü inceleyin.
Neler öğreneceksiniz?
- NAT kurallarına hazırlık olarak Cloud NAT ağ geçidi oluşturma
- Common Expression Language (CEL) kullanarak NAT kuralları tasarlama
- NAT kuralları oluşturma ve bunları NAT ağ geçidine ekleme.
- NAT kurallarını bir örnekten test etme
- NAT ağ geçidinin kuralları nasıl güncellenir?
- NAT kurallarını silme ve varsayılan Cloud NAT davranışına geri dönme
İhtiyacınız olanlar
- Google Compute Engine hakkında temel düzeyde bilgi sahibi olma
- Temel ağ iletişimi ve TCP/IP bilgisi
- Temel düzeyde Unix/Linux komut satırı bilgisi
- Google Cloud'da Ağ İletişimi laboratuvarı gibi GCP'de ağ iletişimiyle ilgili bir turu tamamlamış olmanız faydalıdır.
- Cloud NAT'nin temel özelliklerini anlama
2. Google Cloud Console ve Cloud Shell'i kullanma
GCP ile etkileşim kurmak için bu laboratuvar boyunca hem Google Cloud Console hem de Cloud Shell'i kullanacağız.
Google Cloud Console
Cloud Console'a https://console.cloud.google.com adresinden ulaşabilirsiniz.

Yönlendirmesiz ortam kurulumu
- Cloud Console'da oturum açın ve yeni bir proje oluşturun veya mevcut bir projeyi yeniden kullanın. Gmail veya Google Workspace hesabınız yoksa hesap oluşturmanız gerekir.



- Proje Adı, bu proje için kişisel tanımlayıcınızdır. Adlandırma kurallarına uyduğunuz sürece istediğiniz her şeyi kullanabilir ve istediğiniz zaman güncelleyebilirsiniz.
- Proje kimliği, tüm Google Cloud projelerinde benzersiz olmalı ve sabittir (ayarlandıktan sonra değiştirilemez). Cloud Console, benzersiz bir dizeyi otomatik olarak oluşturur. Genellikle bu dizenin ne olduğuyla ilgilenmezsiniz. Çoğu codelab'de proje kimliğine (genellikle
PROJECT_IDolarak tanımlanır) başvurmanız gerekir. Bu nedenle, beğenmezseniz başka bir rastgele kimlik oluşturun veya kendi kimliğinizi deneyip kullanılabilir olup olmadığını kontrol edin. Proje oluşturulduktan sonra bu ayar "dondurulur".
- Ardından, Google Cloud kaynaklarını kullanmak için Cloud Console'da faturalandırmayı etkinleştirmeniz gerekir.
Bu codelab'i tamamlamak neredeyse hiç maliyetli değildir. Bu eğitimin ötesinde faturalandırma ücreti alınmaması için kaynakları nasıl kapatacağınız konusunda size tavsiyelerde bulunan "Temizleme" bölümündeki talimatları uyguladığınızdan emin olun. Google Cloud'un yeni kullanıcıları 300 ABD doları değerinde ücretsiz deneme programından yararlanabilir.
Cloud Shell'i başlatma
Google Cloud, dizüstü bilgisayarınızdan uzaktan çalıştırılabilir. Ancak bu codelab'de, Cloud'da çalışan bir komut satırı ortamı olan Google Cloud Shell'i kullanacaksınız.
GCP Console'da sağ üstteki araç çubuğunda Cloud Shell simgesini tıklayın:

Ortamın temel hazırlığı ve bağlanması yalnızca birkaç dakikanızı alır. İşlem tamamlandığında aşağıdakine benzer bir sonuç görürsünüz:

Bu sanal makine, ihtiyaç duyacağınız tüm geliştirme araçlarını içerir. 5 GB boyutunda kalıcı bir ana dizin sunar ve Google Cloud üzerinde çalışır. Bu sayede ağ performansı ve kimlik doğrulama önemli ölçüde güçlenir. Bu laboratuvardaki çalışmalarınızın tamamını yalnızca bir tarayıcı kullanarak yapabilirsiniz.
3. Laboratuvar Kurulumu
Bu laboratuvarda bir proje kullanacak ve her birinde alt ağ bulunan iki VPC oluşturacaksınız. Öncelikle harici IP adresleri ayıracak, ardından bir Cloud NAT ağ geçidi (Cloud Router ile), iki üretici örneği ve bir tüketici örneği oluşturup yapılandıracaksınız. Varsayılan Cloud NAT davranışını doğruladıktan sonra Cloud NAT özel kurallarını oluşturacak ve davranışlarını doğrulayacaksınız.
Ağ mimarisine genel bakış:

4. Harici IP adreslerini ayırtma
Bu laboratuvarda kullanılacak tüm harici IP adreslerini ayıralım. Bu, hem tüketici hem de üretici VPC'sinde ilgili tüm NAT ve güvenlik duvarı kurallarını yazmanıza yardımcı olur.
Cloud Shell'den:
gcloud compute addresses create nat-address-1 nat-address-2 nat-address-3 producer-address-1 producer-address-2 --region us-east4
Çıkış:
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].
Ayrılmış IP adreslerini ortam değişkenleri olarak doldurun.
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)"`
Çıkış beklenmez ancak adreslerin doğru şekilde doldurulduğu onaylanır. Tüm ortam değişkenlerinin değerlerini çıkış olarak verelim.
$ env | egrep '^(nat|producer)ip[1-3]'
Çıkış:
producerip1=<Actual Producer IP 1> producerip2=<Actual Producer IP 2> natip1=<NAT IP 1> natip2=<NAT IP 2> natip3=<NAT IP 3>
5. Üretici VPC'si ve örnek kurulumu.
Şimdi yapımcı kaynakları için kaynakları oluşturacağız. Üretici VPC'sinde çalışan örnekler, "producer-address-1" ve "producer-address-2" olmak üzere iki genel IP kullanarak internete yönelik hizmet sunar.
Öncelikle VPC'yi oluşturalım. Cloud Shell'den:
gcloud compute networks create producer-vpc --subnet-mode custom
Çıkış:
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
Ardından, us-east4 bölgesinde alt ağı oluşturalım. Cloud Shell'den:
gcloud compute networks subnets create producer-e4 \ --network producer-vpc --range 10.0.0.0/24 --region us-east4
Çıkış:
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
Ardından, NAT IP adreslerinin 8080 numaralı bağlantı noktasında üretici örneklerine ulaşmasına izin vermek için VPC güvenlik duvarı kuralları oluşturalım.
İlk kural için Cloud Shell'den:
gcloud compute firewall-rules create producer-allow-8080 \ --network producer-vpc --allow tcp:8080 \ --source-ranges $natip1,$natip2,$natip3
Çıkış:
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
Bir sonraki adım, iki üretici örneği oluşturmaktır.
Üretici örnekleri, Docker Hub'da bulunan bir Docker kapsayıcısında IP yankı hizmeti çalıştırır (kaynak kodu, hizmet yazarının GitHub deposunda bulunur).
Gerekli tüm yazılımlarla örnekleri hızlıca sağlamak için Compute Engine'de kapsayıcı dağıtımı özelliğini kullanacağız.
NAT kuralları yazabilmek için her örneği farklı bir ayrılmış IP adresiyle sağlayacağız.
İlk örneği oluşturun. Cloud Shell'den:
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
Çıkış:
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
Ardından ikinci örneği oluşturun. Cloud Shell'den:
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
Çıkış:
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. Tüketici VPC'si, Cloud NAT ve örneğini ayarlama
Üretici hizmetini oluşturduğunuza göre artık tüketici VPC'sini ve Cloud NAT ağ geçidini oluşturabilirsiniz.
VPC ve alt ağ oluşturulduktan sonra, TCP kaynak IP aralıkları için IAP'ye izin veren basit bir giriş güvenlik duvarı kuralı ekleyeceğiz. Bu sayede, gcloud'u kullanarak doğrudan tüketici örneklerine SSH üzerinden bağlanabiliriz.
Ardından, manuel ayırma modunda basit bir Cloud NAT ağ geçidi ve bununla ilişkili "nat-address-1" ayrılmış adresini oluştururuz. Bu codelab'in sonraki bölümlerinde, özel kurallar eklemek için ağ geçidinin yapılandırmasını güncelleyeceğiz. .
Öncelikle VPC'yi oluşturalım. Cloud Shell'den:
gcloud compute networks create consumer-vpc --subnet-mode custom
Çıkış:
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
Ardından, us-east4'te bir alt ağ oluşturalım. Cloud Shell'den:
gcloud compute networks subnets create consumer-e4 \ --network consumer-vpc --range 10.0.0.0/24 --region us-east4
Çıkış:
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
Ardından, IAP aralık adreslerinin 22 numaralı bağlantı noktasında tüketici örneklerine ulaşmasına izin vermek için bir VPC güvenlik duvarı kuralı oluşturalım.
İlk güvenlik duvarı kuralı için Cloud Shell'de aşağıdaki komutu çalıştırın:
gcloud compute firewall-rules create consumer-allow-iap \ --network consumer-vpc --allow tcp:22 \ --source-ranges 35.235.240.0/20
Çıkış:
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 ağ geçidi oluşturmadan önce bir Cloud Router örneği oluşturmamız gerekir (özel bir ASN numarası kullanırız ancak bu laboratuvarın etkinlikleri için bu numara önemli değildir). Cloud Shell'den:
gcloud compute routers create consumer-cr \ --region=us-east4 --network=consumer-vpc \ --asn=65501
Çıkış:
Creating router [consumer-cr]...done. NAME REGION NETWORK consumer-cr us-east4 consumer-vpc
Ardından NAT ağ geçidi örneğini oluşturun. Cloud Shell'den:
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
Çıkış:
Creating NAT [consumer-nat-gw] in router [consumer-cr]...done.
Tüketici testi örneğini oluşturun. Daha sonra örnek içinde bunlara başvurabilmek için ayrılmış üretici IP'lerini burada doldururuz. Cloud Shell'den:
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
Çıkış:
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. Varsayılan Cloud NAT davranışını doğrulama
Bu noktada, tüketici örneği tüm harici adreslerle iletişim kurmak için aynı ayrılmış IP olan "nat-address-1"i kullanan varsayılan Cloud NAT davranışını kullanır.
Cloud NAT'teki yeni NAT kuralları özelliğini kullanmadan önce bu davranışı doğrulayalım.
Tüketici örneğine SSH uygulayın. Cloud Shell'den:
gcloud compute ssh consumer-instance --zone=us-east4-a
Şimdi örnek kabuğunda olmalısınız.
Örnek Çıkış (kısa olması için tam çıkış kırpılmıştır)
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:~$
Tüketici örneği içinden önce her iki üretici IP'sini de getirelim ve bunları çevre değişkenleri olarak dolduralım.
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"`
Ardından, her iki üretici örneğine de curl komutu göndermeyi deneyin ve döndürülen kaynak IP adresini gözlemleyin.
<username>@consumer-instance:~$ curl http://$producerip1:8080 34.136.8.83 <username>@consumer-instance:~$ curl http://$producerip2:8080 34.136.8.83
Her iki uç nokta için de aynı IP adresinin döndürüldüğünü görmelisiniz. Bu adres, harici ayrılmış IP "nat-address-1" değerine eşittir.
Benzer şekilde, herhangi bir harici IP yansıtıcı hizmetine yapılan bir curl isteği de aynı IP'yi göstermelidir. Örneğin:
<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
Şimdilik örneğin SSH oturumundan çıkın. NAT kurallarını yapılandırdıktan sonra SSH'ye geri döneceğiz.
8. Cloud NAT kuralları oluşturma
NAT kuralları, Common Expression Language söz dizimi kullanılarak yazılır. Kural ifadesi dili hakkında daha fazla bilgi için Kural ifadesi dili başlıklı makaleyi inceleyin.
gcloud komutlarını kullanarak mevcut bir NAT ağ geçidine NAT kuralı da ekleyebilirsiniz. Cloud NAT kuralları oluşturmak için her iki seçeneği de inceleyeceğiz.
Öncelikle bir NAT kuralı YAML dosyası oluşturalım.
Cloud Shell'den:
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
Ardından, bu kural dosyasını kullanarak mevcut NAT ağ geçidimizi güncelleyelim. Cloud Shell'den:
gcloud alpha compute routers nats update consumer-nat-gw \
--router=consumer-cr \
--rules=natrulesfile.txt \
--router-region=us-east4
Aşağıdaki çıkışı alırsınız :
Updating nat [consumer-nat-gw] in router [consumer-cr]...done.
Kuralın başarıyla yapılandırıldığını doğrulayın. Cloud Shell'den:
gcloud alpha compute routers nats rules list \ --nat=consumer-nat-gw --router=consumer-cr \ --router-region=us-east4
Aşağıdaki çıkışı alırsınız :
RULE_NUMBER MATCH 100 destination.ip == '35.192.142.134'
Şimdi de aynı kuralı yalnızca gcloud komutlarını kullanarak yeniden oluşturmayı deneyelim. Önce mevcut kuralı silin. Cloud Shell'den:
gcloud alpha compute routers nats rules delete 100 \ --nat=consumer-nat-gw --router=consumer-cr \ --router-region=us-east4 --quiet
Aşağıdaki çıkışı alırsınız :
Updated [https://www.googleapis.com/compute/alpha/projects/ghaleb-s2/regions/us-east4/routers/consumer-cr]
Ardından, bu gcloud komutunu kullanarak kuralı yeniden oluşturun. Cloud Shell'den:
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
Aşağıdaki çıkışı alırsınız :
Creating Rule [100] in NAT [consumer-nat-gw]...done.
Kuralın başarıyla oluşturulduğunu doğrulamak için önceki komutu tekrar girin. Bu kez, kuralın tüm ayrıntılarını görmek için YAML biçimlendirme anahtarını ekleyeceğiz.
Cloud Shell'den:
gcloud alpha compute routers nats rules list\ --nat=consumer-nat-gw --router=consumer-cr \ --router-region=us-east4 --format=yaml
Aşağıdaki çıkışı alırsınız :
--- 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
Son olarak, "nat-address1" ve "nat-address-2" harici adreslerinin artık "IN_USE" olarak gösterildiğini unutmayın. Bunu görmek için Cloud Shell'de şu komutu çalıştırın:
$ gcloud compute addresses list
Aşağıdaki çıkışı görmeniz gerekir (Gerçek IP adresleri, ayırdığınız adreslerle eşleşmelidir) :
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 kurallarının davranışını doğrulama
Bu noktada, tüketici örneği, üretici-adres-2 ile iletişim kurmak için nat-address-2'yi kullanmak üzere oluşturulan Cloud NAT kuralını kullanmalıdır.
Bu davranışı doğrulayalım. Tüketici örneğine SSH uygulayın. Cloud Shell'den:
gcloud compute ssh consumer-instance --zone=us-east4-a
Şimdi örnek kabuğunda olmalısınız.
Örnek Çıkış (kısa olması için tam çıkış kırpılmıştır)
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:~$
Tüketici örneği içinden önce her iki üretici IP'sini de getirelim ve bunları çevre değişkenleri olarak dolduralım.
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"`
Ardından, her iki üretici örneğine de curl komutu göndermeyi deneyin ve döndürülen kaynak IP adresini gözlemleyin.
<username>@consumer-instance:~$ curl http://$producerip1:8080 34.136.8.83 <username>@consumer-instance:~$ curl http://$producerip2:8080 34.70.137.35
Artık her iki uç nokta için farklı bir IP adresi döndürüldüğünü görmelisiniz. İlk IP adresi, varsayılan davranışla aynı olmalıdır. Yeni NAT kuralı eklendikten sonra ikinci IP adresi "nat-address-2"ye eşit olmalıdır.
Herhangi bir harici IP yansıtıcı hizmetine yapılan curl işlemi, varsayılan davranışta olduğu gibi aynı IP'yi göstermelidir. Örneğin:
<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
Şimdilik örneğin SSH oturumundan çıkın. Adres boşaltma işlemini test etmek için SSH üzerinden geri döneceğiz.
10. Bulut NAT kurallarını güncelleme ve silme
Mevcut Cloud NAT kurallarını güncelleyebilirsiniz. Örneğin, yeni IP adresleri ilişkilendirebilir ve mevcut kurallarla ilişkili mevcut IP adreslerini boşaltabilirsiniz.
NAT kuralları dosyasını aşağıdaki gibi güncelleyelim.
Cloud Shell'den:
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
Bu yeni dosya, "nat-address-2"yi boşaltılmış duruma getirir. Ayrıca "nat-address-3"ü etkin duruma ekleyin. Bu, nat-address-2'yi kullanan mevcut bağlantıların düzgün şekilde sonlandırılmasına olanak tanırken yalnızca nat-address-3'ü kullanan yeni bağlantılar oluşturur.
Ardından, bu kural dosyasını kullanarak mevcut NAT ağ geçidimizi güncelleyelim. Cloud Shell'den:
gcloud alpha compute routers nats update consumer-nat-gw \
--router=consumer-cr \
--rules=natrulesfile.txt \
--router-region=us-east4
Aşağıdaki çıkışı alırsınız :
Updating nat [consumer-nat-gw] in router [consumer-cr]...done.
Kuralın başarıyla yapılandırıldığını doğrulayın. Cloud Shell'den:
gcloud alpha compute routers nats rules list \ --nat=consumer-nat-gw --router=consumer-cr \ --router-region=us-east4 --format=yaml
Aşağıdaki çıkışı alırsınız :
--- 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"nin artık nasıl boşaltılmış duruma getirildiğine dikkat edin. Tüketici VPC'sinden gelen yeni bağlantıların artık doğru NAT IP'lerini kullandığını doğrulama alıştırmasını size bırakıyoruz.
Son olarak, NAT kurallarını Cloud NAT ağ geçidinizden silmek ve varsayılan davranışa geri dönmek için. Aşağıdaki gcloud komutunu kullanabilirsiniz. Cloud Shell'den:
gcloud alpha compute routers nats rules delete 100 \ --nat=consumer-nat-gw --router=consumer-cr \ --router-region=us-east4 --quiet
Aşağıdaki çıkışı alırsınız :
Updated [https://www.googleapis.com/compute/alpha/projects/ghaleb-s2/regions/us-east4/routers/consumer-cr]
Başka NAT kuralı olmadığından emin olmak için NAT ağ geçidi açıklama komutunu kullanalım.
gcloud alpha compute routers nats describe consumer-nat-gw \ --router=consumer-cr --router-region=us-east4
Aşağıdaki çıkışı alırsınız :
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
Çıkış YAML'sinde "rules:" bölümü olmadığını fark edin. NAT kurallarının yapılandırılmadığını gösterir.
11. Temizleme adımları
Tekrarlanan ödemelerden kaçınmak için bu codelab ile ilişkili tüm kaynakları silmeniz gerekir.
Önce tüm örnekleri silin.
Cloud Shell'den:
gcloud compute instances delete consumer-instance \ producer-instance-1 producer-instance-2 \ --zone us-east4-a --quiet
Beklenen çıktı :
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].
Ardından, Cloud Router'ı silin. Cloud Shell'den:
gcloud compute routers delete consumer-cr \ --region us-east4 --quiet
Aşağıdaki çıkışı alırsınız :
Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/routers/consumer-cr].
Tüm harici IP adreslerini serbest bırakın. Cloud Shell'den:
gcloud compute addresses delete nat-address-1 \ nat-address-2 nat-address-3 producer-address-1 \ producer-address-2 --region us-east4 --quiet
Aşağıdaki çıkışı alırsınız :
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 güvenlik duvarı kurallarını silin. Cloud Shell'den:
gcloud compute firewall-rules delete consumer-allow-iap \ producer-allow-8080 --quiet
Aşağıdaki çıkışı alırsınız :
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].
Alt ağları silin. Cloud Shell'den:
gcloud compute networks subnets delete consumer-e4 \ producer-e4 --region=us-east4 --quiet
Aşağıdaki çıkışı alırsınız :
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].
Son olarak, VPC'leri silelim. Cloud Shell'den:
gcloud compute networks delete consumer-vpc \ producer-vpc --quiet
Aşağıdaki çıkışı alırsınız :
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. Tebrikler!
Cloud NAT Kuralları Laboratuvarı'nı tamamladınız.
Kapsamınız
- NAT kurallarına hazırlık olarak Cloud NAT ağ geçidi oluşturma
- Common Expression Language (CEL) kullanarak NAT kuralları tasarlama
- NAT kuralları oluşturma ve bunları NAT ağ geçidine ekleme.
- NAT kurallarını bir örnekten test etme
- NAT ağ geçidinin kuralları nasıl güncellenir?
- NAT kurallarını silme ve varsayılan Cloud NAT davranışına geri dönme
Sonraki Adımlar
- Bu örnekte olduğu gibi daha karmaşık NAT kuralları oluşturmayı deneyin.
- NAT IP adreslerinin boşaltılmasını inceleyin ve bağlantı üzerindeki etkisini gözlemleyin.
- Google Cloud Platform'da ağ iletişimi hakkında daha fazla bilgi
©Google, Inc. veya bağlı kuruluşları. Tüm hakları saklıdır. Dağıtmayın.