Menggunakan aturan Cloud NAT NAT

1. Ringkasan

Cloud NAT adalah alat yang andal. Dengan Cloud NAT, workload Compute Engine dan Google Kubernetes Engine (GKE) dapat mengakses resource internet dengan cara yang skalabel dan aman, tanpa mengekspos beban kerja yang berjalan padanya ke akses luar menggunakan IP eksternal.

Cloud NAT memiliki desain tanpa proxy, yang menerapkan NAT langsung di lapisan SDN Andromeda. Dengan demikian, workload ini tidak berdampak pada performa dan dapat diskalakan dengan mudah ke banyak VM, region, dan VPC.

Aturan NAT adalah ekstensi untuk Cloud NAT. Fitur Aturan NAT di Cloud NAT dapat Anda gunakan untuk membuat aturan akses yang menentukan cara Cloud NAT digunakan untuk terhubung ke internet. Saat ini Aturan NAT mendukung pemilihan alamat NAT sumber berdasarkan alamat tujuan.

Tanpa Aturan NAT, VM dengan Cloud NAT aktif akan menggunakan kumpulan alamat IP NAT yang sama untuk menjangkau semua alamat internet.

Terkadang, kasus penggunaan NAT meminta Cloud NAT untuk menggunakan alamat IP sumber yang berbeda untuk tujuan tertentu. Aturan NAT menentukan kecocokan dan tindakan yang sesuai. Setelah Anda menentukan aturan NAT, paket tersebut akan dicocokkan dengan setiap aturan NAT. Jika sebuah aturan cocok, tindakan yang sesuai dengan pencocokan tersebut akan terjadi.

Untuk mengetahui informasi selengkapnya, tinjau bagian Dokumentasi tentang Aturan NAT .

Yang akan Anda pelajari

  • Cara menyiapkan gateway Cloud NAT sebagai persiapan untuk Aturan NAT.
  • Cara merancang Aturan NAT menggunakan Common Expression Language (CEL).
  • Cara membuat Aturan NAT dan melampirkannya ke {i>Gateway NAT<i}.
  • Cara menguji Aturan NAT dari instance.
  • Cara memperbarui aturan Gateway NAT.
  • Cara menghapus aturan NAT dan mengembalikan ke perilaku Cloud NAT default.

Yang Anda butuhkan

  • Pengetahuan dasar tentang Google Compute Engine
  • Pengetahuan dasar tentang networking dan TCP/IP
  • Pengetahuan dasar mengenai command line Unix/Linux
  • Anda dapat menyelesaikan tur jaringan di GCP seperti lab Jaringan di Google Cloud.
  • Pemahaman tentang dasar-dasar Cloud NAT.

2. Menggunakan Google Cloud Console dan Cloud Shell

Untuk berinteraksi dengan GCP, kami akan menggunakan Konsol Google Cloud dan Cloud Shell di seluruh lab ini.

Konsol Google Cloud

Konsol Cloud dapat diakses di https://console.cloud.google.com.

75eef5f6fd6d7e41.pngS

Penyiapan lingkungan mandiri

  1. Login ke Cloud Console lalu buat project baru atau gunakan kembali project yang sudah ada. Jika belum memiliki akun Gmail atau Google Workspace, Anda harus membuatnya.

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

  • Project Name adalah ID pribadi Anda untuk project ini. Selama Anda mengikuti konvensi penamaannya, Anda dapat menggunakan apa pun yang Anda inginkan dan dapat memperbaruinya kapan saja.
  • Project ID harus unik di semua project Google Cloud dan tidak dapat diubah (tidak dapat diubah setelah ditetapkan). Cloud Console otomatis membuat string unik; biasanya Anda tidak peduli tentang apa itu. Di sebagian besar codelab, Anda harus mereferensikan Project ID (dan biasanya diidentifikasi sebagai PROJECT_ID). Jadi, jika tidak suka, buat codelab acak lainnya, atau, Anda dapat mencobanya sendiri dan melihat apakah tersedia. Kemudian akan "dibekukan" setelah proyek dibuat.
  1. Selanjutnya, Anda harus mengaktifkan penagihan di Cloud Console untuk menggunakan resource Google Cloud.

