Halaman ini menunjukkan cara menyelesaikan masalah dengan webhook penerimaan Config Sync. Untuk mempelajari webhook lebih lanjut, lihat Mencegah penyimpangan konfigurasi.
Memecahkan masalah error KNV 2009
Bagian berikut membantu Anda menyelesaikan error KNV2009.
Koneksi webhook penerimaan ditolak
Jika perlindungan penyimpangan diaktifkan, Anda mungkin menerima error berikut saat rekonsiliator 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 menjadi tidak responsif. Biasanya, error ini bersifat sementara yang mungkin Anda lihat saat melakukan bootstrapping Config Sync.
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 penerimaan habis
Jika Anda menerima error yang mirip dengan berikut saat rekonsiliator mencoba 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 dibuka dari bidang kontrol ke node karena bidang kontrol harus dapat menjangkau backend webhook di node cluster.
Webhook penerimaan menolak permintaan
Jika Anda menerima error berikut saat mencoba menerapkan perubahan pada kolom yang dikelola Config Sync, Anda mungkin telah melakukan perubahan yang bertentangan:
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 perlindungan penyimpangan diaktifkan, saat Anda mendeklarasikan kolom dalam konfigurasi dan repositori Anda disinkronkan ke cluster, Config Sync akan mengelola kolom tersebut. Setiap perubahan yang Anda coba lakukan pada kolom tersebut adalah perubahan yang bertentangan.
Misalnya, jika Anda memiliki konfigurasi Deployment di repositori dengan label environment:prod dan Anda mencoba mengubah label tersebut menjadi environment:dev di cluster, akan ada perubahan yang bertentangan dan Anda akan menerima pesan error 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 objek, Anda dapat menambahkan anotasi yang dijelaskan dalam 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 repositori root, tetapi beberapa objek di bawah namespace masih dikelola secara aktif oleh rekonsiliator namespace. Saat namespace dihapus, pengontrol namespace,
yang akun layanannya adalah
system:serviceaccount:kube-system:namespace-controller, akan mencoba menghapus
semua objek di namespace tersebut. Namun, webhook
penerimaan Config Sync hanya mengizinkan rekonsiliator root atau
namespace untuk menghapus objek ini, dan menolak pengontrol
namespace untuk menghapus objek ini.
Untuk mengatasi masalah ini, hapus webhook penerimaan Config Sync:
kubectl delete deployment.apps/admission-webhook -n config-management-system
Operator ConfigManagement membuat ulang webhook penerimaan Config Sync.
Jika solusi ini tidak berhasil, Anda mungkin perlu menginstal ulang Config Sync.
Untuk menghindari error ini lagi, hapus repositori namespace sebelum menghapus namespace.
Langkah berikutnya
Jika Anda masih mengalami masalah, periksa apakah masalah Anda adalah masalah yang diketahui.
Jika Anda tidak dapat menemukan solusi untuk masalah Anda dalam dokumentasi, lihat Mendapatkan dukungan untuk bantuan lebih lanjut, termasuk saran tentang topik berikut:
- Membuka kasus dukungan dengan menghubungi Cloud Customer Care.
- Mendapatkan dukungan dari komunitas dengan
mengajukan pertanyaan di
StackOverflow.
Jika Anda menggunakan kpt atau Kustomize, gunakan tag
kptataukustomizeuntuk menelusuri masalah serupa. - Membuka bug atau permintaan fitur menggunakan issue tracker publik di GitHub.