Mengakses cluster Google Kubernetes Engine pribadi dengan kumpulan pribadi Cloud Build


Tutorial ini menjelaskan cara mengakses cluster Google Kubernetes Engine (GKE) pribadi menggunakan kumpulan pribadi Cloud Build. Dengan akses ini, Anda dapat menggunakan Cloud Build untuk men-deploy aplikasi di cluster GKE pribadi. Tutorial ini ditujukan untuk administrator jaringan dan berlaku untuk semua situasi ketika kumpulan pribadi Cloud Build perlu berkomunikasi dengan layanan yang berjalan di jaringan Virtual Private Cloud (VPC) yang di-peering. Misalnya, pekerja kumpulan pribadi dapat berkomunikasi dengan layanan berikut:

  • Cluster GKE Pribadi
  • Database Cloud SQL
  • Instance Memorystore
  • Instance Compute Engine yang berjalan di jaringan VPC yang berbeda dengan yang di-peering dengan kumpulan pribadi Cloud Build

Kumpulan pribadi Cloud Build dan bidang kontrol cluster GKE berjalan di jaringan VPC milik Google. Jaringan VPC ini di-peering ke jaringan VPC Anda sendiri di Google Cloud. Namun, Peering Jaringan VPC tidak mendukung peering transitif, yang dapat menjadi pembatasan saat menggunakan kumpulan pribadi Cloud Build. Tutorial ini menyajikan solusi yang menggunakan Cloud VPN agar pekerja di kumpulan pribadi Cloud Build dapat mengakses bidang kontrol cluster GKE pribadi.

Tutorial ini mengasumsikan bahwa Anda telah memahami Google Kubernetes Engine, Cloud Build, perintah gcloud, Peering Jaringan VPC, dan Cloud VPN.

Ringkasan arsitektur

Saat Anda membuat cluster GKE pribadi tanpa akses klien ke endpoint publik, klien hanya dapat mengakses bidang kontrol cluster GKE menggunakan alamat IP pribadinya. Klien seperti kubectl dapat berkomunikasi dengan bidang kontrol hanya jika mereka berjalan pada instance yang memiliki akses ke jaringan VPC dan berada dalam jaringan yang diizinkan.

Jika ingin menggunakan Cloud Build untuk men-deploy aplikasi di cluster GKE pribadi ini, Anda harus menggunakan kumpulan pribadi Cloud Build untuk mengakses cluster GKE. Kumpulan pribadi adalah sekumpulan instance pekerja yang berjalan di project Google Cloud milik Google, dan di-peering ke jaringan VPC Anda menggunakan koneksi Peering Jaringan VPC. Dalam penyiapan ini, instance pekerja diizinkan untuk berkomunikasi dengan alamat IP pribadi bidang kontrol cluster GKE.

Namun, bidang kontrol cluster GKE juga berjalan di project milik Google dan di-peering ke jaringan VPC Anda menggunakan koneksi peering. Peering Jaringan VPC tidak mendukung peering transitif, sehingga paket tidak dapat dirutekan secara langsung antara kumpulan pribadi Cloud Build dan bidang kontrol cluster GKE.

Agar instance pekerja Cloud Build dapat mengakses bidang kontrol cluster GKE, Anda dapat melakukan peering pool pribadi dan bidang kontrol cluster GKE dengan dua jaringan VPC yang Anda miliki, lalu menghubungkan kedua jaringan VPC ini menggunakan Cloud VPN. Peering dan koneksi ini memungkinkan setiap sisi tunnel VPC untuk mengiklankan jaringan bidang kontrol cluster GKE dan kumpulan pribadi sehingga menyelesaikan rute tersebut.

Diagram arsitektur berikut menunjukkan resource yang digunakan dalam tutorial ini:

Tunnel VPN yang melengkapi rute antara kumpulan pribadi Cloud Build dan bidang kontrol cluster GKE.