Menjalankan operasi dalam codelab ini seharusnya tidak memerlukan banyak biaya, bahkan mungkin tidak sama sekali. Pastikan untuk mengikuti petunjuk yang ada di bagian "Membersihkan" yang memberi tahu Anda cara menonaktifkan resource sehingga tidak menimbulkan penagihan di luar tutorial ini. Pengguna baru Google Cloud memenuhi syarat untuk mengikuti program Uji Coba Gratis senilai$300 USD.

Mulai Cloud Shell

Meskipun Google Cloud dapat dioperasikan dari jarak jauh menggunakan laptop Anda, dalam codelab ini, Anda akan menggunakan Google Cloud Shell, lingkungan command line yang berjalan di Cloud.

Dari GCP Console, klik ikon Cloud Shell di toolbar kanan atas:

bce75f34b2c53987.png

Hanya perlu waktu beberapa saat untuk penyediaan dan terhubung ke lingkungan. Jika sudah selesai, Anda akan melihat tampilan seperti ini:

f6ef2b5f13479f3a.png

Mesin virtual ini berisi semua alat pengembangan yang Anda perlukan. Layanan ini menawarkan direktori beranda tetap sebesar 5 GB dan beroperasi di Google Cloud, sehingga sangat meningkatkan performa dan autentikasi jaringan. Semua pekerjaan Anda di lab ini dapat dilakukan hanya dengan browser.

3. Penyiapan Lab

Untuk lab ini, Anda akan menggunakan sebuah Project, dan masing-masing akan membuat dua VPC dengan satu subnet. Anda akan mencadangkan alamat IP eksternal, lalu membuat dan mengonfigurasi gateway Cloud NAT (dengan Cloud Router), serta dua instance produsen dan instance konsumen. Setelah memvalidasi perilaku Cloud NAT default, Anda akan membuat aturan kustom Cloud NAT dan memvalidasi perilakunya.

Ringkasan arsitektur jaringan:

815147de3de0bd19.pngS

4. Pesan Alamat IP Eksternal

Mari cadangkan semua alamat IP eksternal untuk digunakan di lab ini. Hal ini akan membantu Anda menulis semua aturan NAT dan firewall yang relevan di VPC konsumen dan produsen.

Dari Cloud Shell:

gcloud compute addresses  create nat-address-1 nat-address-2 nat-address-3 producer-address-1 producer-address-2 --region us-east4

Output:

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

Isi alamat IP yang dicadangkan sebagai variabel lingkungan.

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)"`

Tidak ada output yang diharapkan, tetapi untuk mengonfirmasi bahwa alamat telah diisi dengan benar. Mari kita buat output nilai semua variabel lingkungan.

$ env | egrep '^(nat|producer)ip[1-3]'

Output:

producerip1=<Actual Producer IP 1>
producerip2=<Actual Producer IP 2>
natip1=<NAT IP 1>
natip2=<NAT IP 2>
natip3=<NAT IP 3>

5. VPC Produsen dan Penyiapan Instance.

Sekarang kita akan membuat resource untuk resource produser. Instance yang berjalan di VPC produsen akan menawarkan layanan yang terhubung ke internet menggunakan dua IP publik "produsen-address-1" dan "produsen-address-2" kami.

Pertama, mari kita buat VPC. Dari Cloud Shell:

gcloud compute networks create producer-vpc --subnet-mode custom

Output:

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

Selanjutnya, mari kita buat subnet di us-east4. Dari Cloud Shell:

gcloud compute networks subnets create producer-e4 \
   --network producer-vpc --range 10.0.0.0/24 --region us-east4

Output:

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

Selanjutnya, mari kita buat aturan firewall VPC untuk mengizinkan alamat IP NAT menjangkau instance produsen pada port 8080.

Untuk aturan pertama, dari Cloud Shell:

gcloud compute firewall-rules create producer-allow-8080 \
  --network producer-vpc --allow tcp:8080 \
  --source-ranges $natip1,$natip2,$natip3

Output:

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

Langkah selanjutnya adalah membuat dua instance produser.

