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, Anda dapat menghentikan Pengontrol Kebijakan saat menyelidiki masalah tersebut.
Memeriksa metrik
Memeriksa metrik Pengontrol Kebijakan dapat membantu Anda mendiagnosis masalah terkait Pengontrol Kebijakan.
Memverifikasi penginstalan
Anda dapat memverifikasi apakah Pengontrol Kebijakan dan library template batasan berhasil diinstal dengan sukses.
Melepaskan Pengontrol Kebijakan
Dalam kasus yang jarang terjadi, Anda mungkin perlu melepaskan Pengontrol Kebijakan dari cluster.
Tindakan ini akan sepenuhnya menonaktifkan pengelolaan Pengontrol Kebijakan. Coba
hentikan Pengontrol Kebijakan untuk sementara
guna melihat apakah Anda dapat menyelesaikan masalah sebelum menggunakan perintah detach.
Lepaskan Pengontrol Kebijakan di seluruh fleet Anda:
gcloud container fleet policycontroller detachLampirkan kembali Pengontrol Kebijakan:
gcloud container fleet policycontroller enable
Error saat membuat template batasan
Jika Anda melihat error yang menyebutkan disallowed ref, pastikan Anda mengaktifkan batasan referensial. Misalnya, jika Anda menggunakan data.inventory dalam
template batasan tanpa mengaktifkan batasan referensial
terlebih dahulu, errornya 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 menduga atau mengetahui bahwa batasan Anda tidak diterapkan.
Memeriksa apakah batasan Anda diterapkan
Jika Anda khawatir batasan Anda tidak diterapkan, Anda dapat memeriksa spec.status batasan dan template batasan. Untuk memeriksa status, jalankan perintah berikut:
kubectl describe CONSTRAINT_TEMPLATE_NAME CONSTRAINT_NAME
Ganti kode berikut:
CONSTRAINT_TEMPLATE_NAME: nama template batasan yang ingin Anda periksa. Misalnya,K8sNoExternalServices.CONSTRAINT_NAME:Namebatasan yang ingin Anda periksa.Jika diperlukan, jalankan
kubectl get constraintuntuk melihat template batasan dan batasan mana yang diinstal di sistem Anda.
Dalam output perintah kubectl describe, perhatikan 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 (yang merupakan kasus dalam contoh sebelumnya), kemungkinan batasan Anda diterapkan. Namun, jika nilai ini cocok, tetapi Anda
masih mengalami masalah dengan penerapan batasan, lihat bagian
berikut untuk mendapatkan tips. Jika Anda melihat hanya ada beberapa nilai yang cocok, atau beberapa Pod tidak tercantum, status batasan Anda tidak diketahui. Batasan mungkin diterapkan secara tidak konsisten di seluruh Pod Pengontrol Kebijakan, atau tidak diterapkan sama sekali. Jika tidak ada nilai yang cocok, 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, bukan untuk
permintaan masuk), tetapi batasan masih tidak diterapkan, kemungkinan masalahnya
terkait dengan webhook. Webhook mungkin mengalami salah satu masalah berikut:
- Pod webhook Pengontrol Kebijakan mungkin tidak beroperasi. Teknik debug Kubernetes dapat membantu Anda menyelesaikan masalah dengan Pod webhook.
- Mungkin 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 referensial, pastikan resource yang diperlukan di-cache. Untuk mengetahui detail tentang cara meng-cache resource, lihat Mengonfigurasi Pengontrol Kebijakan untuk batasan referensial.
Memeriksa sintaksis template batasan
Jika Anda menulis template batasan sendiri, dan template tersebut 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 template yang ingin Anda selidiki. Error harus dilaporkan di kolom status.
Langkah berikutnya
Jika Anda tidak dapat menemukan solusi untuk masalah Anda dalam dokumentasi, lihat Mendapatkan dukungan untuk mendapatkan bantuan lebih lanjut, termasuk saran tentang topik berikut:
Membuka kasus dukungan dengan menghubungi Cloud Customer Care
Membuka bug atau permintaan fitur menggunakan issue tracker publik atau membuka bug publik untuk Gatekeeper di GitHub. Google Cloud