Sebaiknya buat semua resource yang digunakan dalam tutorial ini di region Google Cloud yang sama untuk latensi rendah. Tunnel VPN dapat melintasi dua region yang berbeda jika komunikasi antar-region ini diperlukan untuk implementasi Anda sendiri. Dua jaringan VPC yang Anda miliki juga dapat menjadi bagian dari project yang berbeda.

Tujuan

  • Membuat cluster GKE pribadi.
  • Menyiapkan kumpulan pribadi Cloud Build.
  • Buat koneksi VPN dengan ketersediaan tinggi (HA) antara dua jaringan VPC.
  • Mengaktifkan pemilihan rute paket di dua Peering Jaringan VPC dan koneksi VPC.

Biaya

Dalam dokumen ini, Anda 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. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  2. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

  3. Enable the Cloud Build, Google Kubernetes Engine, and Service Networking APIs.

    Enable the APIs

  4. Di konsol Google Cloud, aktifkan Cloud Shell.

    Aktifkan Cloud Shell

    Di bagian bawah Google Cloud Console, Cloud Shell sesi akan terbuka dan menampilkan perintah command line. Cloud Shell adalah lingkungan shell dengan Google Cloud CLI yang sudah terinstal, dan dengan nilai yang sudah ditetapkan untuk project Anda saat ini. Diperlukan waktu beberapa detik untuk melakukan inisialisasi sesi.

Membuat dua jaringan VPC di project Anda sendiri

Di bagian ini, Anda akan membuat dua jaringan VPC dan satu subnet untuk node cluster GKE.

  1. Di Cloud Shell, buat jaringan VPC pertama (disebut "Jaringan VPC peering pool pribadi" dalam diagram sebelumnya). Anda tidak perlu membuat subnet di jaringan ini.

    gcloud compute networks create PRIVATE_POOL_PEERING_VPC_NAME \
        --subnet-mode=CUSTOM
    

    Ganti PRIVATE_POOL_PEERING_VPC_NAME dengan nama jaringan VPC Anda yang akan di-peering dengan jaringan kumpulan pribadi Cloud Build.

  2. Buat jaringan VPC kedua (disebut "jaringan VPC peering GKE" dalam diagram sebelumnya):

    gcloud compute networks create GKE_PEERING_VPC_NAME \
        --subnet-mode=CUSTOM
    

    Ganti GKE_PEERING_VPC_NAME dengan nama jaringan VPC Anda untuk melakukan peering dengan bidang kontrol cluster GKE.

  3. Buat subnet untuk node cluster GKE:

    gcloud compute networks subnets create GKE_SUBNET_NAME \
        --network=GKE_PEERING_VPC_NAME \
        --range=GKE_SUBNET_RANGE \
        --region=REGION
    

    Ganti kode berikut:

    • GKE_SUBNET_NAME: nama subnetwork yang dimaksudkan untuk menghosting node cluster GKE.
    • GKE_PEERING_VPC_NAME: nama jaringan VPC Anda untuk di-peering dengan bidang kontrol cluster GKE.
    • GKE_SUBNET_RANGE: rentang alamat IP GKE_SUBNET_NAME. Untuk tutorial ini, Anda dapat menggunakan 10.244.252.0/22.
    • REGION: region Google Cloud yang menghosting cluster GKE. Untuk tutorial ini, Anda dapat menggunakan us-central1.

Sekarang Anda telah menyiapkan dua jaringan VPC di project Anda sendiri, dan jaringan tersebut siap untuk di-peering dengan layanan lain.

Membuat cluster GKE pribadi

