Menyiapkan cluster dengan VPC Bersama


Panduan ini menunjukkan cara membuat dua cluster Google Kubernetes Engine (GKE), dalam project terpisah, yang menggunakan VPC Bersama. Untuk informasi umum tentang jejaring GKE, kunjungi Ringkasan jaringan.

Ringkasan

Dengan VPC Bersama, Anda menetapkan satu project sebagai project host, dan Anda dapat menambahkan project lain, yang disebut project layanan, ke project host. Anda dapat membuat jaringan, subnet, rentang alamat IP sekunder, aturan firewall, dan resource jaringan lainnya di dalam project host. Kemudian, Anda membagikan subnet yang dipilih, termasuk rentang sekunder, dengan project layanan. Komponen yang berjalan dalam project layanan dapat menggunakan VPC Bersama untuk berkomunikasi dengan komponen yang berjalan di project layanan lainnya.

Anda dapat menggunakan VPC Bersama dengan cluster Autopilot dan dengan cluster zona dan regional Standar.

Cluster Standard yang menggunakan VPC Bersama tidak dapat menggunakan jaringan lama dan harus mengaktifkan pemilihan rute traffic berbasis VPC. Cluster Autopilot selalu mengaktifkan pemilihan rute traffic berbasis VPC.

Anda dapat mengonfigurasi VPC Bersama saat membuat cluster baru. GKE tidak mendukung konversi cluster yang ada ke model VPC Bersama.

Dengan VPC Bersama, kuota dan batas tertentu berlaku. Misalnya, terdapat kuota jumlah jaringan dalam sebuah project, dan ada batas jumlah project layanan yang dapat ditambahkan ke project host. Untuk detailnya, lihat Kuota dan batas.

Tentang contoh

Contoh dalam panduan ini menyiapkan infrastruktur untuk aplikasi web dua tingkat, seperti yang dijelaskan dalam Ringkasan VPC Bersama.

Sebelum memulai

Sebelum Anda mulai menyiapkan cluster dengan VPC Bersama:

  • Pastikan Anda memiliki organisasi Google Cloud.
  • Pastikan organisasi Anda memiliki tiga project Google Cloud.
  • Pahami konsep VPC Bersama, termasuk berbagai peran Identity and Access Management (IAM) yang digunakan oleh VPC Bersama. Tugas-tugas dalam panduan ini harus dilakukan oleh Admin VPC Bersama.
  • Pastikan Anda memahami batasan kebijakan organisasi apa pun yang berlaku untuk organisasi, folder, atau project Anda. Administrator Kebijakan Organisasi mungkin telah menentukan batasan yang membatasi project yang dapat menjadi project host VPC Bersama, atau membatasi subnet mana yang dapat dibagikan. Lihat batasan kebijakan organisasi untuk informasi selengkapnya.

Sebelum Anda melakukan latihan dalam panduan ini:

  • Pilih salah satu project Anda untuk menjadi project host.
  • Pilih dua project Anda untuk menjadi project layanan.

Setiap project memiliki nama, ID, dan nomor. Dalam beberapa kasus, nama dan ID-nya sama. Panduan ini menggunakan nama dan placeholder yang simpel untuk merujuk ke project Anda:

Nama yang simpel Placeholder
project ID
Placeholder
nomor project
Project host Anda HOST_PROJECT_ID HOST_PROJECT_NUM
Project layanan pertama Anda SERVICE_PROJECT_1_ID SERVICE_PROJECT_1_NUM
Project layanan kedua Anda SERVICE_PROJECT_2_ID SERVICE_PROJECT_2_NUM

Menemukan project ID dan nomor project Anda

Anda dapat menemukan project ID dan nomor project dengan menggunakan gcloud CLI atau Konsol Google Cloud.

Konsol

  1. Buka halaman Home di Konsol Google Cloud.

    Buka halaman Home

  2. Di pemilih project, pilih project yang telah Anda pilih untuk menjadi project host.

  3. Di bagian Project info, Anda dapat melihat nama project, project ID, dan nomor project. Catat ID dan nomornya untuk nanti.

  4. Lakukan hal yang sama untuk setiap project yang telah Anda pilih sebagai project layanan.

gcloud

Tampilkan daftar project Anda menggunakan perintah berikut:

gcloud projects list

Output akan menampilkan nama, ID, dan nomor project Anda. Catat ID dan nomornya untuk nanti:

PROJECT_ID        NAME        PROJECT_NUMBER
host-123          host        1027xxxxxxxx
srv-1-456         srv-1       4964xxxxxxxx
srv-2-789         srv-2       4559xxxxxxxx

Mengaktifkan GKE API dalam project Anda

Sebelum melanjutkan latihan dalam panduan ini, pastikan GKE API telah diaktifkan di ketiga project Anda. Jika API diaktifkan dalam project, akun layanan GKE untuk project tersebut akan dibuat. Agar dapat melakukan tugas selanjutnya dalam panduan ini, setiap project Anda harus memiliki akun layanan GKE.

Anda dapat mengaktifkan GKE API menggunakan Konsol Google Cloud atau Google Cloud CLI.

Konsol

  1. Buka halaman APIs & Services di Konsol Google Cloud.

    Buka API & Layanan

  2. Di pemilih project, pilih project yang telah Anda pilih untuk menjadi project host.

  3. Jika Kubernetes Engine API ada dalam daftar API, berarti API tersebut sudah diaktifkan dan Anda tidak perlu melakukan apa pun. Jika tidak ada dalam daftar, klik Enable APIs and Services. Telusuri Kubernetes Engine API. Klik kartu Kubernetes Engine API, lalu klik Enable.

  4. Ulangi langkah-langkah ini untuk setiap project yang telah dipilih sebagai project layanan. Setiap operasi mungkin memerlukan waktu beberapa saat untuk diselesaikan.

gcloud

