Mengakses cluster pribadi dari jarak jauh menggunakan bastion host


Tutorial ini menunjukkan cara mengakses cluster pribadi di Google Kubernetes Engine (GKE) melalui internet menggunakan host bastion.

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 resmi.

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.

Tujuan

  • Membuat cluster pribadi tanpa akses ke endpoint publik.
  • Deploy virtual machine (VM) Compute Engine untuk bertindak sebagai bastion host di subnet cluster.
  • Menggunakan IAP untuk menghubungkan klien jarak jauh ke cluster melalui internet.

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. Pengguna baru Google Cloud mungkin memenuhi syarat untuk mendapatkan uji coba gratis.

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

  1. 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.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the GKE, Compute Engine, Identity-Aware Proxy APIs.

    Enable the APIs

  5. Install the Google Cloud CLI.
  6. To initialize the gcloud CLI, run the following command:

    gcloud init
  7. Update and install gcloud components:

    gcloud components update
    gcloud components install alpha beta
  8. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  9. Make sure that billing is enabled for your Google Cloud project.

  10. Enable the GKE, Compute Engine, Identity-Aware Proxy APIs.

    Enable the APIs

  11. Install the Google Cloud CLI.
  12. To initialize the gcloud CLI, run the following command:

    gcloud init
  13. Update and install gcloud components:

    gcloud components update
    gcloud components install alpha beta

Membuat cluster pribadi

Membuat 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 \
    --region=COMPUTE_REGION \
    --create-subnetwork=name=SUBNET_NAME \
    --enable-master-authorized-networks \
    --enable-private-nodes \
    --enable-private-endpoint

Ganti kode berikut:

  • CLUSTER_NAME: nama cluster baru.
  • COMPUTE_REGION: region Compute Engine untuk cluster.
  • SUBNET_NAME: nama subnetwork baru tempat Anda ingin menempatkan cluster.

Konsol

Membuat subjaringan Virtual Private Cloud

  1. Buka halaman Jaringan VPC di Konsol Google Cloud.

    Buka jaringan VPC

  2. Klik jaringan default.

  3. Di bagian Subnet, klik Tambahkan subnet.

  4. Pada dialog Tambahkan subnet, tentukan hal berikut:

    1. Nama: Nama untuk subnet baru.
    2. Region: Region untuk subnet. Region ini harus sama dengan region cluster.
    3. Rentang alamat IP: Tentukan 10.2.204.0/22 atau rentang lain yang tidak bertentangan dengan rentang lain di Jaringan VPC.
    4. Untuk Akses Google Pribadi, pilih opsi Aktif.
  5. Klik Tambahkan.

Membuat cluster pribadi

  1. Buka halaman Google Kubernetes Engine di konsol Google Cloud.

    Buka Google Kubernetes Engine

  2. Klik Buat.

  3. Klik Konfigurasi untuk GKE Autopilot.

  4. Tentukan Nama dan Region untuk cluster baru. Region harus sama dengan subnet.

  5. Di bagian Networking, pilih opsi Cluster pribadi.

  6. Hapus centang pada kotak Akses panel kontrol menggunakan alamat IP eksternalnya.

  7. Dari menu drop-down Node subnet, pilih subnet yang Anda buat.

  8. Konfigurasikan setelan lain untuk cluster secara opsional.

  9. 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 di region yang sama dengan cluster.
  • SUBNET_NAME: subnetwork tempat Anda ingin menempatkan VM.

Konsol

  1. Buka halaman Instance VM di Konsol Google Cloud.

    Buka instance VM

  2. Klik Create instance.

  3. Tentukan nilai berikut:

    1. Nama: nama VM Anda.
    2. Region dan Zona: region dan zona VM Anda. Gunakan region yang sama dengan cluster Anda.
    3. Jenis mesin: jenis mesin. Pilih jenis mesin kecil, seperti e2-micro.
    4. Untuk Antarmuka jaringan, pilih jaringan VPC dan subnet yang sama dengan cluster.
    5. Secara opsional, konfigurasikan setelan lain untuk instance.
  4. Klik Buat.

Buat aturan firewall

Untuk mengizinkan IAP terhubung ke VM host bastion, 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.

  1. Mulai sesi ke VM Anda:

    gcloud compute ssh INSTANCE_NAME --tunnel-through-iap --project=PROJECT_ID
    
  2. Instal Tinyproxy:

    sudo apt install tinyproxy
    
  3. Buka file konfigurasi Tinyproxy:

    sudo vi /etc/tinyproxy/tinyproxy.conf
    
  4. Dalam file tersebut, lakukan hal berikut:

    1. Pastikan port-nya adalah 8888.
    2. Telusuri bagian Allow:

        /Allow 127
      
    3. Tambahkan baris berikut ke bagian Allow:

        Allow localhost
      
  5. Simpan file dan mulai ulang Tinyproxy:

    sudo service tinyproxy restart
    
  6. 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:

  1. Dapatkan kredensial untuk cluster:

    gcloud container clusters get-credentials CLUSTER_NAME \
        --region=COMPUTE_REGION \
        --project=PROJECT_ID
    

    Ganti kode berikut:

    • CLUSTER_NAME: nama cluster pribadi.
    • COMPUTE_REGION: region cluster.
    • PROJECT_ID: ID project Google Cloud cluster.
  2. 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"
    
  3. Tentukan proxy:

    export HTTPS_PROXY=localhost:8888
    kubectl get ns
    

    Output-nya 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 host bastion adalah 35.235.240.0/20 secara default.

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 project

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

Menghapus resource satu per satu

  1. Hapus bastion host yang Anda deploy dalam tutorial ini:

    gcloud compute instances delete INSTANCE_NAME \
        --zone=COMPUTE_ZONE
    
  2. Hapus kluster:

    gcloud container clusters delete CLUSTER_NAME \
        --region=COMPUTE_REGION
    
  3. Hapus subnet:

    gcloud compute networks subnets delete SUBNET_NAME \
        --region=COMPUTE_REGION