Di bagian ini, Anda akan membuat cluster GKE pribadi.

  1. Di Cloud Shell, buat cluster GKE tanpa akses klien ke endpoint publik bidang kontrol.

    gcloud container clusters create PRIVATE_CLUSTER_NAME \
        --region=REGION \
        --enable-master-authorized-networks \
        --network=GKE_PEERING_VPC_NAME \
        --subnetwork=GKE_SUBNET_NAME \
        --enable-private-nodes \
        --enable-private-endpoint \
        --enable-ip-alias \
        --master-ipv4-cidr=CLUSTER_CONTROL_PLANE_CIDR
    

    Ganti kode berikut:

    • PRIVATE_CLUSTER_NAME: nama cluster GKE pribadi.
    • REGION: region untuk cluster GKE. Dalam tutorial ini, gunakan us-central1 untuk region, region yang sama dengan yang Anda gunakan untuk jaringan VPC.
    • GKE_PEERING_VPC_NAME: nama jaringan VPC Anda untuk di-peering dengan bidang kontrol cluster GKE.
    • GKE_SUBNET_RANGE: rentang alamat IP GKE_SUBNET_NAME. Untuk tutorial ini, Anda dapat menggunakan 10.244.252.0/22.
    • CLUSTER_CONTROL_PLANE_CIDR: rentang alamat IP bidang kontrol cluster GKE. Elemen ini harus memiliki awalan /28. Untuk tutorial ini, gunakan 172.16.0.32/28.

    Anda kini telah membuat cluster GKE pribadi yang di-peering dengan jaringan VPC di project Anda sendiri.

  2. Ambil nama Peering Jaringan VPC cluster GKE. Peering Jaringan VPC ini dibuat secara otomatis saat Anda membuat cluster GKE.

    export GKE_PEERING_NAME=$(gcloud container clusters describe PRIVATE_CLUSTER_NAME \
        --region=REGION \
        --format='value(privateClusterConfig.peeringName)')
    

    Ganti kode berikut:

    • PRIVATE_CLUSTER_NAME: nama cluster GKE pribadi.
    • REGION: region untuk cluster GKE. Dalam tutorial ini, gunakan us-central1 untuk region, region yang sama dengan yang Anda gunakan untuk jaringan VPC.
  3. Aktifkan ekspor rute kustom untuk mengiklankan jaringan kumpulan pribadi ke bidang kontrol cluster GKE:

    gcloud compute networks peerings update $GKE_PEERING_NAME \
        --network=GKE_PEERING_VPC_NAME \
        --export-custom-routes \
        --no-export-subnet-routes-with-public-ip
    

    Ganti GKE_PEERING_VPC_NAME dengan nama jaringan VPC Anda untuk melakukan peering dengan bidang kontrol cluster GKE.

    Untuk mengetahui informasi selengkapnya tentang rute kustom, Anda dapat membaca Mengimpor dan mengekspor rute kustom.

Membuat kumpulan pribadi Cloud Build

