Halaman ini menunjukkan cara menyelesaikan masalah terkait webhook yang bermasalah atau tidak aman di Google Distributed Cloud.
Jenis webhook bermasalah
Webhook penerimaan, atau webhook di Kubernetes, adalah jenis
pengontrol penerimaan
yang dapat digunakan di cluster Kubernetes untuk memvalidasi atau mengubah permintaan ke
bidang kontrol sebelum permintaan dipertahankan. Umumnya aplikasi pihak ketiga
menggunakan webhook yang beroperasi di resource dan
namespace yang penting bagi sistem. Webhook yang tidak dikonfigurasi dengan benar dapat memengaruhi performa dan keandalan
bidang kontrol. Misalnya, webhook yang tidak dikonfigurasi dengan benar
yang dibuat oleh aplikasi pihak ketiga dapat mencegah Google Distributed Cloud membuat dan mengubah resource di namespace kube-system terkelola, yang dapat menurunkan fungsi cluster.
Webhook bermasalah mencakup jenis berikut:
- Webhook yang beroperasi, tetapi tidak memiliki endpoint yang tersedia. Ikuti petunjuk untuk memeriksa webhook tanpa endpoint yang tersedia.
Webhook yang dianggap tidak aman karena beroperasi pada resource dan namespace yang penting bagi sistem.
Webhook berikut dianggap tidak aman:
- Webhook yang menangkap Pod dan lease di namespace
kube-system. - Webhook yang menangkap lease di namespace
kube-node-lease. - Webhook yang menangkap
Nodes,TokenReviews,SubjectAccessReviews, danCertificateSigningRequestsresource.
Ikuti petunjuk untuk memeriksa webhook yang dianggap tidak aman.
- Webhook yang menangkap Pod dan lease di namespace
Webhook yang tidak memiliki endpoint yang tersedia
Jika webhook tidak memiliki endpoint yang tersedia, Service yang mendukung endpoint webhook memiliki satu atau beberapa Pod yang tidak berjalan. Agar endpoint webhook tersedia, ikuti petunjuk untuk menemukan dan memecahkan masalah Pod Service yang mendukung endpoint webhook ini:
Cari Pod aktif untuk Service yang terkait dengan webhook. Jalankan perintah berikut untuk menjelaskan Service:
kubectl describe svc SERVICE_NAME -n SERVICE_NAMESPACEGanti kode berikut:
- SERVICE_NAME dengan nama Layanan.
- SERVICE_NAMESPACE dengan nama namespace.
Jika Anda tidak dapat menemukan nama Service yang tercantum di webhook, endpoint yang tidak tersedia mungkin disebabkan oleh ketidakcocokan antara nama yang tercantum dalam konfigurasi dan nama Service yang sebenarnya. Untuk memperbaiki ketersediaan endpoint, perbarui nama Service di konfigurasi webhook agar cocok dengan objek Service yang benar.
Periksa Pod aktif untuk Service ini. Identifikasi Pod mana yang tidak berjalan dengan mencantumkan Deployment:
kubectl get deployment -n SERVICE_NAMESPACEAtau, jalankan perintah berikut untuk mencantumkan Pod:
kubectl get pods -n SERVICE_NAMESPACE -o wideUntuk setiap Pod yang tidak berjalan, periksa log Pod untuk mengetahui alasan Pod tidak berjalan.
Webhook yang dianggap tidak aman
Jika webhook menangkap resource di namespace yang dikelola sistem, sebaiknya Anda memperbarui webhook agar tidak menangkap resource ini.
Periksa konfigurasi webhook. Jalankan perintah
kubectlberikut untuk mendapatkan konfigurasi webhook:kubectl get validatingwebhookconfigurations CONFIGURATION_NAME -o yamlGanti CONFIGURATION_NAME dengan nama konfigurasi webhook.
Jika perintah ini tidak menampilkan apa pun, jalankan kembali perintah tersebut, dengan mengganti
validatingwebhookconfigurationsdenganmutatingwebhookconfigurations.Di bagian
webhooksoutput, satu atau beberapa webhook tercantum.Edit konfigurasi, bergantung pada alasan webhook dianggap tidak aman:
Mengecualikan namespace kube-system dan kube-node-lease
Webhook dianggap tidak aman jika
scopeadalah*, atau jika cakupannya adalahNamespaceddan salah satu kondisi berikut terpenuhi:Kondisi
operatoradalahNotIndanvaluesmenghilangkankube-systemdankube-node-lease, seperti dalam contoh berikut:webhooks: - admissionReviewVersions: ... namespaceSelector: matchExpressions: - key: kubernetes.io/metadata.name operator: NotIn values: - blue-system # add 'kube-system' and 'kube-node-lease' if `NotIn` objectSelector: {} rules: - apiGroups: ... scope: '*' # 'Namespaced' sideEffects: None timeoutSeconds: 3Pastikan
scopeditetapkan keNamespaced, bukan*, sehingga webhook hanya beroperasi di namespace tertentu. JikaoperatoradalahNotIn, pastikankube-system, dankube-node-leasedisertakan dalamvalues.Kondisi
operatoradalahIndanvaluesmenyertakankube-systemdankube-node-lease, seperti dalam contoh berikut:namespaceSelector: matchExpressions: - key: kubernetes.io/metadata.name operator: In values: - blue-system - kube-system # remove as operator is `In` - kube-node-lease # remove as operator is `In`Pastikan
scopeditetapkan keNamespaced, bukan*, sehingga webhook hanya beroperasi di namespace tertentu. JikaoperatoradalahIn, pastikankube-systemdankube-node-leasetidak disertakan dalamvalues.
Mengecualikan resource yang cocok
Webhook juga dianggap tidak aman jika
nodes,tokenreviews,subjectaccessreviews, ataucertificatesigningrequeststercantum di bagian resource, seperti dalam contoh berikut:- admissionReviewVersions: ... resources: - 'pods' # keep, remove everything else - 'nodes' - 'tokenreviews' - 'subjectacessreviews' - 'certificatesigningrequests' scope: '*' sideEffects: None timeoutSeconds: 3Hapus
nodes,tokenreviews,subjectaccessreviews, dancertificatesigningrequestsdari bagian resource.
Langkah berikutnya
Jika Anda memerlukan bantuan tambahan, hubungi Layanan Pelanggan Cloud.
Anda juga dapat melihat bagian Mendapatkan dukungan untuk mengetahui informasi selengkapnya tentang sumber dukungan, termasuk:
- Persyaratan untuk membuka kasus dukungan.
- Alat untuk membantu Anda memecahkan masalah, seperti log dan metrik.
- Komponen yang didukung, versi, dan fitur Google Distributed Cloud untuk VMware (khusus software).