Menyelesaikan masalah proxy/webhook file bantuan di Anthos Service Mesh

Bagian ini menjelaskan masalah umum Anthos Service Mesh dan cara menyelesaikannya. Jika Anda memerlukan bantuan tambahan, lihat Mendapatkan dukungan.

Anthos Service Mesh berisi dua webhook:

  • Memvalidasi webhook 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 dimulai, 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 dijadwalkan tanpa bantuan
  • pod yang harus memiliki file bantuan yang dimasukkan tidak akan pernah muncul saat menggunakan kubectl get pods, tetapi replika terkait yang ditetapkan dari kubectl get replicaset ada.

Gunakan langkah-langkah berikut untuk memecahkan masalah injeksi file bantuan.

  1. Pastikan namespace atau pod memiliki label injeksi yang benar.

    Jika Anda menjalankan Istio revisi tunggal (default), pastikan namespace atau spesifikasi pod memiliki label istio-injection=enabled.

    Jika Anda menjalankan Istio beberapa revisi (untuk migrasi tanpa periode nonaktif, beberapa bidang kontrol, dll.), pastikan namespace atau spesifikasi pod Anda memiliki label istio.io/rev=<var>REVISION</var> yang sesuai, dengan REVISION sebagai nomor revisi Anthos Service Mesh di istiod yang sesuai dengan versi Anthos Service Mesh yang dipilih. Untuk informasi selengkapnya tentang label revisi, lihat Memasukkan proxy file bantuan.

  2. Pastikan webhook injeksi sidecar istio Anda ada dan memiliki paket CA.

    Webhook injektor sidecar (yang digunakan untuk injeksi sidecar otomatis) memerlukan paket CA untuk membuat koneksi yang aman dengan server API dan istiod. Paket CA ini di-patch ke dalam konfigurasi oleh Istiod, tetapi terkadang dapat ditimpa (misalnya, jika Anda menerapkan kembali konfigurasi webhook).

    Anda dapat memverifikasi keberadaan paket CA menggunakan perintah berikut:

    kubectl get mutatingwebhookconfigurations.admissionregistration.k8s.io istio-sidecar-injector -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.

  3. Periksa kegagalan injeksi file bantuan.

    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 kumpulan 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 deskripsi untuk menemukan error. Jika error berkaitan dengan injeksi file bantuan, periksa log Istiod untuk mengetahui indikasi penyebab error.

  4. Jika masalah berlanjut, masalahnya mungkin salah satu dari hal berikut:

    • Konfigurasi yang buruk diteruskan ke injektor
    • Masalah konfigurasi firewall
    • Terjadi masalah pada kode Istio itu sendiri

    Lihat Memecahkan masalah Istio untuk mengetahui langkah-langkah diagnostik lainnya.

Proxy envoy tidak menerima konfigurasi dari Istiod

Ada beberapa masalah yang dapat mencegah proxy menerima konfigurasi dari Istiod.

  1. Istiod tidak akan mengirim konfigurasi ke proxy envoy jika terdapat masalah, seperti masalah RBAC yang mencegahnya membaca resource konfigurasinya.

  2. Alamat penemuan salah (error 'hulu yang tidak responsif')

  3. Alamat penemuan yang diberikan ke injektor sidecar salah. Jika Anda melihat log yang menyebutkan gRPC config stream closed, no healthy upstream, pastikan alamat penemuan di mesh ProxyConfig sudah benar dan mengarah ke layanan Istiod Anda.

  4. Konfigurasi yang tidak valid dikirim ke proxy. Dalam hal ini, konfigurasi berhasil dikirim ke proxy, tetapi 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 yang didorong dari Istiod), dan lds adalah Layanan Penemuan Pemroses (yang melaporkan 1 update ditolak dari istiod). Sering kali Anda akan melihat pesan error sebelumnya yang menjelaskan alasan penolakan, yang biasanya diawali dengan peringatan tentang konfigurasi envoy atau yang serupa.

    Untuk memperbaiki masalah ini, selidiki penyebab konfigurasi ditolak. Salah satu penyebab umumnya adalah resource EnvoyFilter yang buruk. Jika tidak ada alasan yang jelas, kirimkan laporan bug dengan dump konfigurasi proxy.

Pembuatan pod gagal

Jika Anda mengamati bahwa pod tidak berhasil dibuat, cari pesan error yang mungkin dapat 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 akar masalahnya. Lihat tabel berikut untuk pesan error umum, penyebab, dan kemungkinan penyelesaiannya.

Pesan error Penyebab Resolusi
net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers) Ini mungkin hanya 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 Istio tidak tersedia atau tidak siap. Periksa pod Istio untuk memastikan pod tersebut berjalan dan siap.
Service "istiod" not found Hal ini dapat terjadi jika layanan Istio tidak ada. Verifikasi bahwa penginstalan Istio Anda berhasil dan benar.
x509: certificate signed by unknown authority Ini mungkin yang menyebabkan masalah sertifikat webhook. Pastikan caBundle ditetapkan dengan benar di webhook.