Aktifkan GKE API untuk ketiga project Anda. Setiap operasi mungkin memerlukan waktu beberapa saat untuk diselesaikan:

gcloud services enable container.googleapis.com --project HOST_PROJECT_ID
gcloud services enable container.googleapis.com --project SERVICE_PROJECT_1_ID
gcloud services enable container.googleapis.com --project SERVICE_PROJECT_2_ID

Membuat jaringan dan dua subnet

Di bagian ini, Anda akan melakukan tugas berikut:

  1. Di project host Anda, buat jaringan bernama shared-net.
  2. Buat dua subnet bernama tier-1 dan tier-2.
  3. Untuk setiap subnet, buat dua rentang alamat IP sekunder: satu untuk Layanan, dan satu untuk Pod.

Konsol

  1. Buka halaman VPC networks di Konsol Google Cloud.

    Buka VPC networks

  2. Di pemilih project, pilih project host Anda.

  3. Klik Create VPC Network.

  4. Untuk Name, masukkan shared-net.

  5. Di bagian Subnet creation mode, pilih Custom.

  6. Di kotak New subnet, untuk Name, masukkan tier-1.

  7. Untuk Region, pilih region.

  8. Di bagian Jenis stack IP, pilih IPv4 (single-stack).

  9. Untuk IPv4 range, masukkan 10.0.4.0/22.

  10. Klik Create secondary IPv4 range. Untuk Subnet range name, masukkan tier-1-services, dan untuk Secondary IPv4 range, masukkan 10.0.32.0/20.

  11. Klik Add IP range. Untuk Subnet range name, masukkan tier-1-pods, dan untuk Secondary IPv4 range, masukkan 10.4.0.0/14.

  12. Klik Tambahkan subnet.

  13. Untuk Name, masukkan tier-2.

  14. Untuk Region, pilih region yang sama dengan yang Anda pilih untuk subnet sebelumnya.

  15. Untuk IPv4 range, masukkan 172.16.4.0/22.

  16. Klik Create secondary IPv4 range. Untuk Subnet range name, masukkan tier-2-services, dan untuk Secondary IPv4 range, masukkan 172.16.16.0/20.

  17. Klik Add IP range. Untuk Subnet range name, masukkan tier-2-pods, dan untuk Secondary IPv4 range, masukkan 172.20.0.0/14.

  18. Klik Create.

gcloud

Di project host Anda, buat jaringan bernama shared-net:

gcloud compute networks create shared-net \
    --subnet-mode custom \
    --project HOST_PROJECT_ID

Di jaringan baru Anda, buat subnet bernama tier-1:

gcloud compute networks subnets create tier-1 \
    --project HOST_PROJECT_ID \
    --network shared-net \
    --range 10.0.4.0/22 \
    --region COMPUTE_REGION \
    --secondary-range tier-1-services=10.0.32.0/20,tier-1-pods=10.4.0.0/14

Buat subnet lain bernama tier-2:

gcloud compute networks subnets create tier-2 \
    --project HOST_PROJECT_ID \
    --network shared-net \
    --range 172.16.4.0/22 \
    --region COMPUTE_REGION \
    --secondary-range tier-2-services=172.16.16.0/20,tier-2-pods=172.20.0.0/14

Ganti COMPUTE_REGION dengan region Compute Engine.

Menentukan nama akun layanan di project layanan Anda

Anda memiliki dua project layanan, yang masing-masing memiliki beberapa akun layanan. Bagian ini berkaitan dengan akun layanan GKE dan akun layanan API Google Anda. Anda memerlukan nama akun layanan ini untuk bagian berikutnya.

Tabel berikut mencantumkan akun layanan API Google dan GKE dalam dua project layanan Anda:

Jenis akun layanan Nama akun layanan
GKE service-SERVICE_PROJECT_1_NUM@container-engine-robot.iam.gserviceaccount.com
service-SERVICE_PROJECT_2_NUM@container-engine-robot.iam.gserviceaccount.com
API Google SERVICE_PROJECT_1_NUM@cloudservices.gserviceaccount.com
SERVICE_PROJECT_2_NUM@cloudservices.gserviceaccount.com

Mengaktifkan VPC Bersama dan memberikan peran

Untuk melakukan tugas di bagian ini, pastikan organisasi Anda telah menentukan peran Shared VPC Admin.

Di bagian ini, Anda akan melakukan tugas berikut:

  1. Di project host, aktifkan VPC Bersama.
  2. Lampirkan dua project layanan Anda ke project host.
  3. Berikan peran IAM yang sesuai ke akun layanan yang termasuk dalam project layanan Anda:
    • Di project layanan pertama Anda, berikan peran Compute Network User ke dua akun layanan pada subnet tier-1 project host Anda.
    • Di project layanan kedua Anda, berikan peran Compute Network User ke dua akun layanan pada subnet tier-2 project host Anda.

Konsol

