Tutorial ini menunjukkan cara mengakses cluster pribadi di Google Kubernetes Engine (GKE) melalui internet menggunakan bastion host.
Anda dapat membuat cluster pribadi GKE dengan tidak ada akses klien ke endpoint publik. Opsi akses ini meningkatkan keamanan cluster dengan mencegah semua akses dari internet ke panel kontrol. Namun, menonaktifkan akses ke endpoint publik akan mencegah Anda berinteraksi dengan cluster dari jarak jauh, kecuali jika Anda menambahkan alamat IP klien jarak jauh sebagai jaringan yang diizinkan.
Tutorial ini menunjukkan cara menyiapkan bastion host, yang merupakan mesin host dengan tujuan khusus yang dirancang untuk mengatasi serangan. Bastion host menggunakan Tinyproxy untuk meneruskan traffic klien ke cluster. Gunakan Identity-Aware Proxy (IAP) untuk mengakses bastion host dari klien jarak jauh dengan aman.
Membuat cluster pribadi
Buat cluster pribadi baru tanpa akses klien ke endpoint publik. Tempatkan cluster di subnetnya sendiri. Anda dapat melakukannya menggunakan Google Cloud CLI atau konsol Google Cloud .
gcloud
Jalankan perintah berikut:
gcloud container clusters create-auto CLUSTER_NAME \
--location=CONTROL_PLANE_LOCATION \
--create-subnetwork=name=SUBNET_NAME \
--enable-master-authorized-networks \
--enable-private-nodes \
--enable-private-endpoint
Ganti kode berikut:
CLUSTER_NAME
: nama cluster baru.CONTROL_PLANE_LOCATION
: region Compute Engine dari bidang kontrol cluster Anda.SUBNET_NAME
: nama subnetwork baru tempat Anda ingin menempatkan cluster.
Konsol
Buat subnetwork Virtual Private Cloud
Buka halaman VPC networks di konsol Google Cloud .
Klik jaringan default.
Di bagian Subnet, klik Tambahkan subnet.
Pada dialog Tambahkan subnet, tentukan hal berikut:
- Nama: Nama untuk subnet baru.
- Region: Region untuk subnet. Region ini harus sama dengan region cluster.
- Rentang alamat IP: Tentukan
10.2.204.0/22
atau rentang lain yang tidak bertentangan dengan rentang lain di Jaringan VPC. - Untuk Akses Google Pribadi, pilih opsi Aktif.
Klik Tambahkan.
Membuat cluster pribadi
Buka halaman Google Kubernetes Engine di konsol Google Cloud .
Klik
Buat.Klik Konfigurasi untuk GKE Autopilot.
Tentukan Nama dan Region untuk cluster baru. Region harus sama dengan subnet.
Di bagian Networking, pilih opsi Cluster pribadi.
Hapus centang pada kotak Akses panel kontrol menggunakan alamat IP eksternalnya.
Dari menu drop-down Node subnet, pilih subnet yang Anda buat.
Konfigurasikan setelan lain untuk cluster secara opsional.
Klik Buat.
Anda juga dapat menggunakan cluster GKE Standard dengan flag --master-ipv4-cidr
yang ditentukan.
Membuat VM bastion host
Buat VM Compute Engine dalam jaringan internal cluster pribadi untuk bertindak sebagai bastion host yang dapat mengelola cluster.
gcloud
Membuat VM Compute Engine:
gcloud compute instances create INSTANCE_NAME \
--zone=COMPUTE_ZONE \
--machine-type=e2-micro \
--network-interface=no-address,network-tier=PREMIUM,subnet=SUBNET_NAME
Ganti kode berikut:
INSTANCE_NAME
: nama VM.COMPUTE_ZONE
: zona Compute Engine untuk VM. Tempatkan ini di region yang sama dengan cluster.SUBNET_NAME
: subnetwork tempat Anda ingin menempatkan VM.
Konsol
Buka halaman VM instances di konsol Google Cloud .
Klik Create instance.
Tentukan nilai berikut:
- Nama: nama VM Anda.
- Region dan Zona: region dan zona VM Anda. Gunakan region yang sama dengan cluster Anda.
- Jenis mesin: jenis mesin. Pilih jenis mesin kecil, seperti
e2-micro
. - Untuk Antarmuka jaringan, pilih jaringan VPC dan subnet yang sama dengan cluster.
- Konfigurasikan setelan lain untuk instance secara opsional.
Klik Buat.
Buat aturan firewall
Untuk mengizinkan IAP terhubung ke VM bastion host Anda, buat aturan firewall.
Men-deploy proxy
Setelah bastion host dan cluster pribadi dikonfigurasi, Anda harus men-deploy daemon proxy di host untuk meneruskan traffic ke panel kontrol cluster. Untuk tutorial ini, Anda akan menginstal Tinyproxy.
Mulai sesi ke VM Anda:
gcloud compute ssh INSTANCE_NAME --tunnel-through-iap --project=PROJECT_ID
Instal Tinyproxy:
sudo apt install tinyproxy
Buka file konfigurasi Tinyproxy:
sudo vi /etc/tinyproxy/tinyproxy.conf
Dalam file, lakukan hal berikut:
- Pastikan portnya adalah
8888
. Telusuri bagian
Allow
:/Allow 127
Tambahkan baris berikut ke bagian
Allow
:Allow localhost
- Pastikan portnya adalah
Simpan file dan mulai ulang Tinyproxy:
sudo service tinyproxy restart
Keluar dari sesi:
exit
Menghubungkan ke cluster dari klien jarak jauh
Setelah mengonfigurasi Tinyproxy, Anda harus menyiapkan klien jarak jauh dengan kredensial cluster dan menentukan proxy. Lakukan hal berikut di klien jarak jauh:
Dapatkan kredensial untuk cluster:
gcloud container clusters get-credentials CLUSTER_NAME \ --location=CONTROL_PLANE_LOCATION \ --project=PROJECT_ID
Ganti kode berikut:
CLUSTER_NAME
: nama cluster pribadi.CONTROL_PLANE_LOCATION
: lokasi Compute Engine bidang kontrol cluster Anda. Berikan region untuk cluster regional, atau zona untuk cluster zona.PROJECT_ID
: ID Google Cloud project cluster.
Buat tunnel ke bastion host menggunakan IAP:
gcloud compute ssh INSTANCE_NAME \ --tunnel-through-iap \ --project=PROJECT_ID \ --zone=COMPUTE_ZONE \ --ssh-flag="-4 -L8888:localhost:8888 -N -q -f"
Tentukan proxy:
export HTTPS_PROXY=localhost:8888 kubectl get ns
Outputnya adalah daftar namespace di cluster pribadi.
Menghentikan pemrosesan pada klien jarak jauh
Jika ingin membatalkan perubahan pada klien jarak jauh kapan saja, Anda harus mengakhiri proses pemroses pada port TCP 8888. Perintah untuk melakukan tindakan ini berbeda bergantung pada sistem operasi klien.
netstat -lnpt | grep 8888 | awk '{print $7}' | grep -o '[0-9]\+' | sort -u | xargs sudo kill
Pemecahan masalah
Pembatasan firewall di jaringan perusahaan
Jika Anda menggunakan jaringan perusahaan dengan firewall yang ketat, Anda mungkin tidak dapat menyelesaikan tutorial ini tanpa meminta pengecualian. Jika Anda meminta pengecualian, rentang IP sumber untuk bastion host adalah 35.235.240.0/20
secara
default.