Cloud NAT NAT kurallarını kullanma

1. Genel Bakış

Cloud NAT güçlü bir araçtır. Bu araç sayesinde Compute Engine ve Google Kubernetes Engine (GKE) iş yükleri, üzerinde çalışan iş yüklerini harici IP'ler kullanarak dışarıdan erişime maruz bırakmadan internet kaynaklarına ölçeklenebilir ve güvenli bir şekilde erişebilir.

Cloud NAT, proxy'siz bir tasarıma sahiptir ve NAT'yi doğrudan Andromeda SDN katmanında uygular. Böylece iş yükünüzü etkilemez ve çok sayıda sanal makine, bölge ve VPC'ye kolayca ölçeklenir.

NAT kuralları, Cloud NAT'nin uzantısıdır. Cloud NAT'deki NAT Kuralları özelliği, internete bağlanmak için Cloud NAT'nin nasıl kullanılacağını tanımlayan erişim kuralları oluşturmanızı sağlar. NAT kuralları şu anda hedef adrese göre kaynak NAT adresi seçimini desteklemektedir.

NAT kuralları olmadan, Cloud NAT'nin etkin olduğu bir sanal makine tüm internet adreslerine erişmek için aynı NAT IP adresi grubunu kullanır.

NAT kullanım alanında, bazen Cloud NAT'nin belirli hedefler için farklı kaynak IP adresleri kullanması gerekir. NAT kuralı, bir eşleşmeyi ve karşılık gelen işlemi tanımlar. NAT kurallarını belirttiğinizde paket her NAT kuralıyla eşleştirilir. Bir kural eşleşirse söz konusu eşleşmeye karşılık gelen işlem gerçekleşir.

Daha fazla bilgi için lütfen NAT Kuralları hakkındaki belgeler bölümünü inceleyin.

Neler öğreneceksiniz?

  • NAT Kuralları hazırlığı için Cloud NAT ağ geçidi ayarlama.
  • Common Expression Language (CEL) kullanarak NAT kuralları tasarlama.
  • NAT kuralları oluşturma ve bunları bir NAT ağ geçidine ekleme.
  • Bir örnekten NAT Kuralları'nı test etme.
  • NAT Ağ Geçidi kuralları nasıl güncellenir?
  • NAT kurallarını silme ve varsayılan Cloud NAT davranışına geri dönme

Gerekenler

  • Google Compute Engine ile ilgili temel bilgiler
  • Temel ağ iletişimi ve TCP/IP bilgisi
  • Temel Unix/Linux komut satırı bilgisi
  • Networking in Google Cloud (Google Cloud'da Ağ İletişimi) laboratuvarı gibi GCP'de ağ iletişimi turunu tamamlamış olmanız faydalı olacaktır.
  • Cloud NAT temellerini anlama

2. Google Cloud Console ve Cloud Shell'i kullanma

GCP ile etkileşime geçmek 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 erişilebilir.

75eef5f6fd6d7e41.png

Kendi hızınızda ortam kurulumu

  1. Cloud Console'da oturum açıp 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.

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

  • 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ıdır ve değiştirilemez (bir kez ayarlandıktan sonra değiştirilemez). Cloud Console, otomatik olarak benzersiz bir dize oluşturur. bunun ne olduğunu umursamıyorsunuz. Çoğu codelab'de, Proje Kimliğine referans vermeniz gerekir (ve bu kimlik genellikle PROJECT_ID olarak tanımlanır). Beğenmezseniz başka bir rastgele kod oluşturun ya da kendi proje kimliğinizi deneyip mevcut olup olmadığına bakın. Sıcaklık "soğudu" bazı önemli belgeler vardır.
  1. Sonraki adımda, Google Cloud kaynaklarını kullanmak için Cloud Console'da faturalandırmayı etkinleştirmeniz gerekir.

Bu codelab'i çalıştırmanın maliyeti, yüksek değildir. "Temizleme" bölümündeki talimatları izlediğinizden emin olun. bölümünde, bu eğiticinin dışında faturalandırmayla karşılaşmamanız için kaynakları nasıl kapatacağınız konusunda tavsiyelerde bulunuyoruz. Yeni Google Cloud kullanıcıları, 300 ABD doları değerindeki ücretsiz denemeden yararlanabilir.

Cloud Shell'i başlatma

Google Cloud dizüstü bilgisayarınızdan uzaktan çalıştırılabilse de 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 yer alan Cloud Shell simgesini tıklayın:

bce75f34b2c53987.png

Ortamı sağlamak ve bağlamak yalnızca birkaç dakika sürer. Tamamlandığında şuna benzer bir sonuç görmeniz gerekir:

f6ef2b5f13479f3a.png

İhtiyacınız olan tüm geliştirme araçlarını bu sanal makinede bulabilirsiniz. 5 GB boyutunda kalıcı bir ana dizin sunar ve Google Cloud üzerinde çalışarak ağ performansını ve kimlik doğrulamasını büyük ölçüde iyileştirir. Bu laboratuvardaki tüm çalışmalarınızı yalnızca bir tarayıcıyla yapabilirsiniz.

3. Laboratuvar Kurulumu

Bu laboratuvar için bir Proje kullanacak ve her birinde alt ağ bulunan iki VPC oluşturacaksınız. Harici IP adreslerini ayıracak, ardından iki üretici örneği ve bir tüketici örneği olacak şekilde bir Cloud NAT ağ geçidi (Cloud Yönlendiricisi ile) oluşturup yapılandıracaksınız. Varsayılan Cloud NAT davranışını doğruladıktan sonra Cloud NAT özel kuralları oluşturacak ve bu kuralları doğrulayacaksınız.

Ağ iletişimi mimarisine genel bakış:

815147de3de0bd19.png

4. Harici IP Adreslerini Ayırt

Tüm harici IP adreslerini bu laboratuvarda kullanılacak şekilde 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].