Lakukan langkah-langkah berikut untuk mengaktifkan VPC Bersama, melampirkan project layanan, dan memberi peran:

  1. Buka halaman Shared VPC di Konsol Google Cloud.

    Buka VPC Bersama

  2. Di pemilih project, pilih project host Anda.

  3. Klik Set up Shared VPC. Layar Enable host project akan ditampilkan.

  4. Klik Save & continue. Halaman Select subnets akan ditampilkan.

  5. Di bagian Sharing mode, pilih Individual subnets.

  6. Di bagian Subnets to share, centang tier-1 dan tier-2. Hapus semua centang di kotak lainnya.

  7. Klik Lanjutkan. Halaman Give permissions akan ditampilkan.

  8. Di bagian Attach service projects, periksa project layanan pertama dan project layanan kedua Anda. Hapus semua centang di kotak lainnya di bagian Attach service projects.

  9. Di bagian Kubernetes Engine access, centang Enabled.

  10. Klik Save. Halaman baru akan ditampilkan.

  11. Di bagian Individual subnet permissions, centang tier-1.

  12. Di panel kanan, hapus semua akun layanan yang termasuk dalam project layanan kedua Anda. Artinya, hapus semua akun layanan yang berisi SERVICE_PROJECT_2_NUM.

  13. Di panel kanan, cari nama akun layanan API Google dan Kubernetes Engine yang termasuk dalam project layanan pertama Anda. Anda ingin melihat kedua nama akun layanan tersebut dalam daftar. Jika salah satu di antaranya tidak ada dalam daftar, masukkan nama akun layanan di bagian Add members, lalu klik Add.

  14. Di panel tengah, pada bagian Individual subnet permissions, centang tier-2, dan hapus tier-1.

  15. Di panel kanan, hapus akun layanan apa pun yang termasuk dalam project layanan pertama Anda. Artinya, hapus semua akun layanan yang berisi SERVICE_PROJECT_1_NUM.

  16. Di panel kanan, cari nama akun layanan API Google dan Kubernetes Engine yang termasuk dalam project layanan kedua Anda. Anda ingin melihat kedua nama akun layanan tersebut dalam daftar. Jika salah satu di antaranya tidak ada dalam daftar, masukkan nama akun layanan di bagian Add members, lalu klik Add.

gcloud

  1. Aktifkan VPC Bersama di project host Anda. Perintah yang Anda gunakan bergantung pada peran administratif yang diperlukan yang Anda miliki.

    Jika Anda memiliki peran Shared VPC Admin di tingkat organisasi:

    gcloud compute shared-vpc enable HOST_PROJECT_ID
    

    Jika Anda memiliki peran Shared VPC Admin di tingkat folder:

    gcloud beta compute shared-vpc enable HOST_PROJECT_ID
    
  2. Lampirkan project layanan pertama Anda ke project host:

    gcloud compute shared-vpc associated-projects add SERVICE_PROJECT_1_ID \
        --host-project HOST_PROJECT_ID
    
  3. Lampirkan project layanan kedua Anda ke project host:

    gcloud compute shared-vpc associated-projects add SERVICE_PROJECT_2_ID \
        --host-project HOST_PROJECT_ID
    
  4. Dapatkan kebijakan IAM untuk subnet tier-1:

    gcloud compute networks subnets get-iam-policy tier-1 \
       --project HOST_PROJECT_ID \
       --region COMPUTE_REGION
    

    Output berisi kolom etag. Catat nilai etag.

  5. Buat file bernama tier-1-policy.yaml yang memiliki konten berikut:

    bindings:
    - members:
      - serviceAccount:SERVICE_PROJECT_1_NUM@cloudservices.gserviceaccount.com
      - serviceAccount:service-SERVICE_PROJECT_1_NUM@container-engine-robot.iam.gserviceaccount.com
      role: roles/compute.networkUser
    etag: ETAG_STRING
    

    Ganti ETAG_STRING dengan nilai etag yang Anda catat sebelumnya.

  6. Tetapkan kebijakan IAM untuk subnet tier-1:

    gcloud compute networks subnets set-iam-policy tier-1 \
        tier-1-policy.yaml \
        --project HOST_PROJECT_ID \
        --region COMPUTE_REGION
    
  7. Dapatkan kebijakan IAM untuk subnet tier-2:

    gcloud compute networks subnets get-iam-policy tier-2 \
        --project HOST_PROJECT_ID \
        --region COMPUTE_REGION
    

    Output berisi kolom etag. Catat nilai etag.

  8. Buat file bernama tier-2-policy.yaml yang memiliki konten berikut:

    bindings:
    - members:
      - serviceAccount:SERVICE_PROJECT_2_NUM@cloudservices.gserviceaccount.com
      - serviceAccount:service-SERVICE_PROJECT_2_NUM@container-engine-robot.iam.gserviceaccount.com
      role: roles/compute.networkUser
    etag: ETAG_STRING
    

    Ganti ETAG_STRING dengan nilai etag yang Anda catat sebelumnya.

  9. Tetapkan kebijakan IAM untuk subnet tier-2:

    gcloud compute networks subnets set-iam-policy tier-2 \
        tier-2-policy.yaml \
        --project HOST_PROJECT_ID \
        --region COMPUTE_REGION
    

Mengelola resource firewall

Jika Anda ingin cluster GKE dalam project layanan membuat dan mengelola resource firewall di project host Anda, akun layanan GKE project layanan harus diberi izin IAM yang sesuai menggunakan salah satu strategi berikut:

Konsol

  1. Di Konsol Google Cloud, buka halaman IAM.

    Buka IAM

  2. Pilih project host.

  3. Klik Grant access, lalu masukkan akun utama akun layanan GKE project layanan, service-SERVICE_PROJECT_NUM@container-engine-robot.iam.gserviceaccount.com.

  4. Pilih peran Compute Security Admin dari menu drop-down.

  5. Klik Save.

gcloud

Berikan peran Compute Security Admin ke akun layanan GKE project layanan dalam project host:

gcloud projects add-iam-policy-binding HOST_PROJECT_ID \
    --member=serviceAccount:service-SERVICE_PROJECT_NUM@container-engine-robot.iam.gserviceaccount.com \
    --role=roles/compute.securityAdmin

Ganti kode berikut:

  • HOST_PROJECT_ID: project ID host VPC bersama
  • SERVICE_PROJECT_NUM: ID pada project layanan yang berisi akun layanan GKE
  • Untuk pendekatan yang lebih mendetail, buat peran IAM kustom yang hanya mencakup izin berikut: compute.networks.updatePolicy, compute.firewalls.list, compute.firewalls.get, compute.firewalls.create, compute.firewalls.update, dan compute.firewalls.delete. Beri akun layanan GKE project layanan peran khusus ke project host.

Konsol

