Ringkasan
Di lab ini, Anda akan membuat cluster standar yang menggunakan alamat IP RFC 1918 internal, menambahkan jaringan yang diotorisasi untuk akses API ke cluster tersebut, lalu mengonfigurasi kebijakan jaringan untuk keamanan Pod.
Catatan: Untuk lab ini, Mode GKE Standard akan digunakan. Lab ini berisi pembahasan mengenai kebijakan jaringan cluster yang diaktifkan secara default di GKE Autopilot.
Tujuan
Di lab ini, Anda akan mempelajari cara melakukan tugas-tugas berikut:
- Membuat dan menguji cluster standar yang menggunakan alamat IP RFC 1918 internal.
- Mengonfigurasi cluster untuk akses bidang kontrol jaringan yang diotorisasi.
- Mengonfigurasi kebijakan jaringan Cluster.
Penyiapan dan persyaratan
Untuk setiap lab, Anda akan memperoleh project Google Cloud baru serta serangkaian resource selama jangka waktu tertentu, tanpa biaya.
-
Klik tombol Start Lab. Jika Anda perlu membayar lab, jendela pop-up akan terbuka untuk memilih metode pembayaran.
Di sebelah kiri adalah panel Lab Details yang memuat sebagai berikut:
- Tombol Open Google Cloud console
- Waktu tersisa
- Kredensial sementara yang harus Anda gunakan untuk lab ini
- Informasi lain, jika diperlukan, untuk menyelesaikan lab ini
-
Klik Open Google Cloud console (atau klik kanan dan pilih Open Link in Incognito Window jika Anda menjalankan browser Chrome).
Lab akan menjalankan resource, lalu membuka tab lain yang menampilkan halaman Sign in.
Tips: Atur tab di jendela terpisah secara berdampingan.
Catatan: Jika Anda melihat dialog Choose an account, klik Use Another Account.
-
Jika perlu, salin Username di bawah dan tempel ke dialog Sign in.
{{{user_0.username | "Username"}}}
Anda juga dapat menemukan Username di panel Lab Details.
-
Klik Next.
-
Salin Password di bawah dan tempel ke dialog Welcome.
{{{user_0.password | "Password"}}}
Anda juga dapat menemukan Password di panel Lab Details.
-
Klik Next.
Penting: Anda harus menggunakan kredensial yang diberikan lab. Jangan menggunakan kredensial akun Google Cloud Anda.
Catatan: Menggunakan akun Google Cloud sendiri untuk lab ini dapat dikenai biaya tambahan.
-
Klik halaman berikutnya:
- Setujui persyaratan dan ketentuan.
- Jangan tambahkan opsi pemulihan atau autentikasi 2 langkah (karena ini akun sementara).
- Jangan mendaftar uji coba gratis.
Setelah beberapa saat, Konsol Google Cloud akan terbuka di tab ini.
Catatan: Untuk melihat menu yang berisi daftar produk dan layanan Google Cloud, klik Navigation menu di kiri atas, atau ketik nama layanan atau produk di kolom Search.
Setelah Anda menyelesaikan langkah login awal, dasbor project akan muncul.
Mengaktifkan Google Cloud Shell
Google Cloud Shell adalah virtual machine yang dilengkapi dengan berbagai fitur pengembangan. Virtual machine ini menawarkan direktori beranda persisten berkapasitas 5 GB dan berjalan di Google Cloud.
Google Cloud Shell menyediakan akses command line untuk resource Google Cloud Anda.
-
Di Cloud Console, pada toolbar di kanan atas, klik tombol Open Cloud Shell.

-
Klik Continue.
Proses menyediakan dan menghubungkan ke lingkungan memerlukan waktu beberapa saat. Setelah terhubung, Anda sudah diautentikasi, dan project ditetapkan ke PROJECT_ID Anda. Contoh:

gcloud adalah alat command line untuk Google Cloud. Alat ini sudah terinstal di Cloud Shell dan mendukung pelengkapan command line.
- Anda dapat menampilkan daftar nama akun yang aktif dengan perintah ini:
gcloud auth list
Output:
Akun berkredensial:
- @.com (aktif)
Contoh output:
Akun berkredensial:
- google1623327_student@qwiklabs.net
- Anda dapat menampilkan daftar project ID dengan perintah ini:
gcloud config list project
Output:
[core]
project =
Contoh output:
[core]
project = qwiklabs-gcp-44776a13dea667a6
Catatan:
Dokumentasi lengkap gcloud tersedia dalam
panduan ringkasan gcloud CLI
.
Tugas 1. Membuat cluster standar
Dalam tugas ini, Anda akan membuat cluster standar yang menggunakan alamat IP internal RFC 1918.
Semua worker node di cluster hanya akan memiliki alamat IP RFC 1918 internal. Hal ini memastikan bahwa workload worker node terisolasi dari Internet publik dan tidak memiliki alamat IP publik.
Menyiapkan cluster standar
- Di Navigation menu (
), klik Kubernetes Engine > Clusters.
- Klik Create, lalu pilih Switch to Standard Cluster untuk cluster.
- Beri nama cluster sebagai
standard-cluster.
- Pilih sebagai Zone.
- Di panel kiri, di Node Pools, klik default-pool.
- Di Number of nodes, ketik 2

- Di panel kiri, di Cluster, klik Networking.
- Pastikan Enable authorized networks tidak dipilih.
- Pilih kotak centang untuk Override control plane’s default private endpoint subnet.
- Untuk Private endpoint subnet, pilih default.

