Menerapkan kebijakan firewall di GKE secara selektif

Halaman ini menunjukkan cara menerapkan kebijakan firewall jaringan Cloud Next Generation Firewall secara selektif di Google Kubernetes Engine (GKE) menggunakan Tag. Tag memberikan kontrol yang lebih terperinci untuk mengatur hierarki resource Anda dibandingkan dengan Google Cloud hierarki resource default. Tag juga memungkinkan penerapan kebijakan secara bersyarat.

Halaman ini ditujukan bagi spesialis Keamanan yang menginginkan kontrol terperinci atas kebijakan firewall di GKE. Untuk mempelajari lebih lanjut peran umum dan contoh tugas yang kami referensikan dalam konten Google Cloud , lihat Peran dan tugas pengguna GKE umum.

Sebelum membaca halaman ini, pastikan Anda sudah memahami konsep berikut:

Tentang Tag

Tag adalah pasangan nilai kunci yang memungkinkan Anda memberi anotasi dan mengelola resourceGoogle Cloud di tingkat organisasi atau project. Anda dapat menggunakan tag untuk mengatur resource dan menerapkan kebijakan secara bersyarat seperti kebijakan firewall atau IAM. Anda dapat menggunakan kontrol akses IAM untuk menentukan siapa yang dapat melampirkan, membuat, memperbarui, atau menghapus tag.

Untuk mempelajari Tag lebih lanjut, lihat Ringkasan tag di dokumentasi Resource Manager.

Menggunakan Tag untuk menerapkan kebijakan firewall jaringan

Anda dapat menggunakan Tag untuk menerapkan kebijakan firewall jaringan global atau regional secara bersyarat ke node GKE Anda. Anda harus menetapkan tujuan GCE_FIREWALL untuk tag yang ingin digunakan dengan kebijakan firewall jaringan. Saat Anda menerapkan tag tujuan firewall ke cluster atau node pool GKE, GKE akan otomatis melampirkan tag tersebut ke virtual machine (VM) Compute Engine yang sesuai.

Tag untuk kebijakan firewall jaringan menggantikan kebutuhan untuk menggunakan tag jaringan, yang merupakan metadata yang dapat dilampirkan oleh siapa saja ke VM Compute Engine yang mendasarinya untuk penerapan aturan firewall Virtual Private Cloud, dan yang tidak mendukung kontrol akses IAM. Jika Anda menggunakan tag jaringan dengan aturan firewall VPC, sebaiknya Anda bermigrasi ke kebijakan firewall jaringan dan menggunakan tag firewall yang aman. Untuk perbandingan mendetail, lihat Membandingkan tag jaringan dengan Tag dalam dokumen ini.

Alur kerja tag untuk kebijakan firewall jaringan

Untuk menggunakan tag dengan kebijakan firewall jaringan di GKE, Anda harus melakukan hal berikut:

  1. Membuat tag:

    1. Tentukan kunci tag di tingkat organisasi atau project, seperti env.
    2. Tentukan kemungkinan nilai tag untuk kunci, seperti dev, staging, dan prod.
    3. Tentukan tag untuk penggunaan kebijakan firewall jaringan.

  2. Memberi pengguna akses untuk berinteraksi dengan tag firewall.

  3. Terapkan pasangan nilai kunci tag ke cluster GKE, node pool tertentu, atau gunakan di ComputeClass kustom untuk menerapkannya ke node untuk workload tertentu. GKE secara otomatis melampirkan tag ke VM Compute Engine pokok untuk penerapan kebijakan firewall.

Sebelum memulai

Sebelum memulai, pastikan Anda telah melakukan tugas berikut:

  • Aktifkan Google Kubernetes Engine API.
  • Aktifkan Google Kubernetes Engine API
  • Jika ingin menggunakan Google Cloud CLI untuk tugas ini, instal lalu lakukan inisialisasi gcloud CLI. Jika sebelumnya Anda telah menginstal gcloud CLI, dapatkan versi terbaru dengan menjalankan perintah gcloud components update. gcloud CLI versi sebelumnya mungkin tidak mendukung menjalankan perintah dalam dokumen ini.