Buat peran khusus dalam project host yang berisi izin IAM yang disebutkan sebelumnya:

  1. Di Konsol Google Cloud, buka halaman Roles.

    Buka halaman Roles

  2. Menggunakan menu drop-down di bagian atas halaman, pilih project host.

  3. Klik Create Role.

  4. Masukkan Title, Description, ID, dan Role launch stage untuk peran tersebut. Nama peran tidak dapat diubah setelah peran dibuat.

  5. Klik Add Permissions.

  6. Filter compute.networks, lalu pilih izin IAM yang disebutkan sebelumnya.

  7. Setelah semua izin yang diperlukan dipilih, klik Add.

  8. Klik Create.

Beri akun layanan GKE project layanan peran khusus yang baru dibuat dalam project host:

  1. Di Konsol Google Cloud, buka halaman IAM.

    Buka IAM

  2. Pilih project host.

  3. Klik Grant access, lalu masuk ke akun utama akun layanan GKE project layanan, service-SERVICE_PROJECT_NUM@container-engine-robot.iam.gserviceaccount.com.

  4. Filter Title dari peran khusus yang baru dibuat, lalu pilih peran tersebut.

  5. Klik Save.

gcloud

  1. Buat peran khusus dalam project host yang berisi izin IAM yang disebutkan sebelumnya:

    gcloud iam roles create ROLE_ID \
        --title="ROLE_TITLE" \
        --description="ROLE_DESCRIPTION" \
        --stage=LAUNCH_STAGE \
        --permissions=compute.networks.updatePolicy,compute.firewalls.list,compute.firewalls.get,compute.firewalls.create,compute.firewalls.update,compute.firewalls.delete \
        --project=HOST_PROJECT_ID
    
  2. Beri akun layanan GKE project layanan peran khusus yang baru dibuat dalam project host:

    gcloud projects add-iam-policy-binding HOST_PROJECT_ID \
        --member=serviceAccount:service-SERVICE_PROJECT_NUM@container-engine-robot.iam.gserviceaccount.com \
        --role=projects/HOST_PROJECT_ID/roles/ROLE_ID
    

    Ganti kode berikut:

    • ROLE_ID: nama peran, misalnya gkeFirewallAdmin
    • ROLE_TITLE: judul yang cocok untuk peran tersebut, misalnya GKE Firewall Admin
    • ROLE_DESCRIPTION: deskripsi singkat peran, misalnya GKE service account FW permissions
    • LAUNCH_STAGE: tahap peluncuran peran dalam siklus prosesnya, misalnya ALPHA, BETA, atau GA
    • HOST_PROJECT_ID: project ID host VPC bersama
    • SERVICE_PROJECT_NUM: ID pada project layanan yang berisi akun layanan GKE

Jika memiliki cluster di lebih dari satu project layanan, Anda harus memilih salah satu strategi dan mengulanginya untuk setiap akun layanan GKE project layanan.

Ringkasan peran yang diberikan ke subnet

Berikut adalah ringkasan peran yang diberikan ke subnet:

Akun layanan Peran Subnet
service-SERVICE_PROJECT_1_NUM@container-engine-robot.iam.gserviceaccount.com Compute Network User tier-1
SERVICE_PROJECT_1_NUM@cloudservices.gserviceaccount.com Compute Network User tier-1
service-SERVICE_PROJECT_2_NUM@container-engine-robot.iam.gserviceaccount.com Compute Network User tier-2
SERVICE_PROJECT_2_NUM@cloudservices.gserviceaccount.com Compute Network User tier-2

Akses Kubernetes Engine

Saat melampirkan project layanan, mengaktifkan akses Kubernetes Engine akan memberikan izin ke akun layanan GKE project layanan tersebut untuk menjalankan operasi pengelolaan jaringan di project host.

Jika project layanan terpasang tanpa mengaktifkan akses Kubernetes Engine, dengan asumsi bahwa Kubernetes Engine API telah diaktifkan di host dan project layanan, Anda dapat menetapkan izin secara manual ke layanan GKE project layanan akun ini dengan menambahkan binding peran IAM berikut di project host:

Anggota Peran Resource
service-SERVICE_PROJECT_NUM@container-engine-robot.iam.gserviceaccount.com Compute Network User Subnet tertentu atau seluruh project host
service-SERVICE_PROJECT_NUM@container-engine-robot.iam.gserviceaccount.com Host Service Agent User Akun layanan GKE di project host

Memberikan peran Host Service Agent User

Setiap akun layanan GKE project layanan harus memiliki binding untuk peran Host Service Agent User di project host. Akun layanan GKE mengambil bentuk berikut:

service-SERVICE_PROJECT_NUM@container-engine-robot.iam.gserviceaccount.com

Dengan SERVICE_PROJECT_NUM adalah nomor project pada project layanan Anda.

Dengan binding ini, akun layanan GKE project layanan dapat menjalankan operasi pengelolaan jaringan di project host, seolah-olah akun tersebut adalah akun layanan GKE project host. Peran ini hanya dapat diberikan ke akun layanan GKE project layanan.

Konsol

Jika telah menggunakan Konsol Google Cloud, Anda tidak perlu memberikan peran Host Service Agent User secara eksplisit. Hal tersebut otomatis dilakukan saat Anda menggunakan Konsol Google Cloud untuk melampirkan project layanan ke project host.

gcloud

  1. Untuk project pertama Anda, berikan peran Host Service Agent User ke Akun Layanan GKE project. Peran ini diberikan pada project host Anda:

    gcloud projects add-iam-policy-binding HOST_PROJECT_ID \
        --member serviceAccount:service-SERVICE_PROJECT_1_NUM@container-engine-robot.iam.gserviceaccount.com \
        --role roles/container.hostServiceAgentUser
    
  2. Untuk project kedua Anda, berikan peran Host Service Agent User ke Akun Layanan GKE project. Peran ini diberikan pada project host Anda:

    gcloud projects add-iam-policy-binding HOST_PROJECT_ID \
        --member serviceAccount:service-SERVICE_PROJECT_2_NUM@container-engine-robot.iam.gserviceaccount.com \
        --role roles/container.hostServiceAgentUser
    

