Membedah Multiple VPC Network Di Google Cloud
Tags: googlecloud, vpc
Published: 2023-04-21 01:06:00

Foto oleh <a href="https://unsplash.com/@alinnnaaaa?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">Alina Grubnyak</a> on <a href="https://unsplash.com/s/photos/networks?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">Unsplash</a>
  

---

Virtual Private Cloud atau VPC adalah versi virtual dari network fisik yang disediakan oleh public cloud. VPC dibangun dari subnet, di mana subnet tersebut bisa diperoleh dari subnet yang sudah ditentukan (predefined) atau subnet yang kita tentukan sendiri. Subnet tersebut didefinisikan menggunakan notasi CIDR (Classless Interdomain Routing) dengan keterangan sebagai berikut
* gambar notasi CIDR
Semakin tinggi angka CIDR, jumlah host atau komputer yang terhubung dalam suatu subnet akan semakin sedikit.

VPC di Google Cloud Platform (selanjutnya disebut GCP) memiliki public dan private IP. Perbedaan antara public dan private IP pada VPC adalah sebagai berikut

| Public IP  | Private IP  |
|---|---|
| Bisa didapat dari pool (bersifat ephemeral/sementara) atau didefinisikan sendiri (bersifat statis)  | Didapat dari rentang subnet pada sebuah VM menggunakan DHCP  |
| Dapat terhubung dengan internet  | Hanya bisa terhubung dengan VM  |