Persyaratan dan batasan

  • Tag untuk kebijakan firewall jaringan didukung di GKE versi 1.28 dan yang lebih baru. Jika Anda menggunakan versi GKE sebelum 1.28, gunakan tag jaringan dengan aturan firewall VPC sebagai gantinya.
  • Cluster dan node pool GKE tidak mendukung tag yang dibuat dengan flag --purpose-data=organization=auto. Untuk beban kerja GKE, sebaiknya Anda membuat tag yang dicakup ke jaringan VPC menggunakan flag --purpose-data=network. Untuk mengetahui informasi selengkapnya, lihat Membuat tag.
  • Cluster GKE dan tag harus dikaitkan dengan jaringan VPC yang sama.
  • Di cluster Standard, setiap node pool mendukung hingga lima tag firewall yang terlampir.
  • Cluster Autopilot mendukung hingga lima tag firewall.
  • Class Komputasi Kustom mendukung hingga lima tag.
  • GKE menolak kunci tag yang menggunakan awalan gke-managed.
  • Anda harus membuat key-value pair tag sebelum dapat melampirkannya ke cluster atau node pool.

Peran dan izin IAM

Untuk mendapatkan izin yang diperlukan untuk menggunakan Tag untuk kebijakan firewall di GKE, minta administrator Anda untuk memberi Anda peran IAM berikut:

  • Untuk memberikan izin yang diperlukan untuk tag kepada pengguna dan agen layanan GKE:
  • Untuk membuat dan mengelola tag: Administrator Tag (roles/resourcemanager.tagAdmin) pada organisasi atau project
  • Untuk melampirkan tag ke resource: Pengguna Tag (roles/resourcemanager.tagUser) di project

Untuk mengetahui informasi selengkapnya tentang pemberian peran, lihat Mengelola akses ke project, folder, dan organisasi.

Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.

Membuat tag

Tag harus ada agar Anda dapat melampirkannya ke cluster atau node. Untuk membuat tag, lihat Menggunakan Tag untuk firewall dalam dokumentasi Cloud NGFW.

Misalnya, untuk membuat tag firewall cakupan project, jalankan perintah berikut:

  1. Buat kunci tag:

    gcloud resource-manager tags keys create TAG_KEY \
        --parent=projects/PROJECT_ID \
        --purpose=GCE_FIREWALL \
        --purpose-data=network=PROJECT_ID/NETWORK_NAME
    

    Ganti kode berikut:

    • TAG_KEY: nama kunci tag, seperti env
    • PROJECT_ID: Project ID Google Cloud Anda
    • NETWORK_NAME: nama jaringan VPC yang akan Anda gunakan dengan tag
  2. Dapatkan ID kunci tag:

    gcloud resource-manager tags keys describe PROJECT_ID/TAG_KEY \
        --format="value(name)"
    

    Outputnya adalah tagKeys/KEY_ID, dengan KEY_ID adalah ID numerik untuk kunci. Catat ID ini untuk nanti.

  3. Tambahkan nilai tag ke kunci tag:

    gcloud resource-manager tags values create TAG_VALUE \
        --parent=tagKeys/KEY_ID
    

    Ganti TAG_VALUE dengan nama nilai yang diizinkan untuk kunci tag tersebut, seperti dev.

Menggunakan sintaksis tag yang benar dalam perintah gcloud CLI

Saat merujuk tag menggunakan gcloud CLI, Anda harus memformat pasangan nilai kunci menggunakan salah satu sintaksis berikut:

Sintaksis tag
tagKeys/KEY_ID=tagValues/VALUE_ID

Ganti kode berikut:

  • KEY_ID: ID kunci numerik
  • VALUE_ID: ID nilai numerik

Misalnya, tagKeys/123456789=tagValues/987654321.

ORGANIZATION_ID/TAG_KEY=TAG_VALUE

Ganti kode berikut:

  • ORGANIZATION_ID: ID organisasi Google Cloud numerik Anda
  • TAG_KEY: nama kunci tag yang Anda buat
  • TAG_VALUE: nama nilai tag yang Anda buat

Misalnya, 12345678901/env=dev.

PROJECT_ID/TAG_KEY=TAG_VALUE