Di bagian ini, Anda akan membuat kumpulan pribadi Cloud Build.

  1. Di Cloud Shell, alokasikan rentang alamat IP bernama dalam jaringan VPC PRIVATE_POOL_PEERING_VPC_NAME untuk kumpulan pribadi Cloud Build:

    gcloud compute addresses create RESERVED_RANGE_NAME \
        --global \
        --purpose=VPC_PEERING \
        --addresses=PRIVATE_POOL_NETWORK \
        --prefix-length=PRIVATE_POOL_PREFIX \
        --network=PRIVATE_POOL_PEERING_VPC_NAME
    

    Ganti kode berikut:

    • RESERVED_RANGE_NAME: nama rentang alamat IP pribadi yang menghosting kumpulan pribadi Cloud Build.
    • PRIVATE_POOL_NETWORK: alamat IP pertama RESERVED_RANGE_NAME. Untuk tutorial ini, Anda dapat menggunakan 192.168.0.0.
    • PRIVATE_POOL_PREFIX: awalan RESERVED_RANGE_NAME. Setiap kumpulan pribadi yang dibuat akan menggunakan /24 dari rentang ini. Untuk tutorial ini, Anda dapat menggunakan 20; yang memungkinkan Anda membuat hingga enam belas kumpulan.
    • PRIVATE_POOL_PEERING_VPC_NAME: nama jaringan VPC Anda yang akan di-peering dengan jaringan kumpulan pribadi Cloud Build.
    • Rentang IP adalah global karena jika --purpose adalah VPC_PEERING, rentang alamat IP bernama harus global.
  2. Buat koneksi pribadi antara jaringan VPC yang berisi kumpulan pribadi Cloud Build dan PRIVATE_POOL_PEERING_VPC_NAME:

    gcloud services vpc-peerings connect \
        --service=servicenetworking.googleapis.com \
        --ranges=RESERVED_RANGE_NAME \
        --network=PRIVATE_POOL_PEERING_VPC_NAME
    

    Ganti kode berikut:

    • RESERVED_RANGE_NAME: nama rentang alamat IP pribadi yang menghosting kumpulan pribadi Cloud Build.
    • PRIVATE_POOL_PEERING_VPC_NAME: nama jaringan VPC Anda yang akan di-peering dengan jaringan kumpulan pribadi Cloud Build.
  3. Mengaktifkan ekspor rute kustom untuk mengiklankan jaringan bidang kontrol cluster GKE ke kumpulan pribadi:

    gcloud compute networks peerings update servicenetworking-googleapis-com \
        --network=PRIVATE_POOL_PEERING_VPC_NAME \
        --export-custom-routes \
        --no-export-subnet-routes-with-public-ip
    

    Ganti PRIVATE_POOL_PEERING_VPC_NAME dengan nama jaringan VPC Anda yang akan di-peering dengan jaringan kumpulan pribadi Cloud Build.

  4. Buat kumpulan pribadi Cloud Build yang di-peering dengan PRIVATE_POOL_PEERING_VPC_NAME:

    gcloud builds worker-pools create PRIVATE_POOL_NAME \
       --region=REGION \
       --peered-network=projects/$GOOGLE_CLOUD_PROJECT/global/networks/PRIVATE_POOL_PEERING_VPC_NAME
    

    Ganti kode berikut:

    • PRIVATE_POOL_NAME: nama kumpulan pribadi Cloud Build.
    • REGION: region untuk cluster GKE. Dalam tutorial ini, gunakan us-central1 untuk region, region yang sama dengan yang Anda gunakan untuk jaringan VPC.

Anda kini telah membuat kumpulan pribadi Cloud Build dan meng-peeringnya dengan jaringan VPC di project Anda sendiri.

Membuat koneksi Cloud VPN antara dua jaringan VPC Anda

Dalam project Anda sendiri, sekarang Anda memiliki jaringan VPC yang di-peering dengan kumpulan pribadi Cloud Build dan jaringan VPC kedua yang di-peering dengan cluster GKE pribadi.

Di bagian ini, Anda akan membuat koneksi Cloud VPN antara dua jaringan VPC dalam project Anda. Koneksi ini menyelesaikan rute dan memungkinkan kumpulan pribadi Cloud Build mengakses cluster GKE.

  1. Di Cloud Shell, buat dua gateway VPN dengan ketersediaan tinggi (HA) yang saling terhubung. Untuk membuat gateway ini, ikuti petunjuk dalam Membuat dua gateway VPN dengan ketersediaan tinggi (HA) yang dikonfigurasi sepenuhnya dan saling terhubung. Penyiapan selesai setelah Anda membuat sesi BGP. Saat mengikuti petunjuk ini, gunakan nilai berikut:

    • PRIVATE_POOL_PEERING_VPC_NAME untuk NETWORK_1
    • GKE_PEERING_VPC_NAME untuk NETWORK_2
    • REGION untuk REGION_1 dan REGION_2
  2. Konfigurasikan masing-masing dari empat sesi BGP yang Anda buat untuk memberitahukan rute ke jaringan VPC kumpulan pribadi dan jaringan VPC bidang kontrol cluster GKE:

    gcloud compute routers update-bgp-peer ROUTER_NAME_1 \
        --peer-name=PEER_NAME_GW1_IF0 \
        --region=REGION \
        --advertisement-mode=CUSTOM \
        --set-advertisement-ranges=PRIVATE_POOL_NETWORK/PRIVATE_POOL_PREFIX
    
    gcloud compute routers update-bgp-peer ROUTER_NAME_1 \
        --peer-name=PEER_NAME_GW1_IF1 \
        --region=REGION \
        --advertisement-mode=CUSTOM \
        --set-advertisement-ranges=PRIVATE_POOL_NETWORK/PRIVATE_POOL_PREFIX
    
    gcloud compute routers update-bgp-peer ROUTER_NAME_2 \
        --peer-name=PEER_NAME_GW2_IF0 \
        --region=REGION \
        --advertisement-mode=CUSTOM \
        --set-advertisement-ranges=CLUSTER_CONTROL_PLANE_CIDR
    
    gcloud compute routers update-bgp-peer ROUTER_NAME_2 \
        --peer-name=PEER_NAME_GW2_IF1 \
        --region=REGION \
        --advertisement-mode=CUSTOM \
        --set-advertisement-ranges=CLUSTER_CONTROL_PLANE_CIDR
    

    Dengan nilai berikut adalah nama yang sama dengan yang Anda gunakan saat membuat dua gateway VPN dengan ketersediaan tinggi (HA):

    • ROUTER_NAME_1
    • PEER_NAME_GW1_IF0
    • PEER_NAME_GW1_IF1
    • ROUTER_NAME_2
    • PEER_NAME_GW2_IF0
    • PEER_NAME_GW2_IF1

