Memecahkan masalah Pengontrol Kebijakan

Halaman ini menunjukkan cara menyelesaikan masalah terkait Pengontrol Kebijakan.

Tips umum

Bagian berikut memberikan saran umum untuk menyelesaikan masalah terkait Pengontrol Kebijakan.

Menghentikan Pengontrol Kebijakan

Jika Pengontrol Kebijakan menyebabkan masalah di cluster, Anda dapat menghentikan Pengontrol Kebijakan selagi menyelidiki masalah tersebut.

Memeriksa metrik

Memeriksa metrik Pengontrol Kebijakan dapat membantu Anda mendiagnosis masalah pada Pengontrol Kebijakan.

Memverifikasi penginstalan

Anda dapat memverifikasi apakah Pengontrol Kebijakan dan library template batasan berhasil diinstal.

Lepaskan Pengontrol Kebijakan

Dalam kasus yang jarang terjadi, Anda mungkin perlu melepaskan Pengontrol Kebijakan dari cluster. Ini sepenuhnya menonaktifkan pengelolaan Pengontrol Kebijakan. Coba hentikan Pengontrol Kebijakan untuk sementara guna melihat apakah Anda dapat menyelesaikan masalah sebelum menggunakan perintah detach.

  1. Lepaskan Pengontrol Kebijakan di seluruh fleet Anda:

    gcloud container fleet policycontroller detach
    
  2. Lampirkan Kembali Pengontrol Kebijakan:

    gcloud container fleet policycontroller enable
    

Terjadi error saat membuat template batasan

Jika Anda melihat error yang menyebutkan disallowed ref, pastikan Anda telah mengaktifkan batasan referensial. Misalnya, jika Anda menggunakan data.inventory dalam template batasan tanpa mengaktifkan batasan referensi terlebih dahulu, error-nya akan mirip dengan berikut ini:

admission webhook "validation.gatekeeper.sh" denied the request: check refs failed on module {templates["admission.k8s.gatekeeper.sh"]["MyTemplate"]}: disallowed ref data.inventory...

Batasan tidak diterapkan

Bagian berikut memberikan panduan pemecahan masalah jika Anda mencurigai atau mengetahui batasan Anda tidak diterapkan.

Memeriksa apakah batasan Anda diterapkan

Jika khawatir batasan tidak diterapkan, Anda dapat memeriksa spec.status batasan dan template batasan. Untuk memeriksa statusnya, jalankan perintah berikut:

kubectl describe CONSTRAINT_TEMPLATE_NAME CONSTRAINT_NAME

Ganti kode berikut:

  • CONSTRAINT_TEMPLATE_NAME: nama template batasan yang ingin Anda periksa. Contoh, K8sNoExternalServices.
  • CONSTRAINT_NAME: Name batasan yang ingin Anda periksa.

    Jika diperlukan, jalankan kubectl get constraint untuk melihat template dan batasan batasan mana yang diinstal di sistem Anda.

Dalam output perintah kubectl describe, catat nilai di kolom metadata.generation dan status.byPod.observedGeneration. Dalam contoh berikut, nilai ini dicetak tebal:

Name:         no-internet-services
Namespace:
API Version:  constraints.gatekeeper.sh/v1beta1
Kind:         K8sNoExternalServices
Metadata:
  Creation Timestamp:  2021-12-03T19:00:06Z
  Generation:          1
  Managed Fields:
    API Version:  constraints.gatekeeper.sh/v1beta1
    Fields Type:  FieldsV1
    fieldsV1:
      f:metadata:
        f:annotations:
          f:config.k8s.io/owning-inventory:
          f:configmanagement.gke.io/cluster-name:
          f:configmanagement.gke.io/managed:
          f:configmanagement.gke.io/source-path:
          f:configmanagement.gke.io/token:
          f:configsync.gke.io/declared-fields:
          f:configsync.gke.io/git-context:
          f:configsync.gke.io/manager:
          f:configsync.gke.io/resource-id:
        f:labels:
          f:app.kubernetes.io/managed-by:
          f:configsync.gke.io/declared-version:
      f:spec:
        f:parameters:
          f:internalCIDRs:
    Manager:      configsync.gke.io
    Operation:    Apply
    Time:         2022-02-15T17:13:20Z
    API Version:  constraints.gatekeeper.sh/v1beta1
    Fields Type:  FieldsV1
    fieldsV1:
      f:status:
    Manager:         gatekeeper
    Operation:       Update
    Time:            2021-12-03T19:00:08Z
  Resource Version:  41460953
  UID:               ac80849d-a644-4c5c-8787-f73e90b2c988