Ganti kode berikut:

  • PROJECT_ID: Project ID Google Cloud Anda
  • TAG_KEY: nama kunci tag yang Anda buat
  • TAG_VALUE: nama nilai tag yang Anda buat

Misalnya, example-project/env=dev.

PROJECT_NUMBER/TAG_KEY=TAG_VALUE

Ganti kode berikut:

  • PROJECT_ID: ID numerik untuk project Google Cloud Anda
  • TAG_KEY: nama kunci tag yang Anda buat
  • TAG_VALUE: nama nilai tag yang Anda buat

Misalnya, 11223344556/env=dev.

Menargetkan tag dengan kebijakan firewall

Setelah membuat tag, Anda dapat merujuk ke pasangan nilai kunci tertentu dalam aturan kebijakan firewall. Untuk mengetahui petunjuknya, lihat artikel Menggunakan Tag untuk firewall.

Memberikan izin IAM ke agen layanan

Agar GKE dapat melampirkan tag secara otomatis ke node baru selama peristiwa penskalaan, Anda harus memberikan peran IAM yang sesuai ke akun layanan yang dikelola Google Cloud, yang juga disebut agen layanan.

  1. Berikan peran Pengguna Tag (roles/resourcemanager.tagUser) kepada Agen Layanan Kubernetes Engine:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:service-PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com \
        --role=roles/resourcemanager.tagUser \
        --condition=None
    

    Ganti PROJECT_NUMBER dengan Google Cloud nomor project cluster. Untuk menemukan nomor project, jalankan perintah berikut:

    gcloud projects describe PROJECT_ID --format="value(projectNumber)"
    
  2. Berikan peran Administrator Penahanan Tag (roles/resourcemanager.tagHoldAdmin) kepada Agen Layanan Kubernetes Engine untuk pasangan nilai kunci tag:

    gcloud resource-manager tags values add-iam-policy-binding PROJECT_ID/TAG_KEY/TAG_VALUE \
        --member=serviceAccount:service-PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com \
        --role=roles/resourcemanager.tagHoldAdmin
    

    Peran ini memungkinkan agen layanan mencegah penghapusan tag jika key-value pair masih digunakan di GKE.

  3. Berikan peran Pengguna Tag (roles/resourcemanager.tagUser) kepada Agen Layanan Google API:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:PROJECT_NUMBER@cloudservices.gserviceaccount.com \
        --role=roles/resourcemanager.tagUser \
        --condition=None
    

Memberikan peran IAM tambahan untuk tag di luar project

Untuk menggunakan tag yang dimiliki oleh organisasi atau project lain selain project cluster, lakukan langkah-langkah tambahan berikut:

  1. Berikan peran Tag User (roles/resourcemanager.tagUser) ke akses Agen Layanan Kubernetes Engine untuk tag di resource induk:

    gcloud resource-manager tags keys add-iam-policy-binding PARENT_RESOURCE/TAG_KEY \
        --member=serviceAccount:service-PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com \
        --role=roles/resourcemanager.tagUser \
        --condition=None
    

    Ganti kode berikut:

    • PARENT_RESOURCE: project ID atau ID organisasi dari resource yang memiliki tag tersebut
    • PROJECT_NUMBER: nomor project cluster
  2. Berikan akses peran Pengguna Tag (roles/resourcemanager.tagUser) kepada Agen Layanan Google API untuk tag di resource induk:

    gcloud resource-manager tags keys add-iam-policy-binding PARENT_RESOURCE/TAG_KEY \
        --member=serviceAccount:PROJECT_NUMBER@cloudservices.gserviceaccount.com \
        --role=roles/resourcemanager.tagUser \
        --condition=None
    
  3. Berikan peran Administrator Penahanan Tag (roles/resourcemanager.tagHoldAdmin) ke Agen Layanan Kubernetes Engine untuk pasangan nilai kunci tag:

    gcloud resource-manager tags values add-iam-policy-binding PARENT_RESOURCE/TAG_KEY/TAG_VALUE \
        --member=serviceAccount:service-PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com \
        --role=roles/resourcemanager.tagHoldAdmin
    

Melampirkan tag firewall ke cluster Autopilot

