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 saat Anda menyelidiki masalah tersebut.

Memeriksa metrik

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

Memverifikasi penginstalan

Anda dapat memverifikasi jika Pengontrol Kebijakan dan library template batasan diinstal memulai proyek.

Melepaskan Pengontrol Kebijakan

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

  1. Lepaskan Pengontrol Kebijakan di seluruh perangkat Anda:

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

    gcloud container fleet policycontroller enable
    

Terjadi error saat membuat template batasan

Jika melihat error yang menyebutkan disallowed ref, konfirmasi bahwa Anda telah mengaktifkan batasan referensial. Misalnya, jika Anda menggunakan data.inventory di template batasan tanpa mengaktifkan batasan referensial pertama, error-nya 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 Anda tidak diterapkan, Anda dapat memeriksa spec.status batasan Anda dan template batasan. Untuk memeriksa status, jalankan perintah berikut:

kubectl describe CONSTRAINT_TEMPLATE_NAME CONSTRAINT_NAME

Ganti kode berikut:

  • CONSTRAINT_TEMPLATE_NAME: nama batasan {i>template<i} yang ingin Anda periksa. Contoh, K8sNoExternalServices.
  • CONSTRAINT_NAME: Name batasan yang Anda inginkan untuk diperiksa.

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

Pada output perintah kubectl describe, catat nilai di bagian Kolom metadata.generation dan status.byPod.observedGeneration. Di kolom 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 (yang terjadi di contoh sebelumnya), maka batasan Anda kemungkinan besar diterapkan. Namun, jika nilai ini cocok, tetapi Anda masih mengalami masalah dengan batasan Anda diterapkan, lihat bagian berikut untuk mendapatkan tips. Jika Anda memperhatikan bahwa ada hanya beberapa nilai yang cocok, atau beberapa Pod tidak tercantum, maka status batasan tidak diketahui. Batasan ini mungkin diterapkan secara tidak konsisten di Pod Pengontrol Kebijakan, atau tidak diterapkan sama sekali. Jika tidak ada nilai yang cocok, maka batasan Anda tidak diterapkan.

Batasan tidak diterapkan, tetapi hasil audit dilaporkan

Jika pemeriksaan observedGeneration yang dijelaskan di bagian sebelumnya memiliki nilai yang sesuai 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, masalahnya adalah dilakukan dengan webhook. Webhook mungkin mengalami salah satu masalah berikut:

  • Pod webhook Pengontrol Kebijakan mungkin tidak beroperasi. Teknik proses debug Kubernetes dapat membantu Anda menyelesaikan masalah dengan Pod webhook.
  • Mungkin ada firewall antara server API dan webhook layanan. Lihat dokumentasi penyedia {i>firewall<i} Anda untuk detail tentang cara untuk memperbaiki firewall.

Batasan referensial tidak diterapkan

Jika kendala Anda adalah batasan referensial, memastikan resource yang diperlukan sudah disimpan di cache. Untuk mengetahui detail tentang cara meng-cache melihat Mengonfigurasi Pengontrol Kebijakan untuk batasan referensial.

Memeriksa sintaksis template batasan

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

Anda dapat meninjau template menggunakan perintah berikut:

kubectl describe constrainttemplate CONSTRAINT_TEMPLATE_NAME

Ganti CONSTRAINT_TEMPLATE_NAME dengan nama {i>template<i} yang ingin Anda selidiki. Error harus dilaporkan dalam Kolom status.

Langkah selanjutnya