Mengaktifkan akses Cloud Build ke bidang kontrol cluster GKE

Setelah Anda memiliki koneksi VPN di antara dua jaringan VPC di project Anda, aktifkan akses Cloud Build ke bidang kontrol cluster GKE.

  1. Di Cloud Shell, tambahkan rentang jaringan kumpulan pribadi ke jaringan yang diizinkan bidang kontrol di GKE:

    gcloud container clusters update PRIVATE_CLUSTER_NAME \
        --enable-master-authorized-networks \
        --region=REGION \
        --master-authorized-networks=PRIVATE_POOL_NETWORK/PRIVATE_POOL_PREFIX
    

    Ganti kode berikut:

    • PRIVATE_CLUSTER_NAME: nama cluster GKE pribadi.
    • REGION: region untuk cluster GKE. Dalam tutorial ini, gunakan us-central1 untuk region, region yang sama dengan yang Anda gunakan untuk jaringan VPC.
    • PRIVATE_POOL_NETWORK: alamat IP pertama RESERVED_RANGE_NAME. Untuk tutorial ini, Anda dapat menggunakan 192.168.0.0.
    • PRIVATE_POOL_PREFIX: awalan RESERVED_RANGE_NAME. Setiap kumpulan pribadi yang dibuat akan menggunakan /24 dari rentang ini. Untuk tutorial ini, Anda dapat menggunakan 20; yang memungkinkan Anda membuat hingga enam belas kumpulan.
  2. Izinkan akun layanan Cloud Build untuk mengakses bidang kontrol cluster GKE:

    export PROJECT_NUMBER=$(gcloud projects describe $GOOGLE_CLOUD_PROJECT --format 'value(projectNumber)')
    
    gcloud projects add-iam-policy-binding $GOOGLE_CLOUD_PROJECT \
        --member=serviceAccount:$PROJECT_NUMBER@cloudbuild.gserviceaccount.com \
        --role=roles/container.developer
    

Kumpulan pribadi Cloud Build kini dapat mengakses bidang kontrol cluster GKE.

Memverifikasi solusi

