Memecahkan masalah GKE pada webhook Azure
Halaman ini menunjukkan cara menyelesaikan masalah terkait webhook bermasalah atau tidak aman di GKE di Azure.
Jika Anda memerlukan bantuan lainnya, hubungi Cloud Customer Care.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 GKE di Azure membuat dan mengubah resource dalam 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 di resource dan namespace penting sistem.
Webhook berikut dianggap tidak aman:
- Webhook yang mencegat Pod dan lease di namespace
kube-system
. - Webhook yang mencegat lease di namespace
kube-node-lease
. - Webhook yang mencegat resource
Nodes
,TokenReviews
,SubjectAccessReviews
, danCertificateSigningRequests
.
Ikuti petunjuk untuk memeriksa webhook yang dianggap tidak aman.
- Webhook yang mencegat Pod dan lease di namespace
Webhook yang tidak memiliki endpoint yang tersedia
Jika webhook tidak memiliki endpoint yang tersedia, Layanan yang mendukung endpoint webhook memiliki satu atau beberapa Pod yang tidak berjalan. Untuk menyediakan endpoint webhook, ikuti petunjuk untuk menemukan dan memecahkan masalah Pod dari Layanan yang mendukung endpoint webhook ini:
Menemukan Pod penayangan untuk Service yang terkait dengan webhook. Jalankan perintah berikut untuk mendeskripsikan Layanan:
kubectl describe svc SERVICE_NAME -n SERVICE_NAMESPACE
Ganti kode berikut:
- SERVICE_NAME dengan nama Layanan.
- SERVICE_NAMESPACE dengan nama namespace.
Jika Anda tidak dapat menemukan nama Layanan yang tercantum di webhook, endpoint yang tidak tersedia mungkin disebabkan oleh ketidakcocokan antara nama yang tercantum dalam konfigurasi dan nama Layanan yang sebenarnya. Untuk memperbaiki ketersediaan endpoint, perbarui nama Service di konfigurasi webhook agar cocok dengan objek Service yang benar.
Periksa Pod yang aktif untuk Service ini. Identifikasi Pod mana yang tidak berjalan dengan mencantumkan Deployment:
kubectl get deployment -n SERVICE_NAMESPACE
Atau, jalankan perintah berikut untuk menampilkan Pod:
kubectl get pods -n SERVICE_NAMESPACE -o wide
Untuk Pod yang tidak berjalan, periksa log Pod untuk mengetahui alasan Pod tidak berjalan.
Webhook yang dianggap tidak aman
Jika webhook mencegat resource apa pun di namespace yang dikelola sistem, sebaiknya perbarui webhook agar tidak disadap resource tersebut.
Periksa konfigurasi webhook. Jalankan perintah
kubectl
berikut untuk mendapatkan konfigurasi webhook:kubectl get validatingwebhookconfigurations CONFIGURATION_NAME -o yaml
Ganti CONFIGURATION_NAME dengan nama konfigurasi webhook.
Jika perintah ini tidak menampilkan apa pun, jalankan kembali perintah tersebut, dengan mengganti
validatingwebhookconfigurations
denganmutatingwebhookconfigurations
.Di bagian
webhooks
output, satu atau beberapa webhook dicantumkan.Edit konfigurasi, bergantung pada alasan webhook dianggap tidak aman:
Mengecualikan namespace kube-system dan kube-node-lease
Webhook dianggap tidak aman jika
scope
adalah*
, atau jika cakupannya adalahNamespaced
dan salah satu kondisi berikut berlaku:Kondisi
operator
adalahNotIn
danvalues
menghilangkankube-system
dankube-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: 3
Pastikan
scope
ditetapkan keNamespaced
, bukan*
, sehingga webhook hanya beroperasi di namespace tertentu. Jikaoperator
adalahNotIn
, pastikankube-system
, dankube-node-lease
disertakan dalamvalues
.Kondisi
operator
adalahIn
danvalues
menyertakankube-system
dankube-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
scope
ditetapkan keNamespaced
, bukan*
, sehingga webhook hanya beroperasi di namespace tertentu. Jikaoperator
adalahIn
, pastikankube-system
dankube-node-lease
tidak disertakan dalamvalues
.
Mengecualikan resource yang cocok
Webhook juga dianggap tidak aman jika
nodes
,tokenreviews
,subjectaccessreviews
, ataucertificatesigningrequests
tercantum di bagian resource, seperti dalam contoh berikut:- admissionReviewVersions: ... resources: - 'pods' # keep, remove everything else - 'nodes' - 'tokenreviews' - 'subjectacessreviews' - 'certificatesigningrequests' scope: '*' sideEffects: None timeoutSeconds: 3
Hapus
nodes
,tokenreviews
,subjectaccessreviews
, dancertificatesigningrequests
dari bagian resource.