Anda melampirkan tag firewall ke cluster Autopilot di tingkat cluster. GKE secara otomatis menerapkan tag tingkat cluster ini ke setiap node.

Melampirkan tag saat Anda membuat cluster Autopilot baru

Jalankan perintah berikut:

gcloud container clusters create-auto CLUSTER_NAME \
    --location=LOCATION \
    --autoprovisioning-resource-manager-tags=TAG1,TAG2,...

Ganti kode berikut:

  • CLUSTER_NAME: nama cluster baru.
  • LOCATION: region Compute Engine cluster.
  • TAG1,TAG2,...: kumpulan pasangan nilai kunci yang dipisahkan koma untuk dilampirkan. Setiap pasangan nilai kunci harus menggunakan sintaksis yang didukung, seperti yang dijelaskan di bagian Sintaksis tag dalam perintah. Contoh, example-project/env=dev,1234567901/team=sre.

Melampirkan tag ke cluster Autopilot yang ada

Jalankan perintah berikut:

gcloud container clusters update CLUSTER_NAME \
    --location=LOCATION \
    --autoprovisioning-resource-manager-tags=TAG1,TAG2,...

Saat Anda memperbarui tag pada cluster, GKE akan menimpa tag yang ada di semua node.

Melampirkan tag firewall ke cluster dan node pool Standard

Metode yang Anda gunakan untuk melampirkan tag bergantung pada apakah Anda ingin node pool lain di cluster mewarisi tag tersebut, sebagai berikut:

Tag firewall cluster standar
--autoprovisioning-resource-manager-tags

Setelan tingkat cluster

GKE menerapkan tag ke semua node pool yang disediakan otomatis yang baru di cluster.

Jika Anda menggunakan flag ini di cluster yang sudah ada, GKE tidak akan menerapkan tag ke node pool yang ada di cluster. Node pool yang ada akan mempertahankan tag yang sudah diterapkan sebelum update. Untuk mengupdate tag node pool yang ada, gunakan flag --resource-manager-tags.

--resource-manager-tags

Setelan tingkat node pool

GKE menerapkan tag ke node pool yang ditentukan. Jika Anda menggunakan flag ini selama pembuatan cluster, GKE akan menerapkan tag ke node pool default yang dibuat GKE. Jika Anda menggunakan flag ini pada node pool yang disediakan secara otomatis, GKE akan mengganti tag yang ada di node pool tersebut.

Melampirkan tag firewall ke cluster Standard

Anda dapat melampirkan tag ke cluster Standard baru atau yang sudah ada. Saat Anda melampirkan tag ke seluruh cluster, GKE menganggap tag ini ditetapkan di level cluster.

Melampirkan tag ke cluster Standard baru dengan penyediaan otomatis node

GKE menggunakan tag level cluster untuk node baru yang disediakan otomatis secara default. Node pool default yang dibuat GKE di cluster tidak disediakan secara otomatis dan tidak mendapatkan tag tersebut.

gcloud container clusters create CLUSTER_NAME \
    --location=LOCATION \
    --autoprovisioning-resource-manager-tags=TAG1,TAG2,... \
    --enable-autoprovisioning \
    --max-cpu=MAX_CPU \
    --max-memory=MAX_MEMORY

Ganti kode berikut:

  • CLUSTER_NAME: nama cluster baru
  • LOCATION: region atau zona Compute Engine untuk cluster
  • TAG1,TAG2,...: kumpulan pasangan nilai kunci yang dipisahkan koma untuk dilampirkan. Setiap pasangan nilai kunci harus menggunakan sintaksis yang didukung, seperti yang dijelaskan di bagian Sintaksis tag dalam perintah. Contoh, example-project/env=dev,1234567901/team=sre.
  • MAX_CPU: jumlah maksimum core untuk cluster
  • MAX_MEMORY: kapasitas memori maksimum untuk cluster dalam gigabyte

Melampirkan tag saat Anda mengaktifkan penyediaan otomatis node pada cluster yang ada

