Menyelesaikan masalah proxy/webhook sidecar 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 webhooks:
- Webhook validasi memastikan konfigurasi Istio yang diterapkan valid.
- Webhook yang berubah menetapkan injeksi sidecar otomatis pada pod baru.
Masalah konfigurasi di salah satu webhook ini dapat menyebabkan pod baru gagal
dinyalakan, atau kubectl apply
menghasilkan pesan error.
Masalah injeksi sidecar
Injeksi sidecar tidak berfungsi dengan benar jika Anda melihat salah satu hal berikut:
- pod yang dijadwalkan tanpa sidecar
- pod yang seharusnya memiliki sidecar yang dimasukkan tidak pernah muncul saat menggunakan
kubectl get pods
, tetapi set replika yang sesuai darikubectl get replicaset
ada.
Gunakan langkah-langkah berikut untuk memecahkan masalah injeksi sidecar.
Pastikan namespace atau pod Anda memiliki label injeksi yang benar.
Jika Anda menjalankan Istio revisi tunggal (default), pastikan spec pod atau namespace Anda memiliki label istio-injection=enabled.
Jika Anda menjalankan Istio dengan beberapa revisi (untuk migrasi tanpa periode nonaktif, beberapa bidang kontrol, dll.), pastikan namespace atau spesifikasi pod Anda memiliki label
istio.io/rev=REVISION
yang sesuai, dengan REVISION adalah nomor revisi Cloud Service Mesh diistiod
yang sesuai dengan versi Cloud Service Mesh yang Anda pilih. Untuk informasi selengkapnya tentang label revisi, lihat Memasukkan proxy sidecar.Pastikan webhook injeksi sidecar istio Anda ada dan memiliki paket CA.
Webhook injector sidecar (yang digunakan untuk injeksi sidecar otomatis) memerlukan paket CA untuk membuat koneksi aman dengan server API dan
istiod
. Paket CA ini di-patch ke dalam konfigurasi olehistiod
, tetapi terkadang dapat ditimpa (misalnya, jika Anda menerapkan ulang konfigurasi webhook).Anda dapat memverifikasi keberadaan paket CA menggunakan perintah berikut. Perintah ini menyertakan
istio-sidecar-injector-asm-1233-2
, yang khusus untuk Cloud Service Mesh versi ini. Pastikan Anda menggunakan revisi yang sebenarnya jika berbeda.kubectl get mutatingwebhookconfigurations.admissionregistration.k8s.io istio-sidecar-injector-asm-1233-2 -o=jsonpath='{.webhooks[0].clientConfig.caBundle}'
Jika output tidak kosong, paket CA akan dikonfigurasi. Jika paket CA tidak ada, mulai ulang
istiod
agar memindai ulang webhook dan menginstal ulang paket CA.Periksa kegagalan injeksi sidecar.
Jika Anda telah mengaktifkan injeksi, tetapi tidak melihat penjadwalan pod, periksa status tingkat abstraksi yang lebih tinggi berikutnya. Misalnya, jika Anda menjalankan deployment, tetapi tidak ada pod yang dijadwalkan, periksa status set replika yang sesuai menggunakan perintah berikut:
kubectl -n my-namespace describe replicaset your-deployment-name
Jika set replika ada, periksa log peristiwa di bagian bawah deskripsi untuk menemukan error. Jika error terkait dengan injeksi sidecar, periksa log
istiod
untuk mengetahui indikasi penyebab error.Jika masalah berlanjut, masalahnya mungkin salah satu dari hal berikut:
- Konfigurasi yang buruk diteruskan ke injector
- Masalah konfigurasi firewall
- Masalah dalam kode Istio itu sendiri
Lihat Memecahkan Masalah Istio untuk mengetahui langkah diagnostik tambahan.
Proksi Envoy tidak menerima konfigurasi dari istiod
Ada beberapa masalah yang dapat mencegah proxy menerima konfigurasi
dari istiod
.
istiod
tidak akan mendorong konfigurasi ke proxy envoy jika mengalami masalah, seperti masalah RBAC yang mencegahnya membaca resource konfigurasinya.Alamat discovery salah (error 'tidak ada upstream yang sehat')
Alamat penemuan yang diberikan ke injector sidecar salah. Jika Anda melihat log yang menyebutkan
gRPC config stream closed, no healthy upstream
, periksa apakah alamat penemuan di meshProxyConfig
sudah benar dan mengarah ke layananistiod
Anda.Konfigurasi yang tidak valid dikirim ke proxy. Dalam hal ini, konfigurasi berhasil dikirim ke proxy, tetapi konfigurasi 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 yang didorong dariistiod
), danlds
adalah Layanan Penemuan Pemroses (yang melaporkan 1 update yang ditolak dariistiod
). Sering kali Anda akan melihat pesan error sebelumnya yang menjelaskan alasan penolakan, yang biasanya dimulai dengan peringatan tentang konfigurasi envoy atau yang serupa.Untuk memperbaiki masalah ini, selidiki penyebab konfigurasi yang ditolak. Salah satu penyebab umum adalah resource
EnvoyFilter
yang buruk. Jika tidak ada alasan yang jelas, kirim laporan bug dengan dump konfigurasi proxy.
Pembuatan pod gagal
Jika Anda mengamati bahwa pod tidak berhasil dibuat, cari pesan error yang mungkin memberikan petunjuk tentang akar masalah, 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
penyebab utamanya. Lihat tabel berikut untuk mengetahui pesan error umum, penyebabnya, dan kemungkinan penyelesaiannya.
Pesan error | Penyebab | Resolusi |
---|---|---|
net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers) |
Hal ini mungkin disebabkan oleh masalah konektivitas jaringan. | Pastikan aturan firewall Anda menyediakan konektivitas ke `istiod` di port 15017. |
no endpoints available for service 'istiod' |
Hal ini dapat terjadi jika pod `istiod` tidak tersedia atau belum siap. | Periksa pod `istiod` untuk memastikan pod tersebut berjalan dan siap. |
Service "istiod" not found |
Hal ini dapat terjadi jika layanan `istiod` tidak ada. | Pastikan penginstalan Istio Anda berhasil dan benar. |
x509: certificate signed by unknown authority |
Hal ini mungkin merupakan masalah sertifikat webhook. | Pastikan caBundle ditetapkan 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 validasi dari Istio versi lama atau Cloud Service Mesh yang telah di-uninstal dapat mengganggu upgrade atau penginstalan. | Pastikan semua webhook masih ada di cluster dan hapus webhook apa pun yang mereferensikan versi 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 port 15017 mungkin tidak terbuka. | Pastikan aturan firewall Anda menyediakan konektivitas ke Istiod di port 15017. Untuk mengetahui informasi selengkapnya, lihat Membuka port di cluster pribadi. |