Ortam değişkeni olarak ayrılmış IP adreslerini 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)"`

Herhangi bir çıkış beklenmiyor ancak adreslerin doğru şekilde doldurulduğundan emin olmak gerekiyor. Tüm ortam değişkenlerinin değerlerinin çıktısını oluşturalım.

$ 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, internete yönelik hizmeti iki genel IP "üretici-adresi-1" kullanarak sunar. ve "Generative-address-2" ,

Önce 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

Sonra, 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

Şimdi, NAT IP adreslerinin 8080 bağlantı noktası üzerindeki üretici örneklerine ulaşmasına izin vermek için VPC güvenlik duvarı kuralları oluşturalım.

Cloud Shell'den ilk kural için:

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

Sonraki adım, iki üretici örneğini oluşturmaktır.

Üretici örnekleri, Docker Hub'da bulunan bir Docker container'ında IP yankı hizmetini çalıştırır (kaynak kod, hizmetin yazarının GitHub deposunda bulunur.

Örnekleri gerekli tüm yazılımlarla hızla sağlamak için Compute Engine'de Container dağıtımı özelliğini kullanacağız.

NAT kuralları yazabilmek için her bir örneğin farklı bir ayrılmış IP adresi sağlanır.

İ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 Örnek Oluşturma

Üretici hizmetini oluşturduğunuza göre şimdi sıra tüketici VPC'sini ve Cloud NAT ağ geçidini oluşturmaya geldi.

VPC'yi ve alt ağı oluşturduktan sonra, TCP kaynak IP aralıkları için IAP'ye izin vermek amacıyla basit bir giriş güvenlik duvarı kuralı ekleyeceğiz. Bu sayede gcloud'u kullanarak doğrudan tüketici örneklerine SSH uygulayabiliyoruz.

Ardından, manuel ayırma modunda basit bir Cloud NAT ağ geçidi ve ayrılmış "nat-address-1" adresini oluşturacağız görüntülenebilir. Codelab'in sonraki bölümlerinde özel kurallar eklemek için ağ geçidinin yapılandırmasını güncelleyeceğiz. .

Önce 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

Sonra, us-east4 bölgesinde 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

Şimdi, IAP aralık adreslerinin 22 numaralı bağlantı noktasındaki tüketici örneklerine ulaşmasına izin vermek için VPC güvenlik duvarı kuralları oluşturalım.

İlk güvenlik duvarı kuralı için Cloud Shell'den 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, önce bir Cloud Router örneği oluşturmamız gerekir (özel bir ASN numarası kullanırız ancak bu numara bu laboratuvarın etkinlikleriyle ilgili 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 referans verebilmek 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 aynı ayrılmış IP'yi "nat-address-1" ile kullanan varsayılan Cloud NAT davranışını kullanır harici adreslerle iletişim kurmanızı sağlar.

Cloud NAT'deki 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ış (tam çıkış kısa olması için kısaltıldı)

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ğinden önce her iki üretici IP'sini de alıp ortam 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 kıvrılmayı 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 adresini görmeniz gerekir. Bu, harici ayrılmış IP'nin "nat-address-1" değerine eşittir.

Benzer şekilde, herhangi bir harici IP yansıtıcı hizmetinin curl işlemi 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

Örneğin SSH oturumundan şimdilik çıkış yapın. NAT Kurallarını yapılandırdıktan sonra SSH üzerinden tekrar bağlanacağız.

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 bölümüne bakın.

Mevcut bir NAT ağ geçidine gcloud komutlarını kullanarak da NAT kuralı 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 çıktıyı almanız gerekir :

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 çıktıyı almanız gerekir :

RULE_NUMBER  MATCH
100          destination.ip == '35.192.142.134'

Şimdi 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 çıktıyı almanız gerekir :

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 çıktıyı almanız gerekir :

Creating Rule [100] in NAT [consumer-nat-gw]...done.

Kuralın başarıyla oluşturulduğunu doğrulamak için önceki komutu tekrarlayın. 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 çıktıyı almanız gerekir :

---
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, hem "nat-address1"in ve "nat-address-2" harici adresler "IN_USE" olarak görünür. Bu işlemi görmek için Cloud Shell'den şu komutu çalıştırın:

$ gcloud compute addresses list

Aşağıdaki çıkışı beklemeniz 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ı davranışını doğrulama

Bu noktada, tüketici örneği, generative-address-2 ile iletişim kurmak için nat-address-2'yi kullanmak için, 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ış (tam çıkış kısa olması için kısaltıldı)

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ğinden önce her iki üretici IP'sini de alıp ortam 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 kıvrılmayı 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 de farklı bir IP adresi döndürüldüğünü göreceksiniz. İlk IP adresi, varsayılan davranışla aynı olmalıdır. İkinci IP adresi "nat-address-2"ye eşit olmalıdır eklenir.

Herhangi bir harici IP yansıtıcı hizmetinin curl değeri, yine varsayılan davranış olarak 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

Örneğin SSH oturumundan şimdilik çıkış yapın, adres boşaltmayı test etmek için SSH'ye geri döneceğiz.

10. & ürününü güncelle Cloud NAT Kurallarını Silme

Mevcut Cloud NAT kurallarını güncelleyebilirsiniz. Örneğin, yeni IP adreslerini ilişkilendirebilir ve mevcut kurallarla ilişkilendirilmiş 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 artık "nat-address-2"yi yerleştiriyor boş bir durumda. Ve "nat-address-3" ifadesini ekleyin etkin durumda olmalıdır. Bu, nat-address-2 kullanan mevcut bağlantıların sorunsuz bir şekilde sonlandırılmasına olanak tanırken, yalnızca nat-address-3 kullanarak yeni bağlantılar oluşturulmasına izin vermelidir.

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 çıktıyı almanız gerekir :

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 çıktıyı almanız gerekir :

---
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 nasıl kullanıldığına dikkat edin boş duruma getirilmiştir. Tüketici VPC'sinden gelen yeni bağlantıların artık doğru NAT IP'lerini kullandığını doğrulamak için bu konuyu size bırakıyoruz.

Son olarak, NAT kurallarını Cloud NAT ağ geçidinizden silip varsayılan davranışa geri dönün. 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 çıktıyı almanız gerekir :

Updated [https://www.googleapis.com/compute/alpha/projects/ghaleb-s2/regions/us-east4/routers/consumer-cr]

Başka NAT kuralı olmadığını doğrulamak 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 çıktıyı almanız gerekir :

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

Bir "kuralların" nasıl olmadığına dikkat edin: bölümünde olması gerekir. Yapılandırılmış NAT kuralı belirtilmemiş.

11. Temizleme Adımları

Yinelenen ö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 çıkış :

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 Yönlendirici'yi silin. Cloud Shell'den:

gcloud compute routers delete consumer-cr \
--region us-east4 --quiet

Aşağıdaki çıktıyı almanız gerekir :

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 çıktıyı almanız gerekir :

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 çıktıyı almanız gerekir :

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 çıktıyı almanız gerekir :

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 çıktıyı almanız gerekir :

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 Rules Lab'i tamamladınız.

İşlediğiniz konular

  • NAT Kuralları hazırlığı için Cloud NAT ağ geçidi ayarlama.
  • Common Expression Language (CEL) kullanarak NAT kuralları tasarlama.
  • NAT kuralları oluşturma ve bunları bir NAT ağ geçidine ekleme.
  • Bir örnekten NAT Kuralları'nı test etme.
  • NAT Ağ Geçidi kuralları nasıl güncellenir?
  • NAT kurallarını silme ve varsayılan Cloud NAT davranışına geri dönme

Sonraki Adımlar

  • Bu örnekteki gibi daha karmaşık NAT Kuralları oluşturmayı deneyin.
  • NAT IP adreslerini boşaltan IP adreslerini keşfedin ve bağlantı üzerindeki etkiyi gözlemleyin.
  • Google Cloud Platform'da Ağ İletişimi hakkında daha fazla bilgi

©Google, Inc. veya satış ortakları. Tüm hakları saklıdır. Bu içeriği dağıtmayın.