GKE hanya menerapkan tag ini ke node pool baru yang disediakan secara otomatis. Node pool yang ada mempertahankan tag apa pun yang dimilikinya sebelum pembaruan.

  1. Lampirkan tag ke cluster:

    gcloud container clusters update CLUSTER_NAME \
        --location=LOCATION \
        --autoprovisioning-resource-manager-tags=TAG1,TAG2,...
    
  2. Aktifkan penyediaan otomatis node di cluster:

    gcloud container clusters update CLUSTER_NAME \
        --location=LOCATION \
        --enable-autoprovisioning \
        --max-cpu=MAX_CPU \
        --max-memory=MAX_MEMORY
    

Melampirkan tag firewall ke node pool

Anda dapat melampirkan tag ke node pool baru atau yang sudah ada, terlepas dari apakah node pool tersebut menggunakan penyediaan otomatis node. GKE menganggap tag ini sebagai setelan tingkat node pool.

Melampirkan tag ke node pool default

GKE melampirkan tag yang Anda tentukan menggunakan flag --resource-manager-tags saat Anda membuat cluster ke node pool default yang dibuat GKE di cluster.

gcloud container clusters create CLUSTER_NAME \
    --location=LOCATION \
    --resource-manager-tags=TAG1,TAG2,...

Ganti kode berikut:

  • CLUSTER_NAME: nama cluster baru
  • LOCATION: region atau zona Compute Engine untuk cluster
  • TAG1,TAG2,...: kumpulan pasangan nilai kunci yang dipisahkan koma untuk dilampirkan. Setiap pasangan nilai kunci harus menggunakan sintaksis yang didukung, seperti yang dijelaskan di bagian Sintaksis tag dalam perintah. Contoh, example-project/env=dev,1234567901/team=sre.

Melampirkan tag ke node pool baru

Saat Anda menggunakan flag --resource-manager-tags selama pembuatan node pool, GKE melampirkan tag yang Anda tentukan ke node pool tersebut.

gcloud container node-pools create NODE_POOL_NAME \
    --cluster=CLUSTER_NAME \
    --location=LOCATION \
    --resource-manager-tags=TAG1,TAG2,...

Ganti kode berikut:

  • NODE_POOL_NAME: nama node pool baru
  • CLUSTER_NAME: nama cluster
  • LOCATION: region atau zona Compute Engine cluster
  • TAG1,TAG2,...:kumpulan pasangan nilai kunci yang dipisahkan koma untuk dilampirkan. Setiap pasangan nilai kunci harus menggunakan sintaksis yang didukung, seperti yang dijelaskan di bagian Sintaksis tag dalam perintah. Contoh, example-project/env=dev,1234567901/team=sre.

Melampirkan tag ke node pool yang ada

Saat Anda memperbarui tag pada node pool yang ada menggunakan flag --resource-manager-tags, GKE akan menimpa tag yang ada di node pool tersebut. Anda dapat menggunakan perintah ini untuk memperbarui tag pada node pool yang disediakan otomatis.

gcloud container node-pools update NODE_POOL_NAME \
    --cluster=CLUSTER_NAME \
    --location=LOCATION \
    --resource-manager-tags=TAG1,TAG2,...

Ganti NODE_POOL_NAME dengan nama node pool yang akan diperbarui.

Mengganti setelan penyediaan otomatis di cluster dan node pool yang ada

Saat Anda memperbarui tag di tingkat cluster, GKE akan menerapkan tag baru tersebut ke semua node pool baru di cluster dan mempertahankan tag yang dilampirkan ke node pool yang ada.

Saat Anda memperbarui node pool yang ada untuk mengaktifkan atau menonaktifkan penyediaan otomatis node, pertimbangkan implikasi berikut untuk tag:

  • Saat Anda mengaktifkan atau menonaktifkan penyediaan otomatis node, node pool akan mempertahankan tag yang ada. GKE tidak mengganti tag ini dengan tag tingkat cluster, bahkan selama pembuatan ulang node.
  • Jika Anda memperbarui tag secara manual di node pool tertentu, GKE akan menimpa tag yang ada dengan tag yang Anda tentukan untuk node pool tersebut.

Menerapkan tag ke workload dengan ComputeClass kustom

Anda dapat menerapkan tag firewall ke node pool tertentu di cluster Autopilot dan di cluster Standard yang menggunakan penyediaan otomatis node (NAP) dengan menggunakan ComputeClass kustom (CCC). Kelas Compute Kustom adalah resource yang memungkinkan Anda menentukan konfigurasi untuk sekelompok node, termasuk menentukan tag Pengelola Resource yang akan diterapkan ke node.

