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, ü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.

75eef5f6fd6d7e41.png

Yönlendirmesiz ortam kurulumu

  1. 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.

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ı 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_ID olarak 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".
  1. 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:

bce75f34b2c53987.png

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:

f6ef2b5f13479f3a.png

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ış:

815147de3de0bd19.png

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.