Tutorial ini menunjukkan cara menggunakan kebijakan jaringan cluster untuk mengontrol Pod mana yang menerima traffic jaringan masuk, dan Pod mana yang dapat mengirim traffic keluar. Untuk mengetahui informasi selengkapnya, silakan melihat Membuat kebijakan jaringan cluster.
Kebijakan jaringan memungkinkan Anda membatasi koneksi antar-Pod. Oleh karena itu, menggunakan kebijakan jaringan memberikan keamanan yang lebih baik dengan mengurangi cakupan pelanggaran keamanan.
Perhatikan bahwa kebijakan jaringan menentukan apakah koneksi diizinkan, dan kebijakan tersebut tidak menawarkan fitur tingkat yang lebih tinggi seperti otorisasi atau transpor aman (seperti SSL/TLS).
Tujuan
Dalam tutorial ini, Anda akan mempelajari:- Cara membuat cluster dengan penegakan Kebijakan Jaringan
- Cara membatasi traffic masuk ke Pod menggunakan label
- Cara membatasi traffic keluar dari Pod menggunakan label
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
Lakukan langkah-langkah berikut untuk mengaktifkan Kubernetes Engine API:- Buka halaman Kubernetes Engine di Konsol Google Cloud.
- Buat atau pilih project.
- Tunggu hingga API dan layanan terkait diaktifkan. Proses ini dapat memerlukan waktu beberapa menit.
-
Make sure that billing is enabled for your Google Cloud project.
Instal alat command line berikut yang digunakan dalam tutorial ini:
-
gcloud
digunakan untuk membuat dan menghapus cluster Kubernetes Engine.gcloud
disertakan dalamgcloud
CLI. -
kubectl
digunakan untuk mengelola Kubernetes, sistem orkestrasi cluster yang digunakan oleh Kubernetes Engine. Anda dapat menginstalkubectl
menggunakangcloud
:gcloud components install kubectl
Clone kode contoh dari GitHub:
git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples cd kubernetes-engine-samples/networking/network-policies
Menetapkan default untuk alat command line gcloud
Untuk menghemat waktu saat mengetik opsi project ID dan Zona Compute Engine di alat command line gcloud
, Anda dapat menetapkan setelan default:
gcloud config set project project-id gcloud config set compute/zone compute-zone
Membuat cluster GKE dengan penegakan kebijakan jaringan
Untuk membuat cluster container dengan penegakan kebijakan jaringan, jalankan perintah berikut:
gcloud container clusters create test --enable-network-policy
Membatasi traffic masuk ke Pod
Resource NetworkPolicy
Kubernetes memungkinkan Anda mengonfigurasi kebijakan akses jaringan
untuk Pod. Objek NetworkPolicy
berisi informasi berikut:
Pod yang menjadi sasaran kebijakan jaringan, biasanya ditetapkan oleh pemilih label
Jenis traffic yang terpengaruh oleh kebijakan jaringan: Traffic Ingress untuk traffic masuk, Traffic Keluar untuk traffic keluar, atau keduanya
Untuk kebijakan Ingress, Pod mana yang dapat terhubung ke Pod yang ditentukan
Untuk kebijakan Keluar, Pod tempat Pod yang ditetapkan dapat dihubungkan
Pertama, jalankan aplikasi server web dengan label app=hello
dan ekspos secara internal di cluster:
kubectl run hello-web --labels app=hello \ --image=us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0 --port 8080 --expose
Selanjutnya, konfigurasikan NetworkPolicy
untuk mengizinkan traffic ke Pod hello-web
hanya dari Pod app=foo
. Traffic masuk lainnya dari Pod yang tidak memiliki label ini, traffic eksternal, dan traffic dari Pod di namespace lain diblokir.
Manifes berikut memilih Pod dengan label app=hello
dan menentukan
kebijakan Ingress untuk mengizinkan traffic hanya dari Pod dengan label app=foo
:
Untuk menerapkan kebijakan ini ke cluster, jalankan perintah berikut:
kubectl apply -f hello-allow-from-foo.yaml
Memvalidasi kebijakan Ingress
Pertama, jalankan Pod sementara dengan label app=foo
dan dapatkan shell di Pod:
kubectl run -l app=foo --image=alpine --restart=Never --rm -i -t test-1
Ajukan permintaan ke endpoint hello-web:8080
untuk memverifikasi bahwa traffic masuk diizinkan:
/ # wget -qO- --timeout=2 http://hello-web:8080
Hello, world! Version: 1.0.0 Hostname: hello-web-2258067535-vbx6z / # exit
Traffic dari app=foo
Pod ke Pod app=hello
diaktifkan.
Selanjutnya, jalankan Pod sementara dengan label yang berbeda (app=other
) dan dapatkan shell
di dalam Pod:
kubectl run -l app=other --image=alpine --restart=Never --rm -i -t test-1
Buat permintaan yang sama untuk mengamati bahwa traffic tidak diizinkan dan karenanya waktu permintaan habis, lalu keluar dari shell Pod:
/ # wget -qO- --timeout=2 http://hello-web:8080
wget: download timed out / # exit
Membatasi traffic keluar dari Pod
Anda dapat membatasi traffic keluar seperti yang Anda lakukan untuk traffic masuk.
Namun, untuk dapat membuat kueri nama host internal seperti hello-web
atau nama host
eksternal seperti www.example.com
, Anda harus mengizinkan resolusi DNS (Domain Name System)
dalam kebijakan jaringan egress. Traffic DNS terjadi di port 53, menggunakan protokol TCP dan UDP.
Untuk mengaktifkan kebijakan jaringan keluar, deploy NetworkPolicy
yang mengontrol
traffic keluar dari Pod dengan label app=foo
, dan hanya mengizinkan traffic
ke Pod dengan label app=hello
, serta traffic DNS.
Manifes berikut menentukan kebijakan jaringan yang mengontrol traffic keluar
dari Pod dengan label app=foo
dengan dua tujuan yang diizinkan:
- Pod dalam namespace yang sama dengan label
app=hello
. - Pod Cluster atau endpoint eksternal di port 53 (UDP dan TCP).
Untuk menerapkan kebijakan ini ke cluster, jalankan perintah berikut:
kubectl apply -f foo-allow-to-hello.yaml
Validasi kebijakan egress
Pertama, deploy aplikasi web baru bernama hello-web-2
dan ekspos secara internal di cluster:
kubectl run hello-web-2 --labels app=hello-2 \ --image=us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0 --port 8080 --expose
Selanjutnya, jalankan Pod sementara dengan label app=foo
dan buka shell di dalam
penampung:
kubectl run -l app=foo --image=alpine --rm -i -t --restart=Never test-3
Validasi bahwa Pod dapat terhubung ke hello-web:8080
:
/ # wget -qO- --timeout=2 http://hello-web:8080
Hello, world!
Version: 1.0.0
Hostname: hello-web-2258067535-vbx6z
Validasi bahwa Pod tidak dapat terhubung ke hello-web-2:8080
:
/ # wget -qO- --timeout=2 http://hello-web-2:8080
wget: download timed out
Validasi bahwa Pod tidak dapat terhubung ke situs eksternal seperti
www.example.com
, dan keluar dari shell Pod.
/ # wget -qO- --timeout=2 http://www.example.com
wget: download timed out
/ # exit
Pembersihan
Agar tidak perlu membayar biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, hapus project yang berisi resource tersebut, atau simpan project dan hapus setiap resource.
Menghapus cluster container: Langkah ini akan menghapus resource yang membentuk cluster container, seperti instance komputasi, disk, dan resource jaringan.
gcloud container clusters delete test