Instance produser akan menjalankan layanan gema IP di container docker yang tersedia di Docker Hub (kode sumber tersedia di repo GitHub penulis layanan.

Untuk menyediakan instance dengan semua software yang diperlukan secara cepat, kami akan menggunakan fitur Deployment container di Compute Engine.

Agar dapat menulis aturan NAT, kita akan menyediakan setiap instance dengan alamat IP yang dicadangkan yang berbeda.

Buat instance pertama. Dari 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

Output:

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

Kemudian buat instance kedua. Dari 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

Output:

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. Menyiapkan VPC Konsumen, Cloud NAT, dan Instance

Setelah membuat layanan produsen, kini saatnya membuat VPC konsumen dan gateway Cloud NAT-nya.

Setelah membuat VPC dan subnet, kita akan menambahkan aturan firewall masuk sederhana guna mengizinkan IAP untuk rentang IP sumber TCP. Dengan begitu, kita dapat melakukan SSH ke instance konsumen secara langsung menggunakan gcloud.

Kemudian, kita akan membuat gateway Cloud NAT sederhana dalam mode alokasi manual dan alamat yang dicadangkan "nat-address-1" yang terkait dengannya. Di bagian codelab berikutnya, kita akan memperbarui konfigurasi gateway untuk menambahkan aturan kustom. .

Pertama, mari kita buat VPC. Dari Cloud Shell:

gcloud compute networks create consumer-vpc --subnet-mode custom

Output:

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

Selanjutnya, mari kita buat subnet di us-east4. Dari Cloud Shell:

gcloud compute networks subnets create consumer-e4 \
   --network consumer-vpc --range 10.0.0.0/24 --region us-east4

Output:

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

Selanjutnya, mari kita buat aturan firewall VPC untuk mengizinkan alamat rentang IAP menjangkau instance konsumen pada port 22.

Untuk aturan firewall pertama, jalankan perintah berikut dari Cloud Shell:

gcloud compute firewall-rules create consumer-allow-iap \
  --network consumer-vpc --allow tcp:22 \
  --source-ranges 35.235.240.0/20

Output:

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

Sebelum membuat gateway NAT, kita perlu membuat instance Cloud Router terlebih dahulu (kita menggunakan nomor ASN pribadi, tetapi tidak relevan untuk aktivitas lab ini). Dari Cloud Shell:

gcloud compute routers create consumer-cr \
--region=us-east4 --network=consumer-vpc \
 --asn=65501

Output:

Creating router [consumer-cr]...done.
NAME         REGION       NETWORK
consumer-cr  us-east4  consumer-vpc

Kemudian, buat instance gateway NAT. Dari 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

Output:

Creating NAT [consumer-nat-gw] in router [consumer-cr]...done.

Membuat instance pengujian konsumen. Di sini kita mengisi IP produsen yang dicadangkan agar dapat merujuk ke instance tersebut dalam instance nanti. Dari 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

Output:

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. Memverifikasi perilaku Cloud NAT default

Pada tahap ini, instance konsumen menggunakan perilaku Cloud NAT default yang menggunakan IP yang dicadangkan yang sama, yaitu "nat-address-1" untuk berkomunikasi dengan semua alamat eksternal.

Mari kita validasi perilaku ini terlebih dahulu sebelum memanfaatkan fitur Aturan NAT yang baru di Cloud NAT.

SSH ke instance konsumen. Dari Cloud Shell:

gcloud compute ssh consumer-instance --zone=us-east4-a

Anda sekarang akan berada di shell instance.

Contoh Output (output penuh terpotong agar lebih singkat)

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:~$

Dari dalam instance konsumen, pertama-tama mari kita ambil kedua IP produsen dan isi sebagai variabel lingkungan

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"`

Kemudian, coba lakukan curl ke kedua instance produser dan amati alamat IP sumber yang ditampilkan.

<username>@consumer-instance:~$ curl http://$producerip1:8080
34.136.8.83
<username>@consumer-instance:~$ curl http://$producerip2:8080
34.136.8.83

Anda akan melihat alamat IP yang sama ditampilkan untuk kedua endpoint, yang sama dengan nilai IP eksternal yang dicadangkan "nat-address-1".

Demikian pula, curl ke layanan reflektor IP eksternal harus menampilkan IP yang sama, misalnya:

<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

Untuk saat ini, kita akan keluar dari sesi SSH instance. Kita akan menjalankan SSH kembali setelah mengonfigurasi Aturan NAT.

8. Membuat Aturan Cloud NAT

Aturan NAT ditulis menggunakan sintaksis Common Expression Language. Untuk mengetahui informasi selengkapnya tentang bahasa ekspresi aturan, lihat Bahasa ekspresi aturan.

Anda juga dapat menambahkan aturan NAT ke gateway NAT yang ada menggunakan perintah gcloud. Kita akan mempelajari kedua opsi untuk membuat aturan Cloud NAT.

Pertama, mari kita buat file YAML aturan NAT.

Dari 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

Kemudian mari kita perbarui gateway NAT yang ada menggunakan file aturan ini. Dari Cloud Shell:

gcloud alpha compute routers nats update consumer-nat-gw \
    --router=consumer-cr \
    --rules=natrulesfile.txt \
    --router-region=us-east4

Output Anda akan terlihat seperti berikut :

Updating nat [consumer-nat-gw] in router [consumer-cr]...done.

Validasi bahwa aturan telah berhasil dikonfigurasi. Dari Cloud Shell:

gcloud alpha compute routers nats rules list \
--nat=consumer-nat-gw --router=consumer-cr \
--router-region=us-east4

Output Anda akan terlihat seperti berikut :

RULE_NUMBER  MATCH
100          destination.ip == '35.192.142.134'

Mari kita coba dan buat ulang aturan yang sama hanya dengan menggunakan perintah gcloud. Pertama, hapus aturan yang ada. Dari Cloud Shell:

gcloud alpha compute routers nats rules delete 100 \
--nat=consumer-nat-gw --router=consumer-cr \
--router-region=us-east4 --quiet

Output Anda akan terlihat seperti berikut :

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

Kemudian buat ulang aturan menggunakan perintah gcloud ini. Dari 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

Output Anda akan terlihat seperti berikut :

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

Sekali lagi untuk memvalidasi bahwa aturan berhasil dibuat, ulangi perintah sebelumnya. Kali ini kita akan menambahkan tombol pemformatan YAML untuk melihat detail aturan secara lengkap.

Dari Cloud Shell:

gcloud alpha compute routers nats rules list\
 --nat=consumer-nat-gw --router=consumer-cr \
--router-region=us-east4  --format=yaml

Output Anda akan terlihat seperti berikut :

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

Terakhir, perhatikan bahwa sekarang "nat-address1" dan "nat-address-2" alamat eksternal akan ditampilkan sebagai "IN_USE". Untuk melihatnya, jalankan perintah ini dari Cloud Shell:

$ gcloud compute addresses list

Output Anda akan terlihat seperti berikut (Alamat IP aktual akan cocok dengan alamat yang telah Anda pesan) :

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. Memverifikasi perilaku Aturan Cloud NAT

Pada tahap ini, instance konsumen harus menggunakan Aturan Cloud NAT yang dibuat untuk menggunakan nat-address-2 untuk berkomunikasi dengan prod-address-2.

Mari kita validasi perilaku ini. SSH ke instance konsumen. Dari Cloud Shell:

gcloud compute ssh consumer-instance --zone=us-east4-a

Anda sekarang akan berada di shell instance.

Contoh Output (output penuh terpotong agar lebih singkat)

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:~$

Dari dalam instance konsumen, pertama-tama mari kita ambil kedua IP produsen dan isi sebagai variabel lingkungan

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"`

Kemudian, coba lakukan curl ke kedua instance produser dan amati alamat IP sumber yang ditampilkan.

<username>@consumer-instance:~$ curl http://$producerip1:8080
34.136.8.83
<username>@consumer-instance:~$ curl http://$producerip2:8080
34.70.137.35

Anda sekarang akan melihat alamat IP berbeda yang ditampilkan untuk kedua endpoint, alamat IP pertama harus sama dengan perilaku default. Alamat IP kedua harus sama dengan "nat-address-2" setelah penambahan aturan NAT baru.

curl ke layanan reflektor IP eksternal harus tetap menampilkan IP yang sama dengan perilaku default, misalnya:

<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

Untuk saat ini, kita akan keluar dari sesi SSH instance. Kita akan menjalankan SSH kembali untuk menguji pengosongan alamat.

10. Perbarui & Menghapus Aturan Cloud NAT

Anda dapat memperbarui aturan Cloud NAT yang ada. Misalnya, Anda dapat mengaitkan alamat IP baru dan menghabiskan alamat IP yang ada, yang terkait dengan aturan yang ada.

Mari kita perbarui file Aturan NAT sebagai berikut

Dari 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

Yang dilakukan file baru ini sekarang adalah menempatkan "nat-address-2" dalam kondisi terkuras. Dan tambahkan "nat-address-3" dalam status aktif. Ini akan memungkinkan koneksi yang ada yang menggunakan nat-address-2 berakhir dengan baik, saat membuat koneksi baru hanya menggunakan nat-address-3.

Kemudian mari kita perbarui gateway NAT yang ada menggunakan file aturan ini. Dari Cloud Shell:

gcloud alpha compute routers nats update consumer-nat-gw \
    --router=consumer-cr \
    --rules=natrulesfile.txt \
    --router-region=us-east4

Output Anda akan terlihat seperti berikut :

Updating nat [consumer-nat-gw] in router [consumer-cr]...done.

Validasi bahwa aturan telah berhasil dikonfigurasi. Dari Cloud Shell:

gcloud alpha compute routers nats rules list \
--nat=consumer-nat-gw --router=consumer-cr \
--router-region=us-east4 --format=yaml

Output Anda akan terlihat seperti berikut :

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

Perhatikan bagaimana "nat-address-2" sekarang telah ditempatkan dalam kondisi terkuras. Kami menyerahkannya kepada Anda sebagai latihan untuk memvalidasi bahwa koneksi baru dari VPC konsumen kini menggunakan IP NAT yang benar.

Terakhir, hapus aturan NAT dari gateway Cloud NAT Anda dan kembali ke perilaku default. Anda dapat menggunakan perintah gcloud berikut. Dari Cloud Shell:

gcloud alpha compute routers nats rules delete 100 \
 --nat=consumer-nat-gw --router=consumer-cr \
 --router-region=us-east4 --quiet

Output Anda akan terlihat seperti berikut :

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

Untuk memverifikasi bahwa tidak ada lagi aturan NAT, mari kita gunakan perintah {i>gateway<i} NAT

gcloud alpha compute routers nats describe consumer-nat-gw \
 --router=consumer-cr --router-region=us-east4

Output Anda akan terlihat seperti berikut :

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

Perhatikan bahwa tidak ada "aturan:" di YAML output. Menunjukkan tidak ada Aturan NAT yang dikonfigurasi.

11. Langkah-Langkah Pembersihan

Untuk menghindari tagihan berulang, Anda harus menghapus semua resource yang terkait dengan codelab ini.

Hapus semua instance terlebih dahulu.

Dari Cloud Shell:

gcloud compute instances delete consumer-instance \
producer-instance-1 producer-instance-2 \
 --zone us-east4-a --quiet

Output yang diharapkan :

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

Selanjutnya, hapus Cloud Router. Dari Cloud Shell:

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

Output Anda akan terlihat seperti berikut :

Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/routers/consumer-cr].

