Menggunakan aturan Cloud NAT NAT

1. Ringkasan

Cloud NAT adalah alat yang canggih: dengan alat ini, beban kerja Compute Engine dan Google Kubernetes Engine (GKE) dapat mengakses resource internet secara terukur dan aman, tanpa mengekspos beban kerja yang berjalan di dalamnya ke akses luar menggunakan IP eksternal.

Cloud NAT memiliki desain tanpa proxy, yang menerapkan NAT secara langsung di lapisan Andromeda SDN. Oleh karena itu, tidak ada dampak performa pada workload Anda dan workload tersebut dapat diskalakan dengan mudah ke banyak VM, region, dan VPC.

Aturan NAT adalah ekstensi untuk Cloud NAT. Fitur Aturan NAT di Cloud NAT memungkinkan Anda 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 yang mengaktifkan Cloud NAT menggunakan kumpulan alamat IP NAT yang sama untuk menjangkau semua alamat Internet.

Terkadang, kasus penggunaan NAT memerlukan 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 akan dicocokkan dengan setiap aturan NAT. Jika aturan cocok, tindakan yang sesuai dengan kecocokan tersebut akan dilakukan.

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 mendesain Aturan NAT menggunakan Common Expression Language (CEL).
  • Cara membuat Aturan NAT dan melampirkannya ke Gateway NAT.
  • Cara menguji Aturan NAT dari instance.
  • Cara memperbarui aturan Gateway NAT.
  • Cara menghapus aturan NAT dan kembali 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
  • Sebaiknya Anda telah menyelesaikan tur jaringan di GCP seperti lab Networking in Google Cloud.
  • Pemahaman dasar tentang Cloud NAT.

2. Menggunakan Konsol Google Cloud dan Cloud Shell

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

Konsol Google Cloud

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

75eef5f6fd6d7e41.png

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

  • Nama Project 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). Konsol Cloud otomatis membuat string unik; biasanya Anda tidak mementingkan kata-katanya. Di sebagian besar codelab, Anda harus merujuk Project ID (dan biasanya diidentifikasi sebagai PROJECT_ID), jadi jika tidak suka, buat ID acak lainnya, atau Anda dapat mencoba ID Anda sendiri dan melihat apakah ID tersebut tersedia. Kemudian file akan "dibekukan" setelah project 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 Konsol GCP, 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 Project, dan membuat dua VPC dengan satu subnet di setiap VPC. Anda akan mencadangkan alamat IP eksternal, lalu membuat dan mengonfigurasi gateway Cloud NAT (dengan Cloud Router), dua instance produsen, serta satu instance konsumen. Setelah memvalidasi perilaku Cloud NAT default, Anda akan membuat aturan kustom Cloud NAT dan memvalidasi perilakunya.

Ringkasan arsitektur jaringan:

815147de3de0bd19.png

4. Mencadangkan Alamat IP Eksternal

Mari kita cadangkan semua alamat IP eksternal yang akan digunakan dalam lab ini. Tindakan 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 keluarkan 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. Penyiapan Instance dan VPC Produsen.

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

Pertama, 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 buat aturan firewall VPC untuk mengizinkan alamat IP NAT menjangkau instance produsen di 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 IP echo dalam container Docker yang tersedia di Docker Hub (kode sumber tersedia di repositori GitHub penulis layanan).

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

Untuk 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, sekarang saatnya membuat VPC konsumen dan gateway Cloud NAT-nya.

Setelah membuat VPC dan subnet, kita akan menambahkan aturan firewall ingress sederhana untuk mengizinkan rentang IP sumber TCP untuk IAP. Tindakan ini akan memungkinkan kita 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, 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, buat aturan firewall VPC untuk mengizinkan alamat rentang IAP menjangkau instance konsumen di 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.

Buat instance pengujian konsumen. Kita mengisi IP produser yang dicadangkan di sini agar dapat merujuknya 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 menggunakan fitur Aturan NAT baru di Cloud NAT.

SSH ke instance konsumen. Dari Cloud Shell:

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

Sekarang Anda akan berada di shell instance.

Contoh Output (output lengkap dipangkas agar lebih ringkas)

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, mari kita ambil terlebih dahulu 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 curl ke kedua instance produsen 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 cadangan eksternal "nat-address-1".