Di bagian ini, Anda akan memverifikasi bahwa solusi tersebut berfungsi dengan menjalankan perintah kubectl get nodes dalam langkah build yang berjalan di kumpulan pribadi.

  1. Di Cloud Shell, buat folder sementara dengan file konfigurasi Cloud Build yang menjalankan perintah kubectl get nodes:

    mkdir private-pool-test && cd private-pool-test
    
    cat > cloudbuild.yaml <<EOF
    steps:
    - name: "gcr.io/cloud-builders/kubectl"
      args: ['get', 'nodes']
      env:
      - 'CLOUDSDK_COMPUTE_REGION=REGION'
      - 'CLOUDSDK_CONTAINER_CLUSTER=PRIVATE_CLUSTER_NAME'
    options:
      workerPool:
        'projects/$GOOGLE_CLOUD_PROJECT/locations/REGION/workerPools/PRIVATE_POOL_NAME'
    EOF
    

    Ganti kode berikut:

    • REGION: region untuk cluster GKE. Dalam tutorial ini, gunakan us-central1 untuk region, region yang sama dengan yang Anda gunakan untuk jaringan VPC.
    • PRIVATE_CLUSTER_NAME: nama cluster GKE pribadi.
    • PRIVATE_POOL_NAME: nama kumpulan pribadi Cloud Build.
  2. Mulai tugas build:

    gcloud builds submit --config=cloudbuild.yaml
    
  3. Pastikan outputnya adalah daftar node di cluster GKE. Log build yang ditampilkan di konsol menyertakan tabel yang mirip dengan ini:

    NAME                                     STATUS   ROLES    AGE   VERSION
    gke-private-default-pool-3ec34262-7lq9   Ready    <none>   9d    v1.19.9-gke.1900
    gke-private-default-pool-4c517758-zfqt   Ready    <none>   9d    v1.19.9-gke.1900
    gke-private-default-pool-d1a885ae-4s9c   Ready    <none>   9d    v1.19.9-gke.1900
    

Anda kini telah memverifikasi bahwa pekerja dari kumpulan pribadi dapat mengakses cluster GKE. Dengan akses ini, Anda dapat menggunakan Cloud Build untuk men-deploy aplikasi di cluster GKE pribadi ini.

Pemecahan masalah

Jika Anda mengalami masalah dengan tutorial ini, lihat dokumen berikut:

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. Di konsol Google Cloud, buka halaman Manage resource.

    Buka Manage resource

  2. Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
  3. Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.

Menghapus resource satu per satu

  1. Di Cloud Shell, hapus cluster GKE:

    gcloud container clusters delete PRIVATE_CLUSTER_NAME \
        --region=REGION \
        --async
    

    Saat Anda menjalankan perintah ini, Peering Jaringan VPC akan otomatis dihapus.

  2. Hapus kumpulan pribadi Cloud Build:

    gcloud builds worker-pools delete PRIVATE_POOL_NAME \
        --region=REGION
    
  3. Hapus koneksi pribadi antara jaringan VPC produsen layanan dan PRIVATE_POOL_PEERING_VPC_NAME:

    gcloud services vpc-peerings delete \
       --network=PRIVATE_POOL_PEERING_VPC_NAME \
       --async
    
  4. Hapus rentang alamat IP bernama yang digunakan untuk kumpulan pribadi:

    gcloud compute addresses delete RESERVED_RANGE_NAME \
        --global
    
  5. Hapus keempat tunnel VPN. Gunakan nama yang sama dengan yang Anda tetapkan di Membuat tunnel VPN.

    gcloud compute vpn-tunnels delete \
        TUNNEL_NAME_GW1_IF0 \
        TUNNEL_NAME_GW1_IF1 \
        TUNNEL_NAME_GW2_IF0 \
        TUNNEL_NAME_GW2_IF1 \
        --region=REGION
    
  6. Menghapus dua Cloud Router. Gunakan nama yang sama dengan yang Anda tetapkan di Membuat Cloud Router.

    gcloud compute routers delete \
        ROUTER_NAME_1 \
        ROUTER_NAME_2 \
        --region=REGION
    
  7. Hapus kedua Gateway VPN. Gunakan nama yang sama dengan yang Anda tentukan di Membuat gateway VPN dengan ketersediaan tinggi (HA).

    gcloud compute vpn-gateways delete \
        GW_NAME_1 \
        GW_NAME_2 \
        --region=REGION
    
  8. Hapus GKE_SUBNET_NAME, yang merupakan subnetwork yang menghosting node cluster GKE:

    gcloud compute networks subnets delete GKE_SUBNET_NAME \
        --region=REGION
    
  9. Hapus dua jaringan VPC PRIVATE_POOL_PEERING_VPC_NAME dan GKE_PEERING_VPC_NAME:

    gcloud compute networks delete \
        PRIVATE_POOL_PEERING_VPC_NAME \
        GKE_PEERING_VPC_NAME
    

Langkah selanjutnya