Spec:
  Parameters:
    Internal CID Rs:
Status:
  Audit Timestamp:  2022-02-15T17:21:51Z
  By Pod:
    Constraint UID:       ac80849d-a644-4c5c-8787-f73e90b2c988
    Enforced:             true
    Id:                   gatekeeper-audit-5d4d474f95-746x4
    Observed Generation:  1
    Operations:
      audit
      status
    Constraint UID:       ac80849d-a644-4c5c-8787-f73e90b2c988
    Enforced:             true
    Id:                   gatekeeper-controller-manager-76d777ddb8-g24dh
    Observed Generation:  1
    Operations:
      webhook
  Total Violations:  0
Events:              <none>

Jika Anda melihat setiap Pod Pengontrol Kebijakan dengan nilai observedGeneration yang sama dengan nilai metadata.generation (seperti yang terjadi dalam contoh sebelumnya), batasan Anda kemungkinan akan diterapkan. Namun, jika nilai ini cocok, tetapi Anda masih mengalami masalah dengan penerapan batasan, lihat bagian berikut untuk mendapatkan tips. Jika Anda melihat bahwa hanya ada beberapa nilai yang cocok, atau beberapa Pod tidak tercantum, status batasan Anda tidak akan diketahui. Batasan ini mungkin diterapkan secara tidak konsisten di seluruh Pod Pengontrol Kebijakan, atau tidak diterapkan sama sekali. Jika tidak ada nilai yang cocok, berarti batasan Anda tidak diterapkan.

Batasan tidak diterapkan, tetapi hasil audit dilaporkan

Jika pemeriksaan observedGeneration yang dijelaskan di bagian sebelumnya memiliki nilai yang cocok dan ada hasil audit yang dilaporkan pada batasan yang menunjukkan pelanggaran yang diharapkan (untuk objek yang sudah ada sebelumnya, bukan untuk permintaan masuk), tetapi batasan tersebut masih belum diterapkan, berarti masalahnya mungkin terjadi pada webhook. Webhook mungkin mengalami salah satu masalah berikut:

  • Pod webhook Pengontrol Kebijakan mungkin tidak beroperasi. Teknik proses debug Kubernetes dapat membantu Anda menyelesaikan masalah terkait Pod webhook.
  • Kemungkinan ada firewall antara server API dan layanan webhook. Lihat dokumentasi penyedia firewall Anda untuk mengetahui detail tentang cara memperbaiki firewall.

Batasan referensial tidak diterapkan

Jika batasan Anda adalah batasan referensi, pastikan resource yang diperlukan telah di-cache. Untuk mengetahui detail cara meng-cache resource, lihat Mengonfigurasi Pengontrol Kebijakan untuk batasan referensi.

Memeriksa sintaksis template batasan

Jika Anda menulis template batasan sendiri, dan template ini tidak diterapkan, mungkin terjadi error dalam sintaksis template batasan.

Anda dapat meninjau template menggunakan perintah berikut:

kubectl describe constrainttemplate CONSTRAINT_TEMPLATE_NAME

Ganti CONSTRAINT_TEMPLATE_NAME dengan nama template yang ingin Anda selidiki. Error harus dilaporkan dalam kolom status.

Langkah selanjutnya