Demikian pula, curl ke layanan reflektor IP eksternal mana pun akan 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

Tutup sesi SSH instance untuk saat ini, kita akan kembali melakukan SSH 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, 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

Anda akan mendapatkan output berikut :

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

Pastikan 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

Anda akan mendapatkan output berikut :

RULE_NUMBER  MATCH
100          destination.ip == '35.192.142.134'

Mari coba buat ulang aturan yang sama menggunakan perintah gcloud saja. Hapus aturan yang ada terlebih dahulu. Dari Cloud Shell:

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

Anda akan mendapatkan output 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

Anda akan mendapatkan output berikut :

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

Untuk memvalidasi bahwa aturan berhasil dibuat, ulangi perintah sebelumnya. Kali ini kita akan menambahkan tombol pengalihan format YAML untuk melihat detail lengkap aturan.

Dari Cloud Shell:

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

Anda akan mendapatkan output 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 alamat eksternal "nat-address1" dan "nat-address-2" ditampilkan sebagai "IN_USE". Untuk melihatnya, jalankan perintah ini dari Cloud Shell:

$ gcloud compute addresses list

Anda akan melihat output berikut (Alamat IP sebenarnya harus cocok dengan alamat yang telah Anda cadangkan) :

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 guna berkomunikasi dengan producer-address-2.

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

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

Sekarang Anda akan berada di shell instance.

Contoh Output (output lengkap dipangkas agar lebih ringkas)

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, mari kita ambil terlebih dahulu 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 curl ke kedua instance produsen 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

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

Permintaan curl ke layanan reflektor IP eksternal mana pun akan tetap menampilkan IP yang sama sebagai 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

Keluar dari sesi SSH instance untuk saat ini, kita akan kembali menerapkan SSH untuk menguji pengurasan alamat.

10. Memperbarui & Menghapus Aturan Cloud NAT

Anda dapat memperbarui aturan Cloud NAT yang ada. Misalnya, Anda dapat mengaitkan alamat IP baru dan menghentikan penggunaan alamat IP yang ada yang dikaitkan dengan aturan yang ada.

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

File baru ini akan menempatkan "nat-address-2" dalam status dikuras. Lalu tambahkan "nat-address-3" dalam status aktif. Tindakan ini akan memungkinkan koneksi yang ada menggunakan nat-address-2 untuk dihentikan dengan benar, sekaligus 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

Anda akan mendapatkan output berikut :

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

Pastikan 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

Anda akan mendapatkan output 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" kini ditempatkan dalam status dikuras. Kami menyerahkannya kepada Anda sebagai latihan untuk memvalidasi bahwa koneksi baru dari VPC konsumen kini menggunakan IP NAT yang benar.

Terakhir, untuk menghapus aturan NAT dari gateway Cloud NAT 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

Anda akan mendapatkan output 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, gunakan perintah describe gateway NAT

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

Anda akan mendapatkan output 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 bagian "rules:" di YAML output. Menunjukkan bahwa tidak ada Aturan NAT yang dikonfigurasi.

11. Langkah-Langkah Pembersihan

Untuk menghindari biaya 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

Anda akan mendapatkan output berikut :

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

Lepaskan 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

Anda akan mendapatkan output 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].

Hapus aturan firewall VPC. Dari Cloud Shell:

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

Anda akan mendapatkan output 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].

Hapus subnet. Dari Cloud Shell:

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

Anda akan mendapatkan output 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

Anda akan mendapatkan output 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 Lab Aturan Cloud NAT.

Yang telah Anda pelajari

  • Cara menyiapkan gateway Cloud NAT sebagai persiapan untuk Aturan NAT.
  • Cara mendesain Aturan NAT menggunakan Common Expression Language (CEL).
  • Cara membuat Aturan NAT dan melampirkannya ke Gateway NAT.
  • Cara menguji Aturan NAT dari instance.
  • Cara memperbarui aturan Gateway NAT.
  • Cara menghapus aturan NAT dan kembali ke perilaku Cloud NAT default.

Langkah Berikutnya

  • Bereksperimenlah dengan membuat Aturan NAT yang lebih kompleks seperti contoh ini
  • Jelajahi alamat IP NAT yang habis dan amati dampak koneksi.
  • Pelajari lebih lanjut Networking di Google Cloud Platform

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