Halaman ini menunjukkan cara menyelesaikan masalah terkait penerimaan Config Sync webhook. Untuk mempelajari webhook lebih lanjut, lihat Mencegah penyimpangan konfigurasi.
Memecahkan masalah error KNV 2009
Bagian berikut membantu Anda mengatasi error KNV2009
.
Koneksi webhook akses ditolak ditolak
Jika Anda mengaktifkan perlindungan penyimpangan, Anda mungkin menerima error berikut saat rekonsiliasi mencoba menerapkan konfigurasi ke cluster:
KNV2009: Internal error occurred: failed calling webhook "v1.admission-webhook.configsync.gke.io": Post "https://admission-webhook.config-management-system.svc:8676/admission-webhook?timeout=3s": dial tcp 10.92.2.14:8676: connect: connection refused
Error ini berarti webhook penerimaan belum siap atau telah menjadi tidak sehat. Ini biasanya merupakan error sementara yang mungkin Anda lihat saat melakukan bootstrap Sinkronisasi Konfigurasi.
Jika masalah berlanjut, jelaskan Deployment webhook penerimaan untuk melihat apakah Pod-nya dapat dijadwalkan dan responsif:
kubectl describe deploy admission-webhook -n config-management-system
kubectl get pods -n config-management-system -l app=admission-webhook
Deployment dengan Pod yang responsif memiliki output yang mirip dengan berikut ini:
Replicas: 2 desired | 2 updated | 2 total | 2 available | 0 unavailable
...
Conditions:
Type Status Reason
---- ------ ------
Available True MinimumReplicasAvailable
Progressing True NewReplicaSetAvailable
...
Waktu tunggu I/O permintaan webhook masuk
Jika Anda menerima pesan error yang serupa dengan berikut ini saat rekonsiliasi mencoba untuk
menerapkan konfigurasi ke cluster, port webhook penerimaan 8676
mungkin
diblokir oleh firewall ke jaringan bidang kontrol:
KNV2009: Internal error occurred: failed calling webhook "v1.admission-webhook.configsync.gke.io": Post https://admission-webhook.config-management-system.svc:8676/admission-webhook?timeout=3s: dial tcp 10.1.1.186:8676: i/o timeout
Untuk mengatasi masalah ini, tambahkan aturan firewall
untuk mengizinkan port 8676
, yang digunakan webhook penerimaan Config Sync untuk
pencegahan penyimpangan. Port 8676
harus terbuka dari bidang kontrol ke
node karena bidang kontrol harus dapat menjangkau backend webhook
pada node cluster.
Webhook akses menolak permintaan
Jika Anda menerima error berikut saat mencoba menerapkan perubahan pada kolom yang dikelola oleh Config Sync, maka Anda mungkin telah membuat ubah:
error: OBJECT could not be patched: admission webhook "v1.admission-webhook.configsync.gke.io"
denied the request: fields managed by Config Sync can not be modified
Jika Anda mengaktifkan perlindungan penyimpangan, saat Anda mendeklarasikan kolom dalam konfigurasi dan jika repositori Anda disinkronkan ke cluster, Config Sync akan mengelola kolom tersebut. Apa saja yang Anda coba lakukan pada bidang itu adalah perubahan yang berkonflik.
Misalnya, jika Anda memiliki konfigurasi Deployment di repositori
dengan label environment:prod
dan Anda mencoba mengubahnya
label tersebut ke environment:dev
dalam cluster Anda, akan ada konflik
berubah dan Anda akan menerima pesan {i>error<i} sebelumnya. Namun, jika Anda menambahkan
label baru (misalnya, tier:frontend
) ke Deployment, tidak akan ada
konflik.
Jika Anda ingin Config Sync mengabaikan perubahan apa pun pada sebuah objek, Anda bisa menambahkan atribut yang dijelaskan di Mengabaikan mutasi objek.
Gagal menghapus semua jenis resource
Namespace yang terjebak dalam fase Terminating
memiliki kondisi berikut:
message: 'Failed to delete all resource types, 1 remaining: admission webhook
"v1.admission-webhook.configsync.gke.io" denied the request: system:serviceaccount:kube-system:namespace-controller
is not authorized to delete managed resource "_configmap_bookstore_cm1"'
reason: ContentDeletionFailed
status: "True"
type: NamespaceDeletionContentFailure
Error ini terjadi saat Anda mencoba menghapus objek Namespace
dari root
Namun, beberapa objek dalam namespace masih dikelola secara aktif oleh
rekonsiliasi namespace. Ketika namespace dihapus, namespace
pengontrol,
yang akun layanannya
system:serviceaccount:kube-system:namespace-controller
, akan mencoba menghapus
semua objek dalam namespace itu. Namun, izin masuk Config Sync
webhook hanya mengizinkan root atau webhook
rekonsiliasi namespace untuk menghapus objek ini, dan menolak namespace
pengontrol untuk menghapus objek ini.
Untuk mengatasi masalah ini, hapus webhook penerimaan Config Sync:
kubectl delete deployment.apps/admission-webhook -n config-management-system
ConfigManagement Operator membuat ulang webhook penerimaan Config Sync.
Jika solusi ini tidak berhasil, Anda mungkin perlu menginstal ulang Config Sync.
Agar tidak mengalami error lagi, hapus repositori namespace sebelum menghapus namespace.
Langkah selanjutnya
- Jika Anda masih mengalami masalah, periksa apakah adalah masalah umum.