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
.
Lepaskan Pengontrol Kebijakan di seluruh perangkat Anda:
gcloud container fleet policycontroller detach
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
- Jika Anda memerlukan bantuan tambahan, hubungi Dukungan Google Cloud.