- Centang kotak untuk Enable Private nodes.
Catatan: Google Cloud menggunakan peering VPC untuk menghubungkan VPC cluster dengan jaringan VPC default Anda.
Anda mungkin harus men-scroll ke bawah untuk melihat opsi ini.
Dengan setelan ini, Anda dapat menentukan rentang alamat yang dapat mengakses cluster secara eksternal. Jika kotak centang ini tidak dipilih, Anda dapat mengakses kubectl hanya dari jaringan Google Cloud. Di lab ini, Anda hanya akan mengakses kubectl melalui jaringan Google Cloud, tetapi Anda akan memodifikasi setelan ini nanti.
- Klik Create.
Catatan: Anda perlu menunggu beberapa menit hingga deployment cluster selesai.
Memeriksa cluster
- Di Cloud Shell, masukkan perintah berikut untuk meninjau detail dari cluster baru Anda.
gcloud container clusters describe standard-cluster --zone {{{project_0.default_zone|ZONE}}}
Nilai berikut hanya muncul dalam cluster:
- privateEndpoint, alamat IP internal. Node menggunakan alamat IP internal ini untuk berkomunikasi dengan bidang kontrol cluster.
- publicEndpoint, alamat IP eksternal. Administrator dan layanan eksternal dapat menggunakan alamat IP eksternal untuk berkomunikasi dengan bidang kontrol cluster.
Anda memiliki beberapa opsi untuk mengunci cluster ke berbagai tingkat:
- Seluruh cluster dapat memiliki akses eksternal.
- Seluruh cluster dapat memiliki akses internal.
- Node dapat bersifat internal, sedangkan bidang kontrol cluster dapat bersifat publik, dan Anda dapat membatasi jaringan eksternal yang diotorisasi untuk mengakses bidang kontrol cluster.
Tanpa alamat IP publik, kode yang berjalan di node tidak dapat mengakses internet publik kecuali Anda mengonfigurasi gateway NAT seperti Cloud NAT.
Anda mungkin menggunakan cluster dengan akses internal untuk menyediakan layanan, seperti API internal yang hanya dimaksudkan untuk diakses oleh resource di dalam jaringan Anda. Misalnya, resource mungkin merupakan alat pribadi yang hanya digunakan perusahaan Anda. Atau resource mungkin berupa layanan backend yang diakses oleh layanan frontend, dan mungkin hanya layanan frontend tersebut yang diakses secara langsung oleh pengguna atau pelanggan eksternal. Dalam kasus seperti ini, cluster merupakan cara yang tepat untuk mengurangi area permukaan aplikasi yang dapat diserang.
Klik Periksa progres saya untuk memverifikasi tujuan.
Membuat cluster standar
Tugas 2. Menambahkan jaringan yang diizinkan untuk akses bidang kontrol cluster
Setelah pembuatan cluster, Anda mungkin ingin memberikan perintah ke cluster dari luar Google Cloud. Misalnya, Anda mungkin memutuskan bahwa hanya jaringan perusahaan Anda yang dapat memberikan perintah ke bidang kontrol cluster. Sayangnya, Anda tidak menetapkan jaringan yang diizinkan pada saat pembuatan cluster.
Dalam tugas ini, Anda akan menambahkan jaringan yang diizinkan untuk akses bidang kontrol cluster.
Catatan: Dalam tugas ini, Anda membuat API bidang kontrol Kubernetes dapat diakses oleh rentang alamat jaringan tertentu. Dalam penggunaan GKE di dunia nyata, koneksi ini akan digunakan oleh staf IT dan proses otomatis, bukan pengguna akhir.
- Pada Navigation menu di Konsol Google Cloud (
), klik Kubernetes Engine > Clusters.
- Klik standard-cluster untuk membuka halaman detail Cluster.
- Di tab Details, di bagian Control Plane Networking, klik Edit(
).
- Pilih Enable authorized networks.
- Klik Add an authorization network.
- Untuk Name, ketik nama untuk jaringan, gunakan
Corporate.
- Untuk Network, ketik rentang CIDR yang ingin Anda beri akses ke bidang kontrol cluster. Misalnya, Anda dapat menggunakan
192.168.1.0/24.
- Klik Done.
- Pastikan parameter berikut diaktifkan:
- Akses menggunakan alamat IP eksternal bidang kontrol
- Akses menggunakan alamat IP internal bidang kontrol dari region mana saja
- Terapkan jaringan yang diizinkan di endpoint internal bidang kontrol
- Tambahkan alamat IP eksternal Google Cloud ke jaringan yang diizinkan
Beberapa jaringan dapat ditambahkan di sini jika perlu, tetapi tidak lebih dari 50 rentang CIDR.
Catatan: Di luar lingkungan lab ini, contoh penggunaannya adalah hanya mengizinkan akses ke alamat IP publik firewall perusahaan Anda. Misalnya, jika alamat IP firewall perusahaan Anda adalah 8.8.8.14, Anda dapat mengizinkan akses ke 8.8.8.14/32.
- Klik Save changes di bagian bawah menu.
Klik Periksa progres saya untuk memverifikasi tujuan.
Menambahkan jaringan yang diizinkan untuk akses bidang kontrol cluster
Tugas 3. Membuat kebijakan jaringan cluster
Dalam tugas ini, Anda membuat kebijakan jaringan cluster untuk membatasi komunikasi antara Pod. Zona zero-trust penting untuk mencegah serangan lateral dalam cluster saat penyusup menyerang salah satu Pod.
Membuat cluster GKE
- Di Cloud Shell, ketik perintah berikut untuk menetapkan variabel lingkungan untuk nama cluster dan zona:
export my_zone={{{project_0.default_zone|ZONE}}}
export my_cluster=standard-cluster-1
- Konfigurasi pelengkapan command line kubectl di Cloud Shell:
source <(kubectl completion bash)
- Di Cloud Shell, ketik perintah berikut untuk membuat cluster Kubernetes. Perlu diketahui bahwa perintah ini menambahkan flag tambahan
--enable-network-policy ke parameter yang telah Anda gunakan dalam lab sebelumnya. Dengan flag tersebut, cluster ini dapat menggunakan kebijakan jaringan cluster:
gcloud container clusters create $my_cluster --num-nodes 3 --enable-ip-alias --zone $my_zone --enable-network-policy
- Di Cloud Shell, konfigurasi akses ke cluster Anda untuk alat command line kubectl menggunakan perintah berikut:
gcloud container clusters get-credentials $my_cluster --zone $my_zone
- Jalankan aplikasi server web sederhana dengan label
app=hello, dan ekspos aplikasi web secara internal di cluster:
kubectl run hello-web --labels app=hello \
--image=gcr.io/google-samples/hello-app:1.0 --port 8080 --expose
Membatasi traffic masuk ke Pod
Buat sampel file manifes NetworkPolicy bernama hello-allow-from-foo.yaml . File manifes ini menentukan kebijakan ingress yang mengizinkan akses ke Pod berlabel app: hello dari Pod berlabel app: foo.
- Buat dan buka file bernama
hello-allow-from-foo.yaml dengan nano menggunakan perintah berikut:
nano hello-allow-from-foo.yaml
- Setelah nano terbuka, tempel kode berikut ke file
hello-allow-from-foo.yaml:
kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
name: hello-allow-from-foo
spec:
policyTypes:
- Ingress
podSelector:
matchLabels:
app: hello
ingress:
- from:
- podSelector:
matchLabels:
app: foo
-
Tekan Ctrl+O, lalu tekan Enter untuk menyimpan file yang diedit.
-
Tekan Ctrl+X untuk keluar dari editor teks nano.
-
Buat kebijakan ingress:
kubectl apply -f hello-allow-from-foo.yaml
- Verifikasi bahwa kebijakan telah dibuat:
kubectl get networkpolicy
Output:
NAME POD-SELECTOR AGE
hello-allow-from-foo app=hello 7s
Memvalidasi kebijakan ingress
- Jalankan Pod sementara bernama
test-1 dengan label app=foo dan dapatkan shell di Pod:
kubectl run test-1 --labels app=foo --image=alpine --restart=Never --rm --stdin --tty
Catatan: Tombol kubectl yang digunakan di sini bersama dengan perintah run harus diperhatikan.
--stdin ( atau -i ) membuat sesi interaksi yang ditambahkan ke STDIN di container.
--tty ( atau -t ) mengalokasikan TTY untuk setiap container di pod.
--rm menginstruksikan Kubernetes untuk memperlakukan ini sebagai Pod sementara yang akan dihapus begitu tugas pemulaiannya selesai. Karena ini merupakan sesi interaktif, switch ini akan dihapus setelah pengguna keluar dari sesi.
--label ( atau -l ) menambahkan serangkaian label ke pod.
--restart menetapkan kebijakan mulai ulang untuk Pod.
- Ajukan permintaan ke endpoint hello-web:8080 untuk memverifikasi bahwa traffic masuk diizinkan:
wget -qO- --timeout=2 http://hello-web:8080
Output:
If you don't see a command prompt, try pressing enter.
/ # wget -qO- --timeout=2 http://hello-web:8080
Hello, world!
Version: 1.0.0
Hostname: hello-web-8b44b849-k96lh
/ #
-
Ketik exit lalu tekan ENTER untuk keluar dari shell.
-
Sekarang, Anda akan menjalankan Pod berbeda yang menggunakan nama Pod yang sama tapi menggunakan label, app=other, yang tidak sesuai dengan podSelector di kebijakan jaringan yang aktif. Pod ini seharusnya tidak memiliki kemampuan untuk mengakses aplikasi hello-web.
kubectl run test-1 --labels app=other --image=alpine --restart=Never --rm --stdin --tty
- Ajukan permintaan ke endpoint hello-web:8080 untuk memverifikasi bahwa traffic masuk tidak diizinkan:
wget -qO- --timeout=2 http://hello-web:8080
Waktu permintaan habis.
Output:
If you don't see a command prompt, try pressing enter.
/ # wget -qO- --timeout=2 http://hello-web:8080
wget: download timed out
/ #
- Ketik exit lalu tekan ENTER untuk keluar dari shell.
Membatasi traffic keluar dari Pod
Anda dapat membatasi traffic keluar (egress) dengan cara sama yang Anda lakukan untuk traffic masuk. Meski demikian, untuk membuat kueri nama host internal (seperti hello-web) atau nama host eksternal (seperti www.example.com), Anda harus mengizinkan resolusi DNS di kebijakan jaringan egress. Traffic DNS terjadi di port 53, menggunakan protokol TCP dan UDP.
Mari kita buat file manifes NetworkPolicy bernama foo-allow-to-hello.yaml. File ini menentukan kebijakan yang mengizinkan Pod dengan label app: foo untuk berkomunikasi dengan Pod berlabel app: hello di nomor port mana saja, dan mengizinkan Pod berlabel app: foo untuk berkomunikasi dengan komputer mana saja di port UDP 53 yang digunakan untuk resolusi DNS. Tanpa port DNS yang terbuka, Anda tidak akan dapat me-resolve nama host.
- Buat dan buka file bernama
foo-allow-to-hello.yaml dengan nano menggunakan perintah berikut:
nano foo-allow-to-hello.yaml
- Setelah nano terbuka, tempel kode berikut ke file
foo-allow-to-hello.yaml:
kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
name: foo-allow-to-hello
spec:
policyTypes:
- Egress
podSelector:
matchLabels:
app: foo
egress:
- to:
- podSelector:
matchLabels:
app: hello
- to:
ports:
- protocol: UDP
port: 53
-
Tekan Ctrl+O, lalu tekan Enter untuk menyimpan file yang diedit.
-
Tekan Ctrl+X untuk keluar dari editor teks nano.
-
Buat kebijakan egress:
kubectl apply -f foo-allow-to-hello.yaml
- Verifikasi bahwa kebijakan telah dibuat:
kubectl get networkpolicy
Output:
NAME POD-SELECTOR AGE
foo-allow-to-hello app=foo 7s
hello-allow-from-foo app=hello 5m
Validasi kebijakan egress
- Deploy aplikasi web baru bernama hello-web-2 dan ekspos secara internal aplikasi web tersebut di cluster:
kubectl run hello-web-2 --labels app=hello-2 \
--image=gcr.io/google-samples/hello-app:1.0 --port 8080 --expose
- Jalankan Pod sementara dengan label
app=foo dan dapatkan prompt shell di dalam container.
kubectl run test-3 --labels app=foo --image=alpine --restart=Never --rm --stdin --tty
- Verifikasi bahwa Pod dapat terhubung ke hello-web:8080:
wget -qO- --timeout=2 http://hello-web:8080
Output:
If you don't see a command prompt, try pressing enter.
/ # wget -qO- --timeout=2 http://hello-web:8080
Hello, world!
Version: 1.0.0
Hostname: hello-web
/ #
- Verifikasi bahwa Pod tidak dapat terhubung ke hello-web-2:8080:
wget -qO- --timeout=2 http://hello-web-2:8080
Cara ini gagal karena tak satu pun kebijakan Jaringan yang telah Anda tetapkan yang mengizinkan traffic ke Pod berlabel app: hello-2.
- Verifikasi bahwa Pod tidak dapat terhubung ke situs eksternal, seperti www.example.com:
wget -qO- --timeout=2 http://www.example.com
Cara ini gagal karena kebijakan jaringan tidak mengizinkan traffic http eksternal (tcp port 80).
- Ketik exit lalu tekan ENTER untuk keluar dari shell.
Klik Periksa progres saya untuk memverifikasi tujuan.
Menjalankan aplikasi server web
Mengakhiri lab Anda
Setelah Anda menyelesaikan lab, klik Akhiri Lab. Google Cloud Skills Boost menghapus resource yang telah Anda gunakan dan membersihkan akun.
Anda akan diberi kesempatan untuk menilai pengalaman menggunakan lab. Pilih jumlah bintang yang sesuai, ketik komentar, lalu klik Submit.
Makna jumlah bintang:
- 1 bintang = Sangat tidak puas
- 2 bintang = Tidak puas
- 3 bintang = Netral
- 4 bintang = Puas
- 5 bintang = Sangat puas
Anda dapat menutup kotak dialog jika tidak ingin memberikan masukan.
Untuk masukan, saran, atau koreksi, gunakan tab Support.
Hak cipta 2020 Google LLC Semua hak dilindungi undang-undang. Google dan logo Google adalah merek dagang dari Google LLC. Semua nama perusahaan dan produk lain mungkin adalah merek dagang masing-masing perusahaan yang bersangkutan.