Saat Anda men-deploy workload yang meminta node dengan label Class Komputasi Kustom tertentu, NAP akan memeriksa terlebih dahulu apakah node pool yang cocok dengan semua persyaratan Class Komputasi Kustom, termasuk tag Resource Manager yang ditentukan, sudah ada.

Jika tidak ada node pool yang cocok, NAP akan membuat node pool baru untuk workload dengan konfigurasi yang ditentukan dan melampirkan tag ke VM Compute Engine yang mendasarinya. Pembuatan node pool otomatis ini memastikan bahwa workload berjalan di node dengan tag firewall yang benar untuk penerapan kebijakan.

Membuat ComputeClass kustom menggunakan Tag

  1. Untuk membuat ComputeClass dengan tag, simpan manifes berikut sebagai my-compute-class.yaml. Di kolom resourceManagerTags, tentukan kunci dan nilai tag untuk dikaitkan dengan node pool yang dibuat menggunakan class ini.

    apiVersion: cloud.google.com/v1
    kind: ComputeClass
    metadata:
      name: COMPUTE_CLASS_NAME
    spec:
        nodePoolConfig:
          resourceManagerTags:
            - key: "PROJECT_ID/TAG_KEY_1"
              value: "TAG_VALUE_1"
            - key: "ORGANIZATION_ID/TAG_KEY_2"
              value: "TAG_VALUE_2"
            - key: "tagKeys/KEY_ID"
              value: "tagValues/VALUE_ID"
    

    Ganti kode berikut:

    • COMPUTE_CLASS_NAME: nama untuk Custom Compute Class Anda, misalnya, my-custom-class.
    • PROJECT_ID: Google Cloud Project ID Anda.
    • TAG_KEY_1: nama kunci tag pertama.
    • TAG_VALUE_1: nama nilai tag pertama.
    • ORGANIZATION_ID: ID organisasi Google Cloud numerik Anda.
    • TAG_KEY_2: nama kunci tag kedua.
    • TAG_VALUE_2: nama nilai tag kedua.
    • KEY_ID: ID numerik kunci tag.
    • VALUE_ID: ID numerik nilai tag.
  2. Terapkan manifes:

    kubectl apply -f my-compute-class.yaml
    

Jika Anda menentukan tag yang tidak valid atau jika agen layanan GKE tidak memiliki izin IAM yang diperlukan untuk tag tersebut, GKE tidak akan menyediakan kumpulan node untuk beban kerja Anda, dan beban kerja akan tetap dalam status Pending. Untuk mengetahui informasi selengkapnya tentang error, lihat kolom Status di resource ComputeClass Anda.

Untuk memeriksa status, jalankan perintah berikut:

kubectl get cc COMPUTE_CLASS_NAME -o jsonpath='{.status}' | jq .

Ganti COMPUTE_CLASS_NAME dengan nama Custom Compute Class Anda.

Menargetkan Kelas Compute Kustom dalam workload Anda

  1. Untuk menargetkan ComputeClass yang Anda buat, simpan manifes berikut sebagai pod-with-ccc.yaml. Manifes ini menggunakan kolom nodeSelector untuk menargetkan Compute Class.

    apiVersion: v1
    kind: Pod
    metadata:
      name: nginx-server
    spec:
      nodeSelector:
        cloud.google.com/compute-class: "COMPUTE_CLASS_NAME"
      containers:
        - name: nginx
          image: nginx:latest
    

    Ganti COMPUTE_CLASS_NAME dengan nama Custom Compute Class Anda, misalnya, my-custom-class.

  2. Terapkan manifes:

    kubectl apply -f pod-with-ccc.yaml
    

Saat Anda menjadwalkan workload yang menargetkan Class Komputasi Kustom, GKE akan otomatis menerapkan taint ke node yang dibuat untuk class tersebut dan menambahkan toleransi yang sesuai ke Pod workload Anda sehingga hanya Pod yang secara eksplisit meminta class tersebut yang dijadwalkan di node tersebut.

