Jika sebuah proxy sidecar diinjeksikan ke dalam pod, permintaan yang memakan waktu mungkin hilang atau gagal setelah pod berhenti. Topik ini menjelaskan deskripsi dan penyebab masalah ini, serta solusi untuk mengatasinya.
Deskripsi Masalah
Setelah injeksi proxy sidecar ke dalam pod, masalah berikut dapat terjadi ketika pod mulai berhenti:
Beberapa permintaan yang memakan waktu ke pod tersebut hilang.
Permintaan dari pod ini ke layanan lain gagal.
Penyebab
Setelah proxy sidecar diinjeksikan ke dalam pod, lalu lintas pod dikendalikan oleh proxy sidecar. Ketika pod mulai berhenti, layanan terkait tidak lagi mengarahkan lalu lintas ke pod tersebut.
Secara default, Istio secara paksa menghentikan proxy sidecar 5 detik setelah menerima sinyal bahwa pod telah berhenti. Setelah proxy sidecar dihentikan, tidak ada lalu lintas arah masuk yang diterima, namun koneksi arah masuk yang sudah terbentuk masih dapat diproses. Koneksi keluar tidak terpengaruh dan tetap dapat dimulai sesuai harapan. Jika permintaan ke pod dari layanan yang dihentikan bersifat memakan waktu, koneksi arah masuk dan keluar yang ada akan diakhiri tanpa mempertimbangkan apakah koneksi tersebut sedang diproses.
Solusi
Solusi 1: Ubah durasi drain penghentian untuk proxy sidecar
Anda dapat memperpanjang durasi drain penghentian untuk proxy sidecar sehingga koneksi arah masuk dan keluar dapat diproses selama periode ini.
Masuk ke Konsol ASM. Di panel navigasi sebelah kiri, pilih .
Di halaman Mesh Management, klik nama instance ASM. Di panel navigasi sebelah kiri, pilih .
Di halaman Sidecar Proxy Setting, klik tab Namespace.
Pilih namespace dari daftar drop-down Namespace. Klik Lifecycle Management, pilih Sidecar Proxy Drain Duration at Pod Termination, masukkan nilai yang sesuai untuk Durasi Drain Sidecar Proxy Saat Penghentian Pod, lalu klik Update Settings.
Solusi 2: Konfigurasikan siklus hidup proxy sidecar
Jika Anda tidak dapat memperkirakan jumlah waktu maksimum untuk menunggu permintaan, kami sarankan Anda mengatur parameter preStop untuk mengonfigurasi siklus hidup proxy sidecar. Parameter preStop digunakan untuk memeriksa apakah permintaan ada. Jika tidak ada permintaan, proxy sidecar akan berhenti setelah waktu default, yaitu 5 detik, berlalu.
Masuk ke Konsol ASM. Di panel navigasi sebelah kiri, pilih .
Di halaman Mesh Management, klik nama instance ASM. Di panel navigasi sebelah kiri, pilih .
Di halaman Sidecar Proxy Setting, klik tab Namespace.
Pilih namespace dari daftar drop-down Namespace. Klik Lifecycle Management, pilih Lifecycle of Sidecar Proxy, masukkan konten berikut di editor kode Siklus Hidup Sidecar Proxy, lalu klik Update Settings.
{ "postStart": { "exec": { "command": [ "pilot-agent", "wait" ] } }, "preStop": { "exec": { "command": [ "/bin/sh", "-c", "while [ $(netstat -plunt | grep tcp | grep -v envoy | wc -l | xargs) -ne 0 ]; do sleep 1; done" ] } } }