Memecahkan masalah webhook penerimaan

Halaman ini menunjukkan cara menyelesaikan masalah terkait webhook akses Config Sync. Untuk mempelajari webhook lebih lanjut, lihat Mencegah drift konfigurasi.

Memecahkan masalah error KNV 2009

Bagian berikut membantu Anda menyelesaikan error KNV2009.

Koneksi webhook pendaftaran ditolak

Jika perlindungan drift diaktifkan, Anda mungkin menerima error berikut saat reconciler 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 izin belum siap atau telah menjadi tidak sehat. Error ini biasanya bersifat sementara yang mungkin Anda lihat saat melakukan bootstrap Config Sync.

Jika masalah berlanjut, deskripsikan Deployment webhook keanggotaan untuk melihat apakah Pod-nya dapat dijadwalkan dan sehat:

kubectl describe deploy admission-webhook -n config-management-system

kubectl get pods -n config-management-system -l app=admission-webhook

Deployment dengan Pod yang sehat 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 8676 mungkin diblokir oleh firewall ke jaringan panel 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 izin Config Sync untuk mencegah drift. Port 8676 harus terbuka dari bidang kontrol ke node karena bidang kontrol harus dapat menjangkau backend webhook di node cluster.

Webhook izin menolak permintaan

Jika Anda menerima error berikut saat mencoba menerapkan perubahan pada kolom yang dikelola Config Sync, Anda mungkin telah membuat 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 Anda mengaktifkan perlindungan drift, saat Anda mendeklarasikan kolom dalam konfigurasi dan repositori Anda disinkronkan ke cluster, Config Sync akan mengelola kolom tersebut. Setiap perubahan yang Anda coba buat pada kolom tersebut adalah perubahan yang bertentangan.

Misalnya, jika Anda memiliki konfigurasi Deployment di repositori dengan label environment:prod dan 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 di Mengabaikan mutasi objek.

Gagal menghapus semua jenis resource

Namespace yang macet 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 dalam namespace masih dikelola secara aktif oleh merekonsiliator 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 izin Config Sync hanya mengizinkan root atau penyertai namespace untuk menghapus objek ini, dan menolak pengontrol namespace untuk menghapus objek ini.

Untuk mengatasi masalah ini, hapus webhook izin Config Sync:

kubectl delete deployment.apps/admission-webhook -n config-management-system

Operator ConfigManagement membuat ulang webhook akses Config Sync.

Jika solusi ini tidak berhasil, Anda mungkin perlu menginstal ulang Config Sync.

Untuk menghindari error lagi, hapus repositori namespace sebelum menghapus namespace.

Langkah selanjutnya

  • Jika Anda masih mengalami masalah, periksa apakah masalah Anda adalah masalah umum.