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. Akses ini memungkinkan Anda menggunakan Cloud Build untuk men-deploy aplikasi di cluster GKE pribadi. Tutorial ini ditujukan untuk administrator jaringan dan berlaku untuk semua situasi saat kumpulan pribadi Cloud Build perlu berkomunikasi dengan layanan yang berjalan di jaringan Virtual Private Cloud (VPC) yang tersambung. 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 jaringan yang dihubungkan dengan kumpulan pribadi Cloud Build

Cloud Build private pool 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 batasan saat menggunakan kumpulan pribadi Cloud Build. Tutorial ini menyajikan solusi yang menggunakan Cloud VPN untuk mengizinkan pekerja di kumpulan pribadi Cloud Build mengakses platform kontrol cluster GKE pribadi.

Tutorial ini mengasumsikan bahwa Anda sudah 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 panel kontrol cluster GKE menggunakan alamat IP pribadi-nya. Klien seperti kubectl hanya dapat berkomunikasi dengan bidang kontrol jika berjalan di instance yang memiliki akses ke jaringan VPC dan berada di 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 terhubung ke jaringan VPC Anda menggunakan Private Service Connect (PSC). Peering Jaringan VPC tidak mendukung peering transitif, sehingga paket tidak dapat dirutekan 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 kumpulan pribadi dan menggunakan PSC untuk menghubungkan 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 mengiklankan jaringan bidang kontrol cluster GKE dan kumpulan pribadi, sehingga menyelesaikan rute.

Diagram arsitektur berikut menunjukkan resource yang digunakan dalam tutorial ini:

Tunnel VPN yang menyelesaikan 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 penerapan 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 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. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

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

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

    Enable the APIs

  4. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

Membuat dua jaringan VPC di project Anda sendiri

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

  1. Di Cloud Shell, buat jaringan VPC pertama (disebut "Jaringan VPC peering kumpulan 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 dihubungkan dengan jaringan kumpulan pribadi Cloud Build.

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

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

    Ganti GKE_CLUSTER_VPC_NAME dengan nama jaringan VPC Anda untuk melakukan peering dengan control plane cluster GKE.

  3. Buat subnet untuk node cluster GKE:

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

    Ganti kode berikut:

    • GKE_SUBNET_NAME: nama subnetwork yang dimaksudkan untuk menghosting node cluster GKE.
    • GKE_CLUSTER_VPC_NAME: nama jaringan VPC Anda untuk terhubung 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 melakukan 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 panel kontrol.

    gcloud container clusters create PRIVATE_CLUSTER_NAME \
        --region=REGION \
        --enable-master-authorized-networks \
        --network=GKE_CLUSTER_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_CLUSTER_VPC_NAME: nama jaringan VPC Anda untuk terhubung ke 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.

    Sekarang Anda telah membuat cluster GKE pribadi.

Mengonfigurasi Peering Jaringan VPC untuk GKE 1.28 dan yang lebih lama

Jika Anda menggunakan tutorial ini untuk mengonfigurasi cluster yang ada yang menjalankan GKE versi 1.28 atau yang lebih lama, jaringan VPC pribadi Anda akan menggunakan Peering Jaringan VPC untuk terhubung ke cluster GKE. Selesaikan langkah-langkah berikut:

  1. Ambil nama Peering Jaringan VPC cluster GKE. Penautan 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.
  2. Aktifkan ekspor rute kustom untuk mengiklankan jaringan kumpulan pribadi ke bidang kontrol cluster GKE:

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

    Ganti GKE_CLUSTER_VPC_NAME dengan nama jaringan VPC Anda untuk terhubung dengan control plane cluster GKE.

    Untuk mengetahui informasi selengkapnya tentang rute kustom, Anda dapat membaca artikel 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 di 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; hal ini 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 yang dinamai 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. Aktifkan 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 dihubungkan dengan jaringan kumpulan pribadi Cloud Build.

  4. Buat kumpulan pribadi Cloud Build yang dihubungkan 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.

Sekarang Anda telah membuat kumpulan pribadi Cloud Build dan melakukan peering dengan jaringan VPC di project Anda sendiri.

Membuat koneksi Cloud VPN antara dua jaringan VPC Anda

Di 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 untuk mengakses cluster GKE.

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

    • PRIVATE_POOL_PEERING_VPC_NAME untuk NETWORK_1
    • GKE_CLUSTER_VPC_NAME untuk NETWORK_2
    • REGION untuk REGION_1 dan REGION_2
  2. Konfigurasikan setiap dari empat sesi BGP yang Anda buat untuk mengiklankan 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 antara dua jaringan VPC di project, aktifkan akses Cloud Build ke platform 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; hal ini memungkinkan Anda membuat hingga enam belas kumpulan.
  2. Izinkan akun layanan yang Anda gunakan untuk build 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:SERVICE_ACCOUNT \
        --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 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 output-nya 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
    

Sekarang Anda telah memverifikasi bahwa pekerja dari kumpulan pribadi dapat mengakses cluster GKE. Akses ini memungkinkan Anda 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. 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. 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 dihapus secara otomatis.

  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 yang telah diberi nama yang digunakan untuk kumpulan pribadi:

    gcloud compute addresses delete RESERVED_RANGE_NAME \
        --global
    
  5. Hapus empat tunnel VPN. Gunakan nama yang sama dengan yang Anda tentukan di Buat 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. Hapus dua Cloud Router. Gunakan nama yang sama dengan yang Anda tentukan di Membuat Cloud Router.

    gcloud compute routers delete \
        ROUTER_NAME_1 \
        ROUTER_NAME_2 \
        --region=REGION
    
  7. Hapus dua 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_CLUSTER_VPC_NAME:

    gcloud compute networks delete \
        PRIVATE_POOL_PEERING_VPC_NAME \
        GKE_CLUSTER_VPC_NAME
    

Langkah selanjutnya