Tutorial ini menjelaskan cara menggunakan Peering Jaringan VPC untuk men-deploy arsitektur hub-and-spoke.
Tutorial ini ditujukan bagi engineer jaringan cloud dan profesional operasi yang ingin menerapkan arsitektur hub-and-spoke di lingkungan Google Cloud mereka menggunakan peralatan terpusat yang terdiri dari virtual machine Compute Engine. Dalam tutorial ini, Anda akan men-deploy mesin virtual tersebut sebagai gateway NAT, tetapi Anda dapat menggunakan pendekatan yang sama untuk fungsi lainnya, seperti firewall generasi berikutnya. Tutorial ini mengasumsikan bahwa Anda sudah memahami jaringan VPC dan Compute Engine.
Arsitektur
Dalam arsitektur ini, serangkaian jaringan VPC spoke berkomunikasi dengan luar melalui jaringan VPC hub yang memungkinkan traffic dirutekan melalui kumpulan peralatan terpusat, dalam hal ini gateway penafsiran alamat jaringan (NAT). Rute yang relevan diekspor dari jaringan VPC hub ke jaringan VPC spoke. Gateway NAT dikonfigurasi sebagai backend load balancer internal dengan rute default baru, yang memiliki Load Balancer Jaringan passthrough internal dari Cloud Load Balancing sebagai next hop.
Anda dapat mencapai jenis distribusi beban dan ketersediaan tinggi yang sama dengan menggunakan beberapa rute dengan perutean equal cost multi-path (ECMP). Namun, penggunaan Load Balancer Jaringan passthrough internal memiliki keunggulan berikut:
- Traffic hanya diteruskan ke instance yang responsif jika Anda mengandalkan health check. Dengan ECMP, traffic diteruskan ke semua instance aktif yang dituju oleh rute; menggunakan Load Balancer Jaringan passthrough internal akan menghilangkan kemungkinan rute yang tidak digunakan. Selain itu, Anda tidak perlu membersihkan rute saat instance dihentikan atau dimulai ulang.
- Ada potensi failover yang lebih cepat karena Anda dapat menyesuaikan timer health check. Jika menggunakan grup instance terkelola dan pemulihan otomatis, Anda masih dapat menyesuaikan timer health check, tetapi timer tersebut digunakan untuk membuat ulang instance, bukan merutekan traffic.
Google juga menawarkan Cloud NAT sebagai layanan terkelola, yang memberikan ketersediaan tinggi tanpa pengelolaan dan intervensi pengguna. Namun, Cloud NAT tidak didukung dalam kasus penggunaan ini karena konfigurasi NAT tidak diimpor ke jaringan yang di-peering.
Diagram berikut menunjukkan topologi yang Anda buat dalam tutorial ini.
Topologi ini terdiri dari satu jaringan VPC hub dan dua jaringan
VPC spoke yang di-peering dengan jaringan VPC
hub menggunakan Peering Jaringan VPC. Jaringan VPC
hub memiliki dua instance gateway NAT di belakang Load Balancer Jaringan passthrough internal.
Rute default statis (0/0 NAT-GW-ILB
) mengarah ke Load Balancer Jaringan passthrough internal
sebagai next hop. Rute default statis ini diekspor melalui
Peering Jaringan VPC menggunakan
rute kustom.
Tujuan
- Buat beberapa jaringan VPC dan lakukan peering menggunakan arsitektur hub-and-spoke.
- Membuat dan mengonfigurasi gateway NAT di jaringan VPC hub.
- Siapkan dan konfigurasikan Load Balancer Jaringan passthrough internal sebagai next hop.
- Verifikasi konektivitas dari jaringan VPC spoke ke internet publik.
Biaya
Dalam dokumen ini, Anda akan menggunakan komponen Google Cloud yang dapat ditagih berikut:
Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda,
gunakan kalkulator harga.
Setelah menyelesaikan tugas yang dijelaskan dalam dokumen ini, Anda dapat menghindari penagihan berkelanjutan dengan menghapus resource yang Anda buat. Untuk mengetahui informasi selengkapnya, lihat Pembersihan.
Sebelum memulai
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Compute Engine API.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Compute Engine API.
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
Dalam tutorial ini, Anda akan menjalankan semua perintah dari Cloud Shell.
Menyiapkan lingkungan Anda
Di Cloud Shell, pastikan Anda bekerja di project Google Cloud yang Anda buat atau pilih. Ganti
project-id
dengan project Google Cloud Anda.gcloud config set project project-id export PROJECT_ID=`gcloud config list --format="value(core.project)"`
Tetapkan region dan zona komputasi default.
gcloud config set compute/region us-central1 gcloud config set compute/zone us-central1-c export REGION=us-central1 export ZONE=us-central1-c
Dalam tutorial ini, regionnya adalah
us-central1
dan zonanya adalahus-central1-c
.
Membuat subnet dan jaringan VPC
Di Cloud Shell, buat jaringan VPC dan subnet hub:
gcloud compute networks create hub-vpc --subnet-mode custom gcloud compute networks subnets create hub-subnet1 \ --network hub-vpc --range 10.0.0.0/24
Buat jaringan VPC spoke, yang disebut
spoke1-vpc
danspoke2-vpc
, dengan masing-masing satu subnet:gcloud compute networks create spoke1-vpc --subnet-mode custom gcloud compute networks create spoke2-vpc --subnet-mode custom gcloud compute networks subnets create spoke1-subnet1 \ --network spoke1-vpc --range 192.168.1.0/24 gcloud compute networks subnets create spoke2-subnet1 \ --network spoke2-vpc --range 192.168.2.0/24
Buat aturan firewall di jaringan VPC hub dan jaringan VPC spoke. Aturan ini mengizinkan traffic internal (TCP/80 dan 443, UDP/53, dan ICMP) dari rentang RFC 1918 yang ditentukan:
gcloud compute firewall-rules create hub-vpc-web-ping-dns \ --network hub-vpc --allow tcp:80,tcp:443,icmp,udp:53 \ --source-ranges 10.0.0.0/24,192.168.1.0/24,192.168.2.0/24 gcloud compute firewall-rules create spoke1-vpc-web-ping-dns \ --network spoke1-vpc --allow tcp:80,tcp:443,icmp,udp:53 \ --source-ranges 10.0.0.0/24,192.168.1.0/24 gcloud compute firewall-rules create spoke2-vpc-web-ping-dns \ --network spoke2-vpc --allow tcp:80,tcp:443,icmp,udp:53 \ --source-ranges 10.0.0.0/24,192.168.2.0/24
Buat aturan firewall di jaringan VPC hub dan jaringan VPC spoke agar IAP untuk SSH dapat mengakses semua virtual machine Anda:
gcloud compute firewall-rules create hub-vpc-iap \ --network hub-vpc --allow tcp:22 \ --source-ranges 35.235.240.0/20 gcloud compute firewall-rules create spoke1-vpc-iap \ --network spoke1-vpc --allow tcp:22 \ --source-ranges 35.235.240.0/20 gcloud compute firewall-rules create spoke2-vpc-iap \ --network spoke2-vpc --allow tcp:22 \ --source-ranges 35.235.240.0/20
Tutorial ini menggunakan Identity-Aware Proxy (IAP) untuk SSH. Untuk informasi selengkapnya, lihat Terhubung ke instance yang tidak memiliki alamat IP eksternal.
Buat aturan firewall untuk mengizinkan health check untuk grup instance autohealing di jaringan VPC hub:
gcloud compute firewall-rules create hub-vpc-health-checks \ --network hub-vpc --allow tcp:443 --target-tags nat-gw \ --source-ranges 130.211.0.0/22,35.191.0.0/16
Membuat instance dan rute yang diperlukan
Di Cloud Shell, buat template instance untuk gateway NAT yang memiliki skrip startup yang menyiapkan gateway NAT:
gcloud compute instance-templates create \ hub-nat-gw-ilbnhop-template \ --network hub-vpc \ --subnet hub-subnet1 \ --machine-type n1-standard-2 --can-ip-forward \ --tags nat-gw --scopes default,compute-rw \ --metadata startup-script='#! /bin/bash apt-get update # Enable IP forwarding: echo 1 > /proc/sys/net/ipv4/ip_forward echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/20-example.conf # Read VM network configuration: md_vm="http://metadata.google.internal/computeMetadata/v1/instance/" md_net="$md_vm/network-interfaces" nic0_gw="$(curl $md_net/0/gateway -H "Metadata-Flavor:Google")" nic0_mask="$(curl $md_net/0/subnetmask -H "Metadata-Flavor:Google")" nic0_addr="$(curl $md_net/0/ip -H "Metadata-Flavor:Google")" nic0_id="$(ip addr show | grep $nic0_addr | tail -c 5)" # Use a web server to pass the health check for this example. # In production, use a more complete test. sudo apt-get update sudo apt-get install apache2 -y sudo a2ensite default-ssl sudo a2enmod ssl echo "Example web page to pass health check" | \ tee /var/www/html/index.html sudo systemctl restart apache2 # Enable IP masquerading iptables -t nat -A POSTROUTING -o $nic0_id -j MASQUERADE'
Tutorial ini menggunakan
n1-standard-2
sebagai jenis instance, tetapi Anda dapat menggunakan jumlah atau ukuran gateway lain yang Anda inginkan. Pastikan untuk mempertimbangkan faktor seperti bandwidth keluar maksimum per VM.Buat health check HTTP:
gcloud compute health-checks create http nat-gw-ilbnhop-health-check \ --region us-central1 \ --port 80
Buat grup instance regional dengan dua instance yang didistribusikan di satu region:
gcloud compute instance-groups managed create \ hub-nat-gw-ilbnhop-mig \ --region us-central1 --size=2 \ --template=hub-nat-gw-ilbnhop-template \ --health-check nat-gw-ilbnhop-health-check \ --initial-delay 15
Dalam tutorial ini, penundaan awal disetel ke 15 detik. Dalam deployment produksi, sesuaikan setelan ini sesuai dengan persyaratan Anda. Tutorial ini tidak menggunakan kebijakan penskalaan otomatis.
Buat layanan backend, lalu tambahkan grup instance:
gcloud compute backend-services create hub-nat-gw-ilbnhop-backend \ --load-balancing-scheme=internal \ --protocol=tcp \ --health-checks=nat-gw-ilbnhop-health-check gcloud compute backend-services add-backend \ hub-nat-gw-ilbnhop-backend \ --instance-group=hub-nat-gw-ilbnhop-mig \ --instance-group-region=us-central1
Membuat aturan penerusan:
gcloud compute forwarding-rules create \ hub-nat-gw-ilbnhop \ --load-balancing-scheme=internal \ --network=hub-vpc \ --subnet=hub-subnet1 \ --address=10.0.0.10 \ --ip-protocol=TCP \ --ports=all \ --backend-service=hub-nat-gw-ilbnhop-backend \ --backend-service-region=us-central1 \ --service-label=hub-nat-gw-ilbnhop
Meskipun aturan penerusan hanya ditentukan dengan TCP, saat Anda menggunakan Load Balancer Jaringan passthrough internal sebagai next hop, aturan penerusan akan meneruskan semua traffic ke semua port di VM backend. Load Balancer Jaringan passthrough internal adalah load balancer regional.
Buat rute baru dengan aturan penerusan sebagai next hop:
gcloud compute routes create hub-nat-gw-ilbnhop \ --network=hub-vpc \ --destination-range=0.0.0.0/0 \ --next-hop-ilb=hub-nat-gw-ilbnhop \ --next-hop-ilb-region=us-central1 \ --priority=800
Anda dapat menentukan tag jaringan sehingga rute next-hop hanya berlaku untuk instance klien yang telah dikonfigurasi dengan tag tersebut, tetapi tag tersebut tidak diekspor atau diimpor melalui Peering Jaringan VPC.
Hapus rute default dari VPC hub:
export hub_default_route=$(gcloud compute routes list \ --format="value(name)" --filter="network:hub-vpc AND \ nextHopGateway:default-internet-gateway" | head -n 1) gcloud compute routes delete $hub_default_route -q
Buat rute baru yang diberi tag untuk mengizinkan traffic hanya dari gateway NAT:
gcloud compute routes create hub-default-tagged \ --network hub-vpc --destination-range 0.0.0.0/0 \ --next-hop-gateway default-internet-gateway \ --priority 700 --tags nat-gw
Hapus rute default ke internet dari VPC setiap spoke:
export spoke1_default_route=$(gcloud compute routes list \ --format="value(name)" --filter="network:spoke1-vpc AND \ nextHopGateway:default-internet-gateway") gcloud compute routes delete $spoke1_default_route -q export spoke2_default_route=$(gcloud compute routes list \ --format="value(name)" \ --filter="network:spoke2-vpc AND nextHopGateway:default-internet-gateway") gcloud compute routes delete $spoke2_default_route -q
Jika ada konflik antara rute lokal dan yang diimpor, rute lokal akan selalu diutamakan. Untuk informasi selengkapnya, lihat Urutan perutean.
Buat VM klien:
gcloud compute instances create spoke1-client \ --subnet=spoke1-subnet1 --no-address \ --metadata startup-script='#! /bin/bash apt-get update apt-get install dnsutils -y' gcloud compute instances create spoke2-client \ --subnet=spoke2-subnet1 --no-address \ --metadata startup-script='#! /bin/bash apt-get update apt-get install dnsutils -y'
Membuat koneksi Peering Jaringan VPC
Peering Jaringan VPC bersifat dua arah, sehingga harus ditentukan di kedua ujungnya. Jaringan VPC dapat melakukan peering dengan beberapa jaringan VPC, tetapi ada batasan yang berlaku. Untuk mencapai rute default melalui Peering Jaringan VPC, Anda dapat menggunakan fitur mengimpor dan mengekspor rute kustom melalui Peering Jaringan VPC.
Untuk tutorial ini, Anda akan membuat semua jaringan VPC dalam project Google Cloud yang sama.
Di Cloud Shell, buat koneksi VPC dari jaringan VPC hub ke jaringan VPC spoke dengan flag ekspor rute yang diaktifkan:
gcloud compute networks peerings create hub-to-spoke1 \ --network hub-vpc --peer-network spoke1-vpc \ --peer-project $PROJECT_ID \ --export-custom-routes gcloud compute networks peerings create hub-to-spoke2 \ --network hub-vpc --peer-network spoke2-vpc \ --peer-project $PROJECT_ID \ --export-custom-routes
Buat koneksi Peering Jaringan VPC dari jaringan VPC
spoke1
ke jaringan VPC hub dengan flag impor rute diaktifkan:gcloud compute networks peerings create spoke1-to-hub \ --network spoke1-vpc --peer-network hub-vpc \ --peer-project $PROJECT_ID \ --import-custom-routes
Buat koneksi Peering Jaringan VPC dari jaringan VPC
spoke2
ke jaringan VPC hub dengan flag impor rute diaktifkan:gcloud compute networks peerings create spoke2-to-hub \ --network spoke2-vpc --peer-network hub-vpc \ --peer-project $PROJECT_ID \ --import-custom-routes
Memverifikasi penerapan dan konektivitas rute
Di Cloud Shell, pastikan rute statis dibuat dengan benar sebagai bagian dari skrip startup.
gcloud compute routes list --filter="network:hub-vpc"
Pastikan rute
hub-default-tagged
danhub-nat-gw-ilbanhop
ada dalam output:NAME NETWORK DEST_RANGE NEXT_HOP PRIORITY default-route-13a4b635b5eab48c hub-vpc 10.0.0.0/24 hub-vpc 1000 hub-default-tagged hub-vpc 0.0.0.0/0 default-internet-gateway 700 hub-nat-gw-ilbanhop hub-vpc 0.0.0.0/0 10.0.0.10 800 peering-route-3274f1257a9842a0 hub-vpc 192.168.2.0/24 hub-to-spoke2 1000 peering-route-798c5777f13094bc hub-vpc 192.168.1.0/24 hub-to-spoke1 1000
Verifikasi tabel pemilihan rute
spoke1-vpc
untuk memastikan rute default diimpor dengan benar:gcloud compute routes list --filter="network:spoke1-vpc"
Pastikan ada rute yang dimulai dengan
peering-route
dengan0.0.0.0/0
sebagai nilaiDEST_RANGE
dalam output:NAME NETWORK DEST_RANGE NEXT_HOP PRIORITY default-route-75f6ea8f5fc54813 spoke1-vpc 192.168.1.0/24 spoke1-vpc 1000 peering-route-6c7f130b860bfd39 spoke1-vpc 10.0.0.0/24 spoke1-to-hub 1000 peering-route-9d44d362f98afbd8 spoke1-vpc 0.0.0.0/0 spoke1-to-hub 800
Hubungkan ke salah satu klien menggunakan SSH melalui IAP:
gcloud compute ssh spoke1-client --tunnel-through-iap
Verifikasi konektivitas dengan menguji DNS publik Google melalui gateway NAT:
sudo hping3 -S -p 80 -c 3 dns.google
Karena Network Load Balancer passthrough internal mendukung TCP dan UDP, Anda tidak dapat memverifikasi konektivitas internet menggunakan ping berbasis ICMP, sehingga Anda harus menggunakan alat seperti hping3.
Outputnya mirip dengan hal berikut ini:
HPING dns.google (eth0 8.8.4.4): S set, 40 headers + 0 data bytes len=44 ip=8.8.4.4 ttl=126 DF id=0 sport=80 flags=SA seq=0 win=65535 rtt=4.6 ms len=44 ip=8.8.4.4 ttl=126 DF id=0 sport=80 flags=SA seq=1 win=65535 rtt=4.4 ms len=44 ip=8.8.4.4 ttl=126 DF id=0 sport=80 flags=SA seq=2 win=65535 rtt=4.3 ms --- dns.google hping statistic --- 3 packets transmitted, 3 packets received, 0% packet loss round-trip min/avg/max = 4.3/4.4/4.6 ms
Verifikasi alamat IP publik yang Anda gunakan untuk berkomunikasi dengan internet:
curl ifconfig.co
Output akan menampilkan alamat IP publik dari salah satu instance gateway NAT. Jika Anda menjalankan perintah ini lagi, output-nya mungkin menampilkan alamat IP publik yang berbeda karena koneksinya didistribusikan dengan menggunakan afinitas sesi load balancing internal yang dikonfigurasi (secara default, IP klien, protokol, dan port).
Peering Jaringan VPC bersifat non-transitif, sehingga tidak ada konektivitas antara jaringan VPC spoke melalui Peering Jaringan VPC.
Pertimbangan untuk lingkungan produksi
Konfigurasi yang Anda buat dalam tutorial ini menyediakan dua gateway NAT di satu region. Namun, load balancing ECMP tidak sempurna dan alur individual tidak tersebar di banyak link. Itulah yang Anda inginkan saat menggunakan perangkat stateful seperti firewall generasi berikutnya.
Untuk men-deploy konfigurasi ini di lingkungan produksi, pertimbangkan poin-poin berikut:
- Konfigurasi ini paling cocok untuk link keluar sementara atau non-stateful. Jika ukuran kumpulan gateway NAT berubah, koneksi TCP mungkin akan diseimbangkan kembali, sehingga dapat menyebabkan koneksi yang terhubung direset.
- Node tidak diupdate secara otomatis, jadi jika penginstalan Debian default memiliki kerentanan keamanan, Anda harus memperbarui image secara manual.
- Jika memiliki VM di beberapa region, Anda perlu menyiapkan gateway NAT di setiap region.
- Bandwidth per gateway dapat bervariasi sesuai dengan jenis hardware. Pastikan untuk mempertimbangkan faktor-faktor seperti bandwidth keluar maksimum per VM. Selama kegagalan gateway, traffic akan didistribusikan ke gateway yang tersisa. Karena alur yang berjalan tidak diprogram ulang, traffic tidak segera menyesuaikan saat gateway kembali online. Jadi, pastikan Anda membiarkan overhead yang cukup saat mengubah ukuran.
- Agar mendapatkan pemberitahuan tentang hasil yang tidak terduga, gunakan Cloud Monitoring untuk memantau grup instance terkelola dan traffic jaringan.
Pembersihan
Cara termudah untuk menghilangkan penagihan adalah dengan menghapus project Google Cloud yang Anda buat untuk tutorial. Atau, Anda dapat menghapus resource satu per satu.
Menghapus project
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Hapus resource satu per satu
Jika ingin mempertahankan project Google Cloud, Anda dapat menghapus resource yang dibuat untuk tutorial ini.
Hapus koneksi Peering Jaringan VPC:
gcloud compute networks peerings delete spoke2-to-hub \ --network spoke2-vpc -q gcloud compute networks peerings delete spoke1-to-hub \ --network spoke1-vpc -q gcloud compute networks peerings delete hub-to-spoke1 \ --network hub-vpc -q gcloud compute networks peerings delete hub-to-spoke2 \ --network hub-vpc -q
Hapus instance, resource load balancer, template, dan rute:
gcloud compute instances delete spoke1-client \ --zone=us-central1-c -q gcloud compute instances delete spoke2-client \ --zone=us-central1-c -q gcloud compute routes delete hub-nat-gw-ilbnhop -q gcloud compute forwarding-rules delete hub-nat-gw-ilbnhop -q gcloud compute backend-services delete -q hub-nat-gw-ilbnhop-backend -q gcloud compute instance-groups managed delete hub-nat-gw-ilbnhop-mig \ --region us-central1 -q gcloud compute health-checks delete nat-gw-ilbnhop-health-check -q gcloud compute instance-templates delete hub-nat-gw-ilbnhop-template -q gcloud compute routes delete hub-default-tagged -q
Hapus aturan firewall, subnet, dan jaringan VPC:
gcloud compute firewall-rules delete spoke2-vpc-iap -q gcloud compute firewall-rules delete spoke2-vpc-web-ping-dns -q gcloud compute firewall-rules delete spoke1-vpc-iap -q gcloud compute firewall-rules delete spoke1-vpc-web-ping-dns -q gcloud compute firewall-rules delete hub-vpc-iap -q gcloud compute firewall-rules delete hub-vpc-web-ping-dns -q gcloud compute firewall-rules delete hub-vpc-health-checks -q gcloud compute networks subnets delete spoke1-subnet1 \ --region us-central1 -q gcloud compute networks subnets delete spoke2-subnet1 \ --region us-central1 -q gcloud compute networks subnets delete hub-subnet1 \ --region us-central1 -q gcloud compute networks delete spoke1-vpc -q gcloud compute networks delete spoke2-vpc -q gcloud compute networks delete hub-vpc -q
Langkah selanjutnya
- Baca tentang Praktik terbaik dan arsitektur referensi untuk desain VPC.
- Tinjau dokumentasi Peering Jaringan VPC dan Load Balancer Jaringan passthrough internal sebagai next hop.
- Baca tentang konfigurasi khusus untuk instance VM.