# Membuat VPC Network di Google Cloud Platform
## Skenario
Artikel ini ditujukan untuk membedah *course* tersemat yang bisa diakses [di sini](https://www.cloudskillsboost.google/catalog_lab/1031). Pada artikel ini, kita akan mencoba membuat 2 *VPC network* dengan *region* yang berbeda dengan *network diagram* sebagai berikut.

![Network Diagram](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/m09wqawdooa1xkau2493.png)

Kita akan membuat `examplenet` *VPC* dan `managementnet` *VPC*, di mana pada `examplenet` *VPC* terdapat 2 buah *subnet* yang masing-masing *subnet* memiliki sebuah *VM* yang akan kita buat dari *compute engine*, serta `managementnet` *VPC* yang memiliki sebuah *VM* dari *compute engine*.

## Menginisiasi VPC Network
1. Untuk membuat *VPC network* di Google Cloud Console, pilih menu **VPC Network** kemudian pilih **VPC networks** seperti pada gambar.

![Menu VPC network](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cpjklwmphocslw9lqxnq.png)

2. Pilih **Create VPC Network** seperti pada gambar

![Create VPC network](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/p3pccn07o00w8266ksji.png)

3. Jika tampilan pada layar sudah seperti ini, isi form dengan nilai/*value* sebagai berikut.

![Form VPC](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zvkbidzarc1bqxr1txw9.png)

**Value untuk mangementnet**

| Field  | Value  |
|---|---|
| Name                   | managementnet  |
| Subnet creation mode  | custom       |
| Name (New subnet)    | managementnetsubnet-asiasoutheast |
| Region               | asia-southeast2                   |
| IPv4 range           | 10.173.0.0/20                     |

Klik tombol **Create** berwarna biru

**Value untuk examplenet**

| Field  | Value  |
|---|---|
| Name  | examplenet|
| Subnet creation mode  | custom  |
| Name (New subnet)  | examplenetsubnet-asiasoutheast  |
| Region  | asia-southeast2  |
| IPv4 range  | 10.120.0.0/20  |

untuk menambahkan *subnet* `examplenetsubnet-asiaeast`, klik **add subnet**, lalu isi *value* sebagai berikut

| Field  | Value  |
|---|---|
| Name (New subnet)  | examplenetsubnet-asiaeast  |
| Region  | asia-east2  |
| IPv4 range  | 10.130.0.0/21  |

Klik tombol **Create** berwarna biru

Periksa kembali apakah *VPC network* kita sudah berhasil diinisiasi atau belum dengan melihat di *dashboard VPC network*. Kurang lebih ketika kita sudah menjalankan langkah-langkah di atas, tampilan halaman *dashboard* kita akan sebagai berikut.

![Tampilan dashboard VPC](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/o9o4rvu5eo01bayuxb1z.png)

Jika teman-teman penasaran dengan *range IPv4* yang bisa digunakan sebagai *subnet* dalam *VPC*, teman-teman bisa membaca lebih lanjut [di sini](https://cloud.google.com/vpc/docs/subnets#valid-ranges)

## Membuat Firewall
*Firewall untuk apa?*. Kegunaan *firewall* pada artikel ini supaya kita bisa mengakses *port VM* yang kita buat. Untuk membuat *firewall*, teman-teman bisa mengakses menu seperti di gambar berikut.

![Membuat Firewall](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jqs9oh2kyl6ufdakbdr4.png)

Setelah muncul halaman *dashboard* pilih **Create Firewall Rules**

![Dashboard firewall rules](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d266weregzf3e2pwgzi7.png)

Kemudian, isi *field* dengan *value* sebagai berikut.

| Field  | Value  |
|---|---|
| Name  | examplenet-allow-icmp-ssh-rdp|
| Network  | examplenet|
| Direction of Traffic  | Ingress |
| Targets  | All instances in the network  |
| Source IPv4 Address  | 0.0.0.0/0  |
| Specified Protocols and Ports  | Centang TCP dan isi port 22 dan port 3389, serta centang others dan isi dengan protokol ICMP  |

Klik tombol **Create** berwarna biru

Buat satu lagi *firewall rules* dengan isi *field* dengan *value* sebagai berikut.

| Field  | Value  |
|---|---|
| Name  | examplenetmanagement-allow-icmp-ssh-rdp|
| Network  | examplenetmanagement|
| Direction of Traffic  | Ingress |
| Targets  | All instances in the network  |
| Source IPv4 Address  | 0.0.0.0/0  |
| Specified Protocols and Ports  | Centang TCP dan isi port 22 dan port 3389, serta centang others dan isi dengan protokol ICMP  |

Klik tombol **Create** berwarna biru

Mari kita coba bedah *firewal rules* yang telah kita buat. 

1. Ketika kita membuat *firewall rule*, kita harus memiliki nama untuk *rule* tersebut dan nama tersebut haruslah bersifat unik. 
2. Setiap *network* atau *VPC network* bisa memiliki lebih dari satu *firewall rules*, silakan teman-teman coba membuat *firewall rule* yang lain untuk *examplenetmanagement VPC* atau *examplenet VPC*.
3. Kita bisa mengatur apakah *firewall rule* yang kita buat diterapkan untuk data yang masuk ke dalam atau keluar *VPC network* kita dengan memilih *ingress* untuk data yang masuk dan *egress* untuk data yang keluar.
4. Setiap *firewall rule* memiliki *target* di mana *target* tersebut akan diterapkan pada *VPC network* kita. Jika teman-teman mengklik *dropdown target*, teman-teman akan menemukan pilihan *All instances in the network*, *Specified target tags*, dan *
Specified service account*. Pilih *All instances in the network* jika teman-teman ingin *firewall rule* tersebut diterapkan pada seluruh *instance* atau komputasi yang menerapkan *firewall rule* tersebut (atau *VPC network* yang terhubung menggunakan *firewall rule* tersebut), gunakan *Specified target tags* jika ingin menerapkan sebuah atau beberapa *tags* pada *instance* atau komputasi yang menerapkan *firewall rule* tersebut (atau *VPC network* yang terhubung menggunakan *firewall rule* tersebut), dan gunakan *Specified service account* jika ingin menerapkan sebuah atau beberapa *service account* pada *instance* atau komputasi yang menerapkan *firewall rule* tersebut (atau *VPC network* yang terhubung menggunakan *firewall rule* tersebut). Kali ini kita menggunakan *All instances in the network* yang akan kita terapkan ketika kita membuat *VM instance* nanti.
5. Sama seperti *target*, kita juga bisa memilih apakah *firewall rule* yang kita buat akan diterapkan pada rentang IPv4, rentang IPv6, atau berdasarkan *service account* tertentu dengan mengisi *Source field*. Pada artikel ini, kita mengisi *Source field* dengan rentang alamat IPv4 `0.0.0.0/0` yang artinya seluruh *subnet* pada *VPC network* akan menerapkan *firewall rule* ini.
5. *Firewall rule* yang kita terapkan memungkinkan kita berkomunikasi kepada *instance* yang menerapkan *firewall rule* tersebut. Pada artikel ini, kita mengizinkan *port 22* untuk melakukan `SSH`, *port 3389* untuk `RDP`, serta protokol `ICMP` untuk memeriksa apakah ada *error* ketika kita mengirim data.

Jika langkah-langkah di atas sudah kita jalankan, di *dashboard firewall rules* kita kurang lebih akan seperti ini.

![Dashboard firewall rules](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/anxuhm3rcrtn8w7bxvbd.png)

## Membuat Compute Engine Instances
Langkah selanjutnya adalah membuat *compute engine instaces* dengan mengakses menu seperti di gambar.

![Menu Compute Engine](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nirzd0y6tpc2tcj5rvg2.png)

Jika sudah muncul *dasboard Compute Engine*, klik **Create Instance**, kemudian isi *field* serta *value*-nya sebagai berikut.

**Instance `examplemanagementnet-asiasoutheast-vm`**

| Field  | Value  |
|---|---|
| Name  | examplemanagementnet-asiasoutheast-vm |
| Region | asia-southeast, untuk *Zone*, pilih asia-southeast2-a |
| Series  | E2 dengan *Machine type* e2-micro|

Pergi ke bagian **Advanced Options**, kemudian pilih bagian **Networking**. Isi *field* dengan *value* sebagai berikut.

| Field  | Value  |
|---|---|
| Network| examplenetmanagement |
| Subnetwork | managementsubnet-asiasoutheast |

Klik tombol **Create** berwarna biru

**Instance `examplenet-asiaeast-vm`**

| Field  | Value  |
|---|---|
| Name  | examplenet-asiaeast-vm |
| Region | asia-east, untuk *Zone*, pilih asia-east2-c |
| Series  | E2 dengan *Machine type* e2-micro|

Pergi ke bagian **Advanced Options**, kemudian pilih bagian **Networking**. Isi *field* dengan *value* sebagai berikut.

| Field  | Value  |
|---|---|
| Network| examplenet  |
| Subnetwork | examplesubnet-asiaeast |

Klik tombol **Create** berwarna biru

**Instance `examplenet-asiasoutheast-vm`**

| Field  | Value  |
|---|---|
| Name  | examplenet-asiasoutheast-vm |
| Region | asia-southeast, untuk *Zone*, pilih asia-southeast2-a |
| Series  | E2 dengan *Machine type* e2-micro|

Pergi ke bagian **Advanced Options**, kemudian pilih bagian **Networking**. Isi *field* dengan *value* sebagai berikut.

| Field  | Value  |
|---|---|
| Network| examplenet  |
| Subnetwork | examplesubnet-asiasoutheast |

Klik tombol **Create** berwarna biru

**Instance `vm-manager`**

| Field  | Value  |
|---|---|
| Name  | vm-manager |
| Region | asia-southeast, untuk *Zone*, pilih asia-southeast2-a |
| Series  | E2 dengan *Machine type* e2-small|

Pergi ke bagian **Advanced Options**, kemudian pilih bagian **Networking**. Untuk *instance* ini, kita akan menghubungkan 2 *VPC network* menggunakan 2 buah *network interface*. Isi *field* dengan *value* sebagai berikut.

| Field  | Value  |
|---|---|
| Network| examplenet  |
| Subnetwork | examplesubnet-asiasoutheast |

Klik **Add Network Interface**, kemudian isi lagi form dengan *value* sebagai berikut.

| Field  | Value  |
|---|---|
| Network| examplemanagementnet  |
| Subnetwork | managementsubnet-asiasoutheast |

Klik tombol **Create** berwarna biru

Jika langkah-langkah di atas sudah kita tempuh, kita akan mendapatkan tampilan pada *dashboard Compute Engine* sebagai berikut.

![Dashboard Compute Engine](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8j34c01im58s401povnd.png)

## Memeriksa Koneksi Antar VPC
Mari kita bereksperimen apakah *VPC* yang kita terapkan pada *network interface* di *instance* kita memungkinkan seluruh *instance* kita terhubung satu sama lain. Perhatikan *dashboard Compute Engine* teman-teman. Teman-teman bisa melihat *internal IP* dan *external IP* yang menempel pada setiap *instance*. Di sebelah *external IP*, ada *SSH* yang akan kita gunakan untuk menguji konektivitas dari setiap *instance* yang kita buat.

Pertama, tekan *SSH* pada *instance* `examplenet-asiaeast-vm`, kemudian gunakan perintah di bawah ini untuk menguji apakah *instance* tersebut terhubung dengan *instance* `examplenet-asiasoutheast-vm` menggunakan *external IP* dari *instance* `examplenet-asiasoutheast-vm`.

```
ping -c 3 <alamat external IP examplenet-asiasoutheast-vm>
```

Kita berhasil melakukan `ping` dari *instance* `examplenet-asiaeast-vm` ke *instance* `examplenet-asiasoutheast-vm`. Sekarang cobalah untuk melakukan `ping` dari *instance* `examplenet-asiaeast-vm` ke *instance* `examplenet-asiasoutheast-vm` menggunakan *internal IP* dari *instance* `examplenet-asiasoutheast-vm` menggunakan potongan perintah di bawah.

```
ping -c 3 <alamat internal IP examplenet-asiasoutheast-vm>
```

Kita juga berhasil melakukan `ping` dari *instance* `examplenet-asiaeast-vm` ke *instance* `examplenet-asiasoutheast-vm`. Hal ini dikarenakan *instance* `examplenet-asiaeast-vm` dan *instance* `examplenet-asiasoutheast-vm` masih satu *VPC network*, yaitu `examplenet`, walaupun mereka berada pada *subnet* yang berbeda.

Sekarang, cobalah melakukan `ping` dari *instance* `examplenet-asiaeast-vm` ke *instance* `examplemanagementnet-asiasoutheast-vm` menggunakan *external IP* dari *instance* `examplemanagementnet-asiasoutheast-vm`. Kita juga berhasil melakukan `ping`dari *instance* `examplenet-asiaeast-vm` ke *instance* `examplemanagementnet-asiasoutheast-vm`.

Kemudian, cobalah untuk melakukan `ping` dari *instance* `examplenet-asiaeast-vm` ke *instance* `examplemanagementnet-asiasoutheast-vm` menggunakan *internal IP* dari *instance* `examplemanagementnet-asiasoutheast-vm`. Jika kita lihat di terminal, tidak ada data yang berhasil terkirim. Hal ini disebabkan *instance* `examplemanagementnet-asiasoutheast-vm` berada di *VPC network* yang berbeda dengan *instance* `examplemanagementnet-asiasoutheast-vm`.

Terakhir, cobalah melakukan `ping` dari *instance* `vm-manager` ke *instance* `examplenet-asiaeast-vm` menggunakan *internal IP* dari *instance* `examplenet-asiaeast-vm`. Kita tidak akan mendapatkan respons dari *instance* `examplenet-asiaeast-vm`, karena *network interface* dari *instance* `vm-manager` (`eth0`) tersambung dengan *instance* `examplenet-asiasoutheast-vm`.

## Rangkuman
Pada artikel ini, kita telah sama-sama membahas apa itu *VPC network*, *public IP*, *static IP*, serta kegunaan dari *VPC network* di Google Cloud. Selain itu, kita juga mencoba membuat dan menguji konektivitas antar *VM instance* menggunakan *internal IP address* maupun *external IP address* dari masing-masing *VM instance*. Hasilnya, kita bisa melakukan `ping` untuk *instance* yang masih berada dalam satu *subnet* dan kita juga bisa melakukan `ping` untuk *instance* yang *network interface* nya terhubung dengan salah satu *instance* pada suatu *subnetwork*.

## Referensi
[https://cloud.google.com/vpc/docs/vpc](https://cloud.google.com/vpc/docs/vpc)
[https://www.cloudskillsboost.google/catalog_lab/1031](https://www.cloudskillsboost.google/catalog_lab/1031)