Mengizinkan beban kerja dengan Kebijakan Penerimaan Validasi (VAP)

Untuk membantu memastikan bahwa hanya workload yang sah yang dapat dijadwalkan di node pool dengan tag, sebaiknya gunakan Kebijakan Penerimaan Validasi. Kebijakan ini, yang merupakan fitur Kubernetes bawaan, mencegat permintaan untuk membuat atau memperbarui Pod sebelum dipertahankan. Penyadapan ini mencegah workload yang tidak sah berjalan di node yang diberi tag.

Kebijakan berikut menolak permintaan pembuatan Pod jika Pod berisi toleransi untuk salah satu taint Class Komputasi yang tercantum dan tidak berada di namespace yang diizinkan.

  1. Simpan manifes berikut sebagai restrict-toleration.yaml:

    # Copyright 2025 Google LLC
    #
    # Licensed under the Apache License, Version 2.0 (the "License");
    # you may not use this file except in compliance with the License.
    # You may obtain a copy of the License at
    #
    #      http://www.apache.org/licenses/LICENSE-2.0
    #
    # Unless required by applicable law or agreed to in writing, software
    # distributed under the License is distributed on an "AS IS" BASIS,
    # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    # See the License for the specific language governing permissions and
    # limitations under the License.
    
    apiVersion: admissionregistration.k8s.io/v1
    kind: ValidatingAdmissionPolicy
    metadata:
      name: restrict-toleration
    spec:
      failurePolicy: Fail
      paramKind:
        apiVersion: v1
        kind: ConfigMap
      matchConstraints:
        # GKE will mutate any pod specifying a CC label in a nodeSelector
        # or in a nodeAffinity with a toleration for the CC node label.
        # Mutation hooks will always mutate the K8s object before validating
        # the admission request.  
        # Pods created by Jobs, CronJobs, Deployments, etc. will also be validated.
        # See https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/#admission-control-phases for details
        resourceRules:
        - apiGroups:   [""]
          apiVersions: ["v1"]
          operations:  ["CREATE", "UPDATE"]
          resources:   ["pods"]
      matchConditions:
        - name: 'match-tolerations'
          # Validate only if compute class toleration exists
          # and the CC label tolerated is listed in the configmap.
          expression: > 
            object.spec.tolerations.exists(t, has(t.key) &&
            t.key == 'cloud.google.com/compute-class' &&
            params.data.computeClasses.split('\\n').exists(cc, cc == t.value))
      validations:
        # ConfigMap with permitted namespace list referenced via `params`.
        - expression: "params.data.namespaces.split('\\n').exists(ns, ns == object.metadata.namespace)"
          messageExpression: "'Compute class toleration not permitted on workloads in namespace ' + object.metadata.namespace"
    
    ---
    apiVersion: admissionregistration.k8s.io/v1
    kind: ValidatingAdmissionPolicyBinding
    metadata:
      name: restrict-toleration-binding
    spec:
      policyName: restrict-toleration
      validationActions: ["Deny"]
      paramRef:
        name: allowed-ccc-namespaces
        namespace: default
        parameterNotFoundAction: Deny
    ---
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: allowed-ccc-namespaces
      namespace: default
    data:
      # Replace example namespaces in line-separated list below.
      namespaces: |
        foo
        bar
        baz
      # ComputeClass names to monitor with this validation policy.
      # The 'autopilot' and 'autopilot-spot' CCs are present on
      # all NAP Standard and Autopilot clusters.
      computeClasses: |
        MY_COMPUTE_CLASS
        autopilot
        autopilot-spot
    
    
  2. Terapkan manifes:

    kubectl apply -f restrict-toleration.yaml
    

Sesuaikan Kebijakan Penerimaan Validasi untuk memenuhi kebutuhan keamanan spesifik organisasi Anda.