Melepaskan semua alamat IP eksternal. Dari 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

Output Anda akan terlihat seperti berikut :

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

Menghapus aturan firewall VPC. Dari Cloud Shell:

gcloud compute firewall-rules delete consumer-allow-iap \
 producer-allow-8080 --quiet

Output Anda akan terlihat seperti berikut :

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

Menghapus subnet. Dari Cloud Shell:

gcloud compute networks subnets delete consumer-e4 \
producer-e4 --region=us-east4 --quiet

Output Anda akan terlihat seperti berikut :

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

Terakhir, mari kita hapus VPC. Dari Cloud Shell:

gcloud compute networks delete consumer-vpc \
producer-vpc --quiet

Output Anda akan terlihat seperti berikut :

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. Selamat!

Anda telah menyelesaikan Cloud NAT Rules Lab!

Yang telah Anda bahas

  • Cara menyiapkan gateway Cloud NAT sebagai persiapan untuk Aturan NAT.
  • Cara merancang Aturan NAT menggunakan Common Expression Language (CEL).
  • Cara membuat Aturan NAT dan melampirkannya ke {i>Gateway NAT<i}.
  • Cara menguji Aturan NAT dari instance.
  • Cara memperbarui aturan Gateway NAT.
  • Cara menghapus aturan NAT dan mengembalikan ke perilaku Cloud NAT default.

Langkah Berikutnya

  • Lakukan eksperimen dengan membuat Aturan NAT yang lebih kompleks seperti contoh ini
  • Pelajari pengosongan alamat IP NAT dan amati dampak koneksi.
  • Pelajari lebih lanjut Jaringan di Google Cloud Platform

©Google, Inc. atau afiliasinya. Semua hak dilindungi undang-undang. Jangan disebarluaskan.