Menyelesaikan masalah proxy/webhook file bantuan di Cloud Service Mesh
Bagian ini menjelaskan masalah umum Cloud Service Mesh dan cara mengatasinya. Jika Anda memerlukan bantuan tambahan, lihat Mendapatkan dukungan.
Cloud Service Mesh berisi dua webhook:
- Webhook yang memvalidasi memastikan konfigurasi Istio yang diterapkan valid.
- Webhook yang bermutasi menetapkan injeksi file bantuan otomatis pada pod baru.
Masalah konfigurasi di salah satu webhook ini dapat menyebabkan pod baru gagal
memulai, atau kubectl apply
menghasilkan pesan error.
Masalah injeksi file bantuan
Injeksi file bantuan tidak berfungsi dengan benar jika Anda melihat salah satu dari hal berikut:
- pod yang menjadwalkan tanpa file bantuan
- pod yang seharusnya diinjeksikan file bantuan tidak pernah muncul saat menggunakan
kubectl get pods
, tetapi replika terkait yang ditetapkan darikubectl get replicaset
ada.
Gunakan langkah-langkah berikut untuk memecahkan masalah injeksi file bantuan.
Pastikan namespace atau pod Anda memiliki label injeksi yang benar.
Jika Anda menjalankan Istio revisi tunggal (default), verifikasi bahwa dengan spesifikasi pod atau namespace memiliki label istio-injection=enabled.
Jika Anda menjalankan Istio beberapa revisi (untuk migrasi tanpa periode nonaktif, beberapa bidang kontrol, dll.), pastikan spesifikasi namespace atau pod memiliki label
istio.io/rev=REVISION
yang sesuai, dengan REVISION adalah nomor revisi Cloud Service Mesh padaistiod
yang sesuai dengan versi Cloud Service Mesh yang Anda pilih. Untuk informasi selengkapnya tentang label revisi, lihat Memasukkan proxy file bantuan.Pastikan webhook injeksi istio sidecar Anda ada dan memiliki paket CA.
Webhook injektor file bantuan (yang digunakan untuk injeksi file bantuan otomatis) membutuhkan paket CA untuk membuat koneksi aman dengan server API dan
istiod
. Paket CA ini di-patch ke dalam konfigurasi olehistiod
, tetapi dapat terkadang akan ditimpa (misalnya, jika Anda menerapkan kembali webhook ).Anda dapat memverifikasi keberadaan paket CA menggunakan perintah berikut. Tujuan menyertakan
istio-sidecar-injector-asm-1204-0
, yang merupakan khusus untuk versi Cloud Service Mesh ini. Pastikan Anda menggunakan jika berbeda.kubectl get mutatingwebhookconfigurations.admissionregistration.k8s.io istio-sidecar-injector-asm-1204-0 -o=jsonpath='{.webhooks[0].clientConfig.caBundle}'
Jika output tidak kosong, paket CA akan dikonfigurasi. Jika paket CA tidak ada, mulai ulang
istiod
agar webhook perlu memindai ulang webhook menginstal ulang paket CA.Periksa kegagalan injeksi file bantuan.
Jika Anda telah mengaktifkan injeksi, tetapi tidak melihat penjadwalan pod, periksa ke tingkat abstraksi yang lebih tinggi berikutnya. Misalnya, jika Anda menjalankan deployment tetapi tidak ada pod yang menjadwalkan, periksa status set replika yang sesuai menggunakan perintah berikut:
kubectl -n my-namespace describe replicaset your-deployment-name
Jika kumpulan replika ada, periksa log peristiwa di bagian bawah keterangan error. Jika error berkaitan dengan injeksi file bantuan, periksa
istiod
mencatat log untuk indikasi penyebab error.Jika masalah berlanjut, masalahnya mungkin adalah salah satu dari hal berikut:
- Konfigurasi buruk diteruskan ke injektor
- Masalah konfigurasi {i>firewall<i}
- Masalah dalam kode Istio itu sendiri
Lihat Memecahkan Masalah Istio untuk mengetahui langkah diagnostik tambahan.
Proxy Envoy tidak menerima konfigurasi dari istiod
Ada beberapa masalah yang dapat mencegah proxy menerima konfigurasi
dari istiod
.
istiod
tidak akan mengirim konfigurasi ke proxy envoy jika mengalami masalah, seperti masalah RBAC yang mencegahnya membaca resource konfigurasinya.Alamat Discovery salah (error 'tidak ada upstream yang responsif')
Alamat penemuan yang diberikan ke injektor sespan salah. Jika Anda melihat log yang menyebutkan
gRPC config stream closed, no healthy upstream
, memeriksa apakah alamat penemuan di meshProxyConfig
sudah benar dan mengarah ke layananistiod
Anda.Konfigurasi yang tidak valid dikirim ke proxy. Dalam hal ini, konfigurasi berhasil didorong ke proxy, namun konfigurasinya tidak valid. Anda akan melihat pesan berulang yang mirip dengan berikut ini:
Envoy proxy is NOT ready: config not received from Pilot (is Pilot running?): cds updates: 1 successful, 0 rejected; lds updates: 0 successful, 1 rejected
Dalam contoh ini,
cds
adalah Layanan Penemuan Cluster (yang melaporkan 1 update dikirim dariistiod
), danlds
adalah Layanan Penemuan Pemroses (yang melaporkan 1 pembaruan yang ditolak dariistiod
). Sering kali Anda akan melihat pesan error yang menjelaskan alasan penolakan, yang biasanya dimulai dengan peringatan tentang konfigurasi envoy atau yang serupa.Untuk memperbaiki masalah ini, selidiki penyebab konfigurasi ditolak. paket Premium AI penyebab umumnya adalah resource
EnvoyFilter
yang buruk. Jika tidak ada alasan yang jelas, kirimkan laporan {i>bug<i} dengan {i> dump konfigurasi<i} dari {i>proxy<i}.
Pembuatan pod gagal
Jika Anda mengamati bahwa pod tidak berhasil dibuat, cari error pesan yang mungkin memberikan petunjuk tentang akar permasalahan, menggunakan perintah berikut:
kubectl describe replicaset YOUR_REPLICA_SET
Pesan error webhook umum
Pesan error yang dihasilkan oleh perintah kubectl apply
dapat memberikan petunjuk tentang
akar masalahnya. Lihat tabel berikut untuk pesan error umum dan
penyebab dan resolusi potensial.
Pesan error | Penyebab | Resolusi |
---|---|---|
net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers) |
Mungkin ini adalah masalah konektivitas jaringan. | Pastikan aturan firewall Anda menyediakan konektivitas ke `istiod` pada port 15017. |
no endpoints available for service 'istiod' |
Hal ini dapat terjadi jika pod `istiod` tidak tersedia atau tidak siap. | Periksa pod `istiod` untuk memastikan pod berjalan dan siap. |
Service "istiod" not found |
Hal ini dapat terjadi jika layanan `istiod` tidak ada. | Pastikan penginstalan Istio berhasil dan benar. |
x509: certificate signed by unknown authority |
Mungkin ini adalah masalah sertifikat webhook. | Pastikan caBundle disetel dengan benar di webhook. |
Failed to update validatingwebhookconfiguration
istio-validator-asm-[version-n]-istio-system (failurePolicy=Fail,
resourceVersion=[version]): Operation cannot be fulfilled on
validatingwebhookconfigurations.admissionregistration.k8s.io
"istio-validator-asm-[version-n]-istio-system": the object has been
modified; please apply your changes to the latest version and try
again. |
Webhook yang memvalidasi dari Istio versi lama atau Cloud Service Mesh yang telah di-uninstal mungkin mengganggu melakukan {i>upgrade <i}atau menginstalnya. | Pastikan semua webhook masih berada di cluster dan hapus webhook apa pun. versi referensi yang tidak lagi diinstal. |
Error from server (InternalError): Internal error occurred: failed
calling webhook "rev.namespace.sidecar-injector.istio.io": Post "https://istiod-asm-1122-0.istio-system.svc:443/inject?timeout=10s": context deadline exceeded |
Untuk cluster pribadi, port 15017 harus terbuka. Pesan error ini menunjukkan bahwa porta 15017 mungkin tidak terbuka. | Memastikan aturan firewall Anda menyediakan konektivitas ke Istiod pada port 15017. Untuk informasi selengkapnya, lihat Membuka port di cluster pribadi. |