Memverifikasi tag firewall di cluster

  • Mencantumkan tag di cluster Autopilot:

    gcloud container clusters describe CLUSTER_NAME \
        --location=LOCATION \
        --format="value(nodePoolAutoConfig.resourceManagerTags)"
    

    Ganti kode berikut:

    • CLUSTER_NAME: nama cluster.
    • LOCATION: region atau zona Compute Engine cluster.
  • Mencantumkan tag pada node pool tertentu:

    Perintah ini juga memverifikasi tag pada node pool yang disediakan secara otomatis oleh Class Compute Kustom.

    gcloud container node-pools describe NODE_POOL_NAME \
      --cluster=CLUSTER_NAME \
      --location=LOCATION \
      --format="value(config.resourceManagerTags)"
    

    Ganti kode berikut:

    • NODE_POOL_NAME: nama node pool.
    • CLUSTER_NAME: nama cluster.
    • LOCATION: region atau zona Compute Engine cluster.

Melepaskan tag firewall dari cluster dan node pool

Untuk menghapus tag firewall dari cluster dan node pool, perbarui resource dengan nilai kosong untuk tag.

Melepaskan tag dari cluster Autopilot

Jalankan perintah berikut:

gcloud container clusters update CLUSTER_NAME \
    --location=LOCATION \
    --autoprovisioning-resource-manager-tags=

Melepaskan tag dari node pool

  1. Lepaskan tag node autoprovisioning tingkat cluster:

    gcloud container clusters update CLUSTER_NAME \
        --location=LOCATION \
        --autoprovisioning-resource-manager-tags=
    

    GKE tidak akan melampirkan tag ke node pool baru yang disediakan secara otomatis.

  2. Lepaskan tag node pool:

    gcloud container node-pools update NODE_POOL_NAME \
        --cluster=CLUSTER_NAME \
        --location=LOCATION \
        --resource-manager-tags=
    

    GKE menghapus tag yang ada dari node pool tersebut.

Menghapus kunci dan nilai tag

Untuk menghapus kunci atau nilai tag, pastikan tag tersebut dilepaskan dari semua resource. Kemudian, lihat Menghapus tag dalam dokumentasi Resource Manager.

Membandingkan tag jaringan dengan Tag

Penggunaan Tag untuk penerapan kebijakan firewall memiliki manfaat keamanan dan kegunaan yang signifikan dibandingkan dengan tag jaringan. Demikian pula, kebijakan firewall jaringan meningkatkan kemampuan aturan firewall VPC dengan memfasilitasi penerapan aturan firewall di seluruh organisasi, folder, project, atau jaringan.

Penggunaan Tag dengan kebijakan firewall jaringan adalah cara yang lebih aman dan skalabel untuk mengelola akses ke lingkungan GKE di seluruh organisasi Anda. Anda dapat menggunakan tag jaringan di cluster yang sama dengan Tag, meskipun Anda tidak dapat menggunakan tag jaringan untuk menerapkan kebijakan firewall jaringan.

Untuk perbandingan mendetail antara Tag dan tag jaringan, lihat Perbandingan Tag dan tag jaringan dalam dokumentasi Cloud NGFW.

Perbedaan fungsional di node pool yang disediakan otomatis

Di cluster Autopilot dan di node pool Standard yang tidak menggunakan penyediaan otomatis node, tag jaringan dan Tag menunjukkan perilaku yang serupa. Tabel berikut menunjukkan perbedaan fungsional antara tag jaringan dan Tag di node pool yang disediakan otomatis dalam cluster Standard:

Tindakan Perilaku tag jaringan Perilaku tag
GKE menyediakan node pool secara otomatis GKE menerapkan tag jaringan tingkat cluster GKE menerapkan tag tingkat cluster
Anda memperbarui tag atau tag jaringan di node pool yang disediakan secara otomatis
  • Jika tag jaringan tingkat cluster ada, operasi update akan gagal
  • Jika tag jaringan tingkat cluster tidak ada, GKE akan menimpa tag jaringan yang ada untuk node pool
GKE akan menimpa tag yang ada untuk node pool terlepas dari apakah ada tag tingkat cluster
Anda memperbarui tag atau tag jaringan untuk seluruh cluster GKE akan mengganti tag jaringan untuk node pool yang disediakan secara otomatis baru dan yang sudah ada di cluster. GKE menerapkan tag level cluster baru ke node pool baru yang disediakan otomatis. Node pool yang disediakan otomatis yang sudah ada mempertahankan tag yang dimilikinya sebelum update.

Langkah berikutnya