Memverifikasi subnet yang dapat digunakan dan rentang alamat IP sekunder

Saat membuat cluster, Anda harus menentukan subnet dan rentang alamat IP sekunder yang akan digunakan untuk Pod dan Layanan cluster. Ada beberapa alasan mengapa rentang alamat IP mungkin tidak tersedia untuk digunakan. Baik membuat cluster dengan Google Cloud Console maupun gcloud CLI, Anda harus menentukan rentang alamat IP yang dapat digunakan.

Rentang alamat IP dapat digunakan untuk Layanan cluster baru jika rentang tersebut belum digunakan. Rentang alamat IP yang Anda tentukan untuk Pod cluster baru dapat berupa rentang yang tidak digunakan, atau dapat berupa rentang yang digunakan bersama dengan Pod di cluster Anda yang lain. Rentang alamat IP yang dibuat dan dikelola oleh GKE tidak dapat digunakan oleh cluster Anda.

Anda dapat membuat daftar subnet yang dapat digunakan dan rentang alamat IP sekunder project menggunakan gcloud CLI.

gcloud

gcloud container subnets list-usable \
    --project SERVICE_PROJECT_ID \
    --network-project HOST_PROJECT_ID

Ganti SERVICE_PROJECT_ID dengan project ID untuk project layanan.

Jika Anda menghapus opsi --project atau --network-project, perintah gcloud CLI akan menggunakan project default dari konfigurasi aktif Anda. Karena project host dan project jaringan berbeda, Anda harus menentukan salah satu atau kedua --project dan --network-project.

Outputnya mirip dengan hal berikut ini:

PROJECT: xpn-host
REGION: REGION_NAME
NETWORK: shared-net
SUBNET: tier-2
RANGE: 172.16.4.0/22

SECONDARY_RANGE_NAME: tier-2-services
IP_CIDR_RANGE: 172.20.0.0/14
STATUS: usable for pods or services

SECONDARY_RANGE_NAME: tier-2-pods
IP_CIDR_RANGE: 172.16.16.0/20
STATUS: usable for pods or services

PROJECT: xpn-host
REGION: REGION_NAME
NETWORK: shared-net
SUBNET: tier-1
RANGE: 10.0.4.0/22

SECONDARY_RANGE_NAME: tier-1-services
IP_CIDR_RANGE: 10.0.32.0/20
STATUS: usable for pods or services

SECONDARY_RANGE_NAME: tier-1-pods
IP_CIDR_RANGE: 10.4.0.0/14
STATUS: usable for pods or services

Perintah list-usable akan menampilkan daftar kosong dalam situasi berikut:

  • Jika akun layanan Kubernetes Engine project layanan tidak memiliki peran Host Service Agent User ke project host.
  • Jika akun layanan Kubernetes Engine dalam project host tidak ada (misalnya, jika Anda tidak sengaja menghapus akun tersebut).
  • Jika Kubernetes Engine API tidak diaktifkan di project host, yang berarti akun layanan Kubernetes Engine dalam project host tidak ada.

Untuk informasi selengkapnya, lihat bagian pemecahan masalah.

Catatan tentang rentang sekunder

Anda dapat membuat 30 rentang sekunder dalam subnet tertentu. Untuk setiap cluster, Anda memerlukan dua rentang sekunder: satu untuk Pod dan satu untuk Layanan.

Membuat cluster di project layanan pertama Anda

Untuk membuat cluster di project layanan pertama Anda, lakukan langkah-langkah berikut menggunakan gcloud CLI atau Konsol Google Cloud.

Konsol

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

    Buka Google Kubernetes Engine

  2. Di pemilih project, pilih project layanan pertama Anda.

  3. Klik Buat.

  4. Di bagian Autopilot atau Standard, klik Configure.

  5. Untuk Name, masukkan tier-1-cluster.

  6. Di menu drop-down Region, pilih region yang sama dengan yang Anda gunakan untuk subnet.

  7. Dari panel navigasi, klik Networking.

  8. Pilih Networks shared with me (from host project).

  9. Untuk Network, pilih shared-net.

  10. Untuk Node subnet, pilih tier-1.

  11. Untuk Pod secondary CIDR range, pilih tier-1-pods.

  12. Untuk Service secondary CIDR range, pilih tier-1-services.

  13. Klik Create.

  14. Setelah pembuatan selesai, dalam daftar cluster, klik tier-1-cluster.

  15. Di halaman Cluster details, klik tab Nodes

  16. Di bagian Node Pools, klik nama node pool yang ingin Anda periksa.

  17. Di bagian Instance groups, klik nama grup instance yang ingin Anda periksa. Misalnya, gke-tier-1-cluster-default-pool-5c5add1f-grp.

  18. Dalam daftar instance, pastikan alamat IP internal node Anda berada di rentang utama subnet tier-1: 10.0.4.0/22.

gcloud

Buat cluster bernama tier-1-cluster di project layanan pertama Anda:

gcloud container clusters create-auto tier-1-cluster \
    --project=SERVICE_PROJECT_1_ID \
    --location=COMPUTE_REGION \
    --network=projects/HOST_PROJECT_ID/global/networks/shared-net \
    --subnetwork=projects/HOST_PROJECT_ID/regions/COMPUTE_REGION/subnetworks/tier-1 \
    --cluster-secondary-range-name=tier-1-pods \
    --services-secondary-range-name=tier-1-services

Setelah pembuatan selesai, pastikan node cluster Anda berada di rentang utama subnet tier-1: 10.0.4.0/22.

gcloud compute instances list --project SERVICE_PROJECT_1_ID

Output menunjukkan alamat IP internal node:

NAME                    ZONE           ... INTERNAL_IP
gke-tier-1-cluster-...  ZONE_NAME      ... 10.0.4.2
gke-tier-1-cluster-...  ZONE_NAME      ... 10.0.4.3
gke-tier-1-cluster-...  ZONE_NAME      ... 10.0.4.4

Membuat cluster di project layanan kedua Anda

Untuk membuat cluster di project layanan kedua Anda, lakukan langkah-langkah berikut menggunakan gcloud CLI atau Konsol Google Cloud.

Konsol

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

    Buka Google Kubernetes Engine

  2. Pada pemilih project, pilih project layanan kedua Anda.

  3. Klik Buat.

  4. Di bagian Standar atau Autopilot, klik Konfigurasikan.

  5. Untuk Name, masukkan tier-2-cluster.

  6. Di menu drop-down Region, pilih region yang sama dengan yang Anda gunakan untuk subnet.

  7. Dari panel navigasi, klik Networking.

  8. Untuk Network, pilih shared-net.

  9. Untuk Node subnet, pilih tier-2.

  10. Untuk Pod secondary CIDR range, pilih tier-2-pods.

  11. Untuk Service secondary CIDR range, pilih tier-2-services.

  12. Klik Create.

  13. Setelah pembuatan selesai, dalam daftar cluster, klik tier-2-cluster.

  14. Di halaman Cluster details, klik tab Nodes

  15. Di bagian Node Pools, klik nama node pool yang ingin Anda periksa.

  16. Di bagian Instance groups, klik nama grup instance yang ingin Anda periksa. Contoh, gke-tier-2-cluster-default-pool-5c5add1f-grp.

  17. Dalam daftar instance, pastikan alamat IP internal node Anda berada di rentang utama subnet tier-2: 172.16.4.0/22.

gcloud

Buat cluster bernama tier-2-cluster di project layanan kedua Anda:

gcloud container clusters create-auto tier-2-cluster \
    --project=SERVICE_PROJECT_2_ID \
    --location=COMPUTE_REGION \
    --network=projects/HOST_PROJECT_ID/global/networks/shared-net \
    --subnetwork=projects/HOST_PROJECT_ID/regions/COMPUTE_REGION/subnetworks/tier-2 \
    --cluster-secondary-range-name=tier-2-pods \
    --services-secondary-range-name=tier-2-services

Setelah pembuatan selesai, pastikan node cluster Anda berada di rentang utama subnet tier-2: 172.16.4.0/22.

gcloud compute instances list --project SERVICE_PROJECT_2_ID

Output menunjukkan alamat IP internal node:

NAME                    ZONE           ... INTERNAL_IP
gke-tier-2-cluster-...  ZONE_NAME      ... 172.16.4.2
gke-tier-2-cluster-...  ZONE_NAME      ... 172.16.4.3
gke-tier-2-cluster-...  ZONE_NAME      ... 172.16.4.4

Membuat aturan firewall

Untuk mengizinkan traffic ke dalam jaringan dan di antara cluster dalam jaringan, Anda harus membuat firewall. Bagian berikut menunjukkan cara membuat dan memperbarui aturan firewall:

Membuat aturan firewall untuk mengaktifkan koneksi SSH ke node

Di project host Anda, buat aturan firewall untuk jaringan shared-net. Izinkan traffic untuk masuk di port TCP 22, yang memungkinkan Anda terhubung ke node cluster menggunakan SSH.

Konsol

  1. Buka halaman Firewall di Konsol Google Cloud.

    Buka Firewall

  2. Di pemilih project, pilih project host Anda.

  3. Dari menu VPC Networking, klik Create Firewall Rule.

  4. Untuk Name, masukkan my-shared-net-rule.

  5. Untuk Network, pilih shared-net.

  6. Untuk Direction of traffic, pilih Ingress.

  7. Untuk Action on match, pilih Allow.

  8. Untuk Target, klik All instances in the network.

  9. Untuk Source filter, pilih IP ranges.

  10. Untuk Source IP ranges, masukkan 0.0.0.0/0.

  11. Untuk Protocols and ports, pilih Specified protocols and ports. Di kotak, masukkan tcp:22.

  12. Klik Create.

gcloud

Buat aturan firewall untuk jaringan bersama:

gcloud compute firewall-rules create my-shared-net-rule \
    --project HOST_PROJECT_ID \
    --network shared-net \
    --direction INGRESS \
    --allow tcp:22

Membuat koneksi ke node menggunakan SSH

Setelah membuat firewall yang mengizinkan traffic masuk di port TCP 22, hubungkan ke node menggunakan SSH.

Konsol

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

    Buka Google Kubernetes Engine

  2. Di pemilih project, pilih project layanan pertama Anda.

  3. Klik tier-1-cluster.

  4. Di halaman Cluster details, klik tab Nodes.

  5. Di bagian Node Pools, klik nama node pool Anda.

  6. Di bagian Instance groups, klik nama grup instance Anda. Misalnya, gke-tier-1-cluster-default-pool-faf87d48-grp.

  7. Dalam daftar instance, catat alamat IP internal node. Alamat ini berada dalam rentang 10.0.4.0/22.

  8. Untuk salah satu node Anda, klik SSH. Perintah ini berhasil karena SSH menggunakan port TCP 22, yang diizinkan oleh aturan firewall Anda.

gcloud

Cantumkan node dalam project layanan pertama Anda:

gcloud compute instances list --project SERVICE_PROJECT_1_ID

Output menyertakan nama node di cluster Anda:

NAME                                           ...
gke-tier-1-cluster-default-pool-faf87d48-3mf8  ...
gke-tier-1-cluster-default-pool-faf87d48-q17k  ...
gke-tier-1-cluster-default-pool-faf87d48-x9rk  ...

Hubungkan ke salah satu node Anda menggunakan SSH:

gcloud compute ssh NODE_NAME \
    --project SERVICE_PROJECT_1_ID \
    --zone COMPUTE_ZONE

Ganti kode berikut:

Memperbarui aturan firewall untuk melakukan ping antar-node

  1. Di jendela command line SSH, mulai CoreOS Toolbox:

    /usr/bin/toolbox
    
  2. Dalam shell toolbox, lakukan ping ke salah satu node Anda yang lain di cluster yang sama. Misalnya:

    ping 10.0.4.4
    

    Perintah ping berhasil karena node Anda dan node lainnya berada dalam rentang 10.0.4.0/22.

  3. Sekarang, coba ping salah satu node dalam cluster pada project layanan Anda yang lain. Contoh:

    ping 172.16.4.3
    

    Kali ini, perintah ping gagal karena aturan firewall Anda tidak mengizinkan traffic Internet Control Message Protocol (ICMP).

  4. Di command prompt biasa, bukan shell toolbox, perbarui aturan firewall untuk mengizinkan ICMP:

    gcloud compute firewall-rules update my-shared-net-rule \
        --project HOST_PROJECT_ID \
        --allow tcp:22,icmp
    
  5. Di shell toolbox, ping node lagi. Contoh:

    ping 172.16.4.3
    

    Kali ini perintah ping berhasil.

Membuat aturan firewall tambahan

Anda dapat membuat aturan firewall tambahan untuk mengizinkan komunikasi antara node, Pod, dan Layanan di cluster Anda.

Misalnya, aturan berikut mengizinkan traffic untuk masuk dari node, Pod, atau Layanan mana pun di tier-1-cluster pada port TCP atau UDP apa pun:

gcloud compute firewall-rules create my-shared-net-rule-2 \
    --project HOST_PROJECT_ID \
    --network shared-net \
    --allow tcp,udp \
    --direction INGRESS \
    --source-ranges 10.0.4.0/22,10.4.0.0/14,10.0.32.0/20

Aturan berikut mengizinkan traffic masuk dari node, Pod, atau Layanan mana pun di tier-2-cluster di port TCP atau UDP mana pun:

gcloud compute firewall-rules create my-shared-net-rule-3 \
    --project HOST_PROJECT_ID \
    --network shared-net \
    --allow tcp,udp \
    --direction INGRESS \
    --source-ranges 172.16.4.0/22,172.20.0.0/14,172.16.16.0/20

Kubernetes juga akan mencoba membuat dan mengelola resource firewall jika diperlukan, misalnya saat Anda membuat layanan load balancer. Jika Kubernetes sendiri tidak dapat mengubah aturan firewall karena masalah izin, Peristiwa Kubernetes akan ditampilkan untuk memandu Anda tentang cara membuat perubahan.

Jika Anda ingin memberikan izin Kubernetes untuk mengubah aturan firewall, lihat Mengelola resource firewall.

Untuk Load Balancer Ingress, jika Kubernetes tidak dapat mengubah aturan firewall karena izin tidak memadai, peristiwa firewallXPNError akan muncul setiap beberapa menit. Di GLBC 1.4 dan yang lebih baru, Anda dapat membisukan peristiwa firewallXPNError dengan menambahkan anotasi networking.gke.io/suppress-firewall-xpn-error: "true" ke resource masuk. Anda dapat menghapus anotasi ini kapan saja untuk membunyikannya.

Membuat cluster pribadi di VPC Bersama

Anda dapat menggunakan VPC Bersama dengan cluster pribadi.

Anda harus memberikan izin berikut pada project host, baik ke akun pengguna maupun ke akun layanan, yang digunakan untuk membuat cluster:

  • compute.networks.get

  • compute.networks.updatePeering

Anda juga harus memastikan rentang alamat IP bidang kontrol tidak tumpang tindih dengan rentang lain yang dicadangkan di jaringan bersama.

Untuk cluster pribadi yang dibuat sebelum 15 Januari 2020, jumlah maksimum cluster GKE pribadi yang dapat Anda miliki per jaringan VPC dibatasi pada jumlah koneksi peering dari satu jaringan VPC. Cluster pribadi baru menggunakan kembali koneksi Peering Jaringan VPC yang menghilangkan batasan ini. Untuk mengaktifkan penggunaan kembali Peering Jaringan VPC pada cluster pribadi lama, Anda dapat menghapus cluster dan membuatnya kembali. Mengupgrade cluster tidak menyebabkan cluster tersebut menggunakan kembali koneksi Peering Jaringan VPC yang ada.

Di bagian ini, Anda akan membuat cluster berbasis VPC bernama private-cluster-vpc dalam jaringan VPC bersama yang telah ditetapkan.

Konsol

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

    Buka Google Kubernetes Engine

  2. Klik Buat.

  3. Di bagian Autopilot atau Standard, klik Configure.

  4. Untuk Name, masukkan private-cluster-vpc.

  5. Dari panel navigasi, klik Networking.

  6. Pilih Private cluster.

  7. (Opsional untuk Autopilot): Tetapkan Control plane IP range ke 172.16.0.16/28.

  8. Di menu drop-down Network, pilih jaringan VPC yang Anda buat sebelumnya.

  9. Di menu drop-down Node subnet, pilih subnet bersama yang Anda buat sebelumnya.

  10. Konfigurasi cluster Anda sesuai kebutuhan.

  11. Klik Create.

gcloud

Jalankan perintah berikut untuk membuat cluster bernama private-cluster-vpc di VPC Bersama yang telah ditetapkan:

gcloud container clusters create-auto private-cluster-vpc \
    --project=PROJECT_ID \
    --location=COMPUTE_REGION \
    --network=projects/HOST_PROJECT/global/networks/shared-net \
    --subnetwork=SHARED_SUBNETWORK \
    --cluster-secondary-range-name=tier-1-pods \
    --services-secondary-range-name=tier-1-services \
    --enable-private-nodes \
    --master-ipv4-cidr=172.16.0.0/28

Pembersihan

Setelah menyelesaikan latihan dalam panduan ini, lakukan tugas berikut untuk menghapus resource guna mencegah tagihan yang tidak diinginkan yang timbul pada akun Anda:

Menghapus cluster

Hapus dua klaster yang Anda buat.

Konsol

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

    Buka Google Kubernetes Engine

  2. Di pemilih project, pilih project layanan pertama Anda.

  3. Pilih tier-1-cluster, lalu klik Delete.

  4. Pada pemilih project, pilih project layanan kedua Anda.

  5. Pilih tier-2-cluster, lalu klik Delete.

gcloud

gcloud container clusters delete tier-1-cluster \
    --project SERVICE_PROJECT_1_ID \
    --zone COMPUTE_ZONE

gcloud container clusters delete tier-2-cluster \
    --project SERVICE_PROJECT_2_ID \
    --zone COMPUTE_ZONE

Menonaktifkan VPC Bersama

Nonaktifkan VPC Bersama di project host Anda.

Konsol

  1. Buka halaman Shared VPC di Konsol Google Cloud.

    Buka VPC Bersama

  2. Di pemilih project, pilih project host Anda.

  3. Klik Disable Shared VPC.

  4. Masukkan HOST_PROJECT_ID di kolom, lalu klik Disable.

gcloud

gcloud compute shared-vpc associated-projects remove SERVICE_PROJECT_1_ID \
    --host-project HOST_PROJECT_ID

gcloud compute shared-vpc associated-projects remove SERVICE_PROJECT_2_ID \
    --host-project HOST_PROJECT_ID

gcloud compute shared-vpc disable HOST_PROJECT_ID

Menghapus aturan firewall

Hapus aturan firewall yang Anda buat.

Konsol

  1. Buka halaman Firewall di Konsol Google Cloud.

    Buka Firewall

  2. Di pemilih project, pilih project host Anda.

  3. Dalam daftar aturan, pilih my-shared-net-rule, my-shared-net-rule-2, dan my-shared- net-rule-3

  4. Klik Delete.

gcloud

Hapus aturan firewall Anda:

gcloud compute firewall-rules delete \
    my-shared-net-rule \
    my-shared-net-rule-2 \
    my-shared-net-rule-3 \
    --project HOST_PROJECT_ID

Menghapus jaringan bersama

Hapus jaringan bersama yang Anda buat.

Konsol

  1. Buka halaman VPC networks di Konsol Google Cloud.

    Buka VPC networks

  2. Di pemilih project, pilih project host Anda.

  3. Di daftar jaringan, pilih shared-net.

  4. Klik Delete VPC Network.

gcloud

gcloud compute networks subnets delete tier-1 \
    --project HOST_PROJECT_ID \
    --region COMPUTE_REGION

gcloud compute networks subnets delete tier-2 \
    --project HOST_PROJECT_ID \
    --region COMPUTE_REGION

gcloud compute networks delete shared-net --project HOST_PROJECT_ID

Menghapus peran Host Service Agent User

Hapus peran Host Service Agent User dari dua project layanan Anda.

Konsol

  1. Buka halaman IAM di Konsol Google Cloud.

    Buka IAM

  2. Di pemilih project, pilih project host Anda.

  3. Dalam daftar anggota, pilih baris yang menampilkan service-SERVICE_PROJECT_1_NUM@container-engine-robot.iam.gserviceaccount.com yang diberi peran Kubernetes Engine Host Service Agent User.

  4. Pilih baris yang menunjukkan service-SERVICE_PROJECT_2_NUM@container-engine-robot.iam.gserviceaccount.com yang diberi peran Kubernetes Engine Host Service Agent User.

  5. Klik Remove access.

gcloud

  1. Hapus peran Host Service Agent User dari akun layanan GKE project layanan pertama Anda:

    gcloud projects remove-iam-policy-binding HOST_PROJECT_ID \
        --member serviceAccount:service-SERVICE_PROJECT_1_NUM@container-engine-robot.iam.gserviceaccount.com \
        --role roles/container.hostServiceAgentUser
    
  2. Hapus peran Host Service Agent User dari akun layanan GKE project layanan kedua Anda:

    gcloud projects remove-iam-policy-binding HOST_PROJECT_ID \
        --member serviceAccount:service-SERVICE_PROJECT_2_NUM@container-engine-robot.iam.gserviceaccount.com \
        --role roles/container.hostServiceAgentUser
    

Pemecahan masalah

Izin Ditolak

Gejala:

Failed to get metadata from network project. GCE_PERMISSION_DENIED: Google
Compute Engine: Required 'compute.projects.get' permission for
'projects/HOST_PROJECT_ID
Kemungkinan penyebab:

  • Kubernetes Engine API belum diaktifkan dalam project host.

  • Akun layanan GKE project host tidak ada. Misalnya, data tersebut mungkin telah dihapus.

  • Akun layanan GKE project host tidak memiliki peran Kubernetes Engine Service Agent (container.serviceAgent) di project host. Binding mungkin telah dihapus secara tidak sengaja.

  • Akun layanan GKE project layanan tidak memiliki peran Host Service Agent User dalam project host.

Untuk memperbaiki masalah ini: Tentukan apakah akun layanan GKE project host ada. Jika tidak, lakukan hal berikut:

  • Jika Kubernetes Engine API tidak diaktifkan di project host, aktifkan Kubernetes Engine. Tindakan ini akan membuat akun layanan GKE project host dan memberi akun layanan GKE project host peran Kubernetes Engine Service Agent (container.serviceAgent) dalam project host.

  • Jika Kubernetes Engine API diaktifkan di project host, ini berarti akun layanan GKE project host telah dihapus atau peran Kubernetes Engine Service Agent (container.serviceAgent) tidak ada dalam project host. Untuk memulihkan akun layanan GKE atau binding peran, Anda harus menonaktifkan dan mengaktifkan kembali Kubernetes Engine API. Untuk informasi selengkapnya, lihat Pemecahan Masalah Google Kubernetes Engine.

Langkah selanjutnya