Halaman ini menunjukkan cara menyelesaikan masalah terkait pemeriksaan kesehatan Ingress di Google Kubernetes Engine (GKE).
Memahami cara kerja health check Ingress
Sebelum melanjutkan ke langkah-langkah pemecahan masalah, sebaiknya pahami cara kerja pemeriksaan kondisi di GKE dan pertimbangan yang perlu diingat untuk memastikan pemeriksaan kondisi berhasil.
Saat Anda mengekspos satu atau beberapa Layanan melalui Ingress menggunakan pengontrol Ingress default, GKE akan membuat Load Balancer Aplikasi klasik atau Load Balancer Aplikasi internal. Kedua load balancer ini mendukung beberapa layanan backend di satu peta URL. Setiap layanan backend terkait dengan Layanan Kubernetes, dan setiap layanan backend harus merujuk ke Trusted Cloud health check. Health check ini berbeda dengan pemeriksaan keaktifan atau kesiapan Kubernetes karena health check diterapkan di luar cluster.
Health check load balancer ditentukan per layanan backend. Meskipun Anda dapat menggunakan health check yang sama untuk semua layanan backend load balancer, referensi health check tidak ditentukan untuk seluruh load balancer (di objek Ingress itu sendiri).
GKE membuat health check berdasarkan salah satu metode berikut:
- CRD
BackendConfig
: Definisi resource kustom (CRD) yang memberi Anda kontrol yang tepat atas cara Layanan Anda berinteraksi dengan load balancer. CRDBackendConfig
memungkinkan Anda menentukan setelan kustom untuk health check yang terkait dengan layanan backend yang sesuai. Setelan kustom ini memberikan fleksibilitas dan kontrol yang lebih besar atas health check untuk Load Balancer Aplikasi klasik dan Load Balancer Aplikasi internal yang dibuat oleh Ingress. - Pemeriksaan kesiapan: Pemeriksaan diagnostik yang menentukan apakah container dalam Pod siap melayani traffic. Pengontrol GKE Ingress membuat health check untuk layanan backend Layanan berdasarkan pemeriksaan kesiapan yang digunakan oleh Pod penayangan Layanan tersebut. Anda dapat memperoleh parameter health check seperti jalur, port, dan protokol dari definisi pemeriksaan kesiapan.
- Nilai default: Parameter yang digunakan saat Anda tidak mengonfigurasi CRD
BackendConfig
atau menentukan atribut untuk pemeriksaan kesiapan.
Gunakan CRD BackendConfig
untuk memiliki kontrol paling besar atas setelan health check load balancer.
GKE menggunakan prosedur berikut untuk membuat health check bagi setiap layanan backend yang terkait dengan Layanan Kubernetes:
Jika Layanan mereferensikan CRD
BackendConfig
dengan informasihealthCheck
, GKE akan menggunakannya untuk membuat health check. Pengontrol GKE Enterprise Ingress dan pengontrol GKE Ingress mendukung pembuatan health check dengan cara ini.Jika Layanan tidak merujuk CRD
BackendConfig
:GKE dapat menyimpulkan beberapa atau semua parameter untuk health check apakah Pod Penayangan menggunakan template Pod dengan container yang pemeriksaan kesiapannya memiliki atribut yang dapat ditafsirkan sebagai parameter health check. Lihat Parameter dari pemeriksaan kesiapan untuk detail implementasi serta Parameter default dan yang ditentukan untuk daftar atribut yang dapat digunakan untuk membuat parameter health check. Hanya pengontrol GKE Ingress yang mendukung inferensi parameter dari pemeriksaan kesiapan.
Jika template Pod untuk Pod penayangan Layanan tidak memiliki container dengan pemeriksaan kesiapan yang atributnya dapat ditafsirkan sebagai parameter health check, nilai default akan digunakan untuk membuat health check. Pengontrol Ingress GKE Enterprise dan pengontrol Ingress GKE hanya bisa membuat health check menggunakan nilai default.
Pertimbangan
Bagian ini menguraikan beberapa pertimbangan yang perlu diingat saat Anda mengonfigurasi CRD
BackendConfig
atau menggunakan pemeriksaan kesiapan.
BackendConfig
CRD
Saat mengonfigurasi CRD BackendConfig
, perhatikan pertimbangan berikut:
- Jika Anda menggunakan load balancing berbasis container,
pastikan port health check dalam manifes
BackendConfig
cocok dengancontainerPort
Pod penayangan. - Untuk backend grup instance, pastikan port health check dalam manifes
BackendConfig
cocok dengannodePort
yang diekspos oleh Layanan. - Ingress tidak mendukung gRPC untuk konfigurasi health check kustom.
BackendConfig
hanya mendukung pembuatan health check menggunakan protokol HTTP, HTTPS, atau HTTP2. Untuk contoh cara menggunakan protokol dalam CRDBackendConfig
, lihat gke-networking-recipes.
Untuk mengetahui informasi selengkapnya, lihat Kapan harus menggunakan CRD BackendConfig
.
Pemeriksaan kesiapan
Saat Anda menggunakan GKE Ingress dengan load balancing HTTP atau HTTPS, GKE akan mengirimkan pemeriksaan health check untuk menentukan apakah aplikasi Anda berjalan dengan benar. Pemeriksaan health check ini dikirim ke port tertentu di Pod yang Anda tentukan di bagian spec.containers[].readinessProbe.httpGet.port
konfigurasi YAML Pod, selama kondisi berikut terpenuhi:
- Nomor port pemeriksaan kesiapan yang ditentukan dalam
spec.containers[].readinessProbe.httpGet.port
harus cocok dengan port sebenarnya yang digunakan aplikasi Anda untuk memproses permintaan dalam container, yang ditentukan dalam kolomcontainers[].spec.ports.containerPort
konfigurasi Pod Anda. containerPort
Pod penayangan harus cocok dengantargetPort
Layanan. Hal ini memastikan bahwa traffic diarahkan dari Layanan ke port yang benar di Pod Anda.- Spesifikasi port backend layanan Ingress harus mereferensikan port yang valid
dari bagian
spec.ports[]
konfigurasi Layanan. Hal ini dapat dilakukan dengan salah satu dari dua cara berikut:spec.rules[].http.paths[].backend.service.port.name
di Ingress cocok denganspec.ports[].name
yang ditentukan di Layanan terkait.spec.rules[].http.paths[].backend.service.port.number
di Ingress cocok denganspec.ports[].port
yang ditentukan di Layanan terkait.
Memecahkan masalah umum pemeriksaan kondisi
Gunakan diagram alur pemecahan masalah berikut untuk membantu mengidentifikasi masalah pemeriksaan kesehatan:
Dalam diagram alur ini, panduan pemecahan masalah berikut membantu menentukan letak masalahnya:
Selidiki kondisi Pod: Jika health check gagal, periksa status Pod penayangan Layanan Anda. Jika Pod tidak berjalan dan dalam kondisi baik:
- Periksa log Pod untuk menemukan error atau masalah yang mencegahnya berjalan.
- Periksa status pemeriksaan kesiapan dan keaktifan.
Logging health check: Pastikan Anda telah mengaktifkan logging health check.
Verifikasi konfigurasi firewall: Pastikan aturan firewall Anda mengizinkan pemeriksaan health check menjangkau Pod Anda. Jika tidak:
- Periksa aturan firewall Anda untuk mengonfirmasi bahwa aturan tersebut mengizinkan traffic masuk dari rentang alamat IP pemeriksaan health check.
- Sesuaikan aturan firewall sesuai kebutuhan untuk mengakomodasi rentang alamat IP ini.
Analisis pengambilan paket: Jika firewall dikonfigurasi dengan benar, lakukan pengambilan paket untuk melihat apakah aplikasi Anda merespons pemeriksaan kondisi. Jika pengambilan paket menunjukkan respons yang berhasil, hubungi Trusted Cloud by S3NS dukungan untuk mendapatkan bantuan lebih lanjut.
Memecahkan masalah aplikasi: Jika pengambilan paket tidak menunjukkan respons yang berhasil, selidiki mengapa aplikasi Anda tidak merespons permintaan health check dengan benar. Pastikan health check menargetkan jalur dan port yang benar di Pod dan periksa log aplikasi, file konfigurasi, dan dependensi. Jika Anda tidak dapat menemukan error, hubungi Trusted Cloud by S3NS dukungan.
Aplikasi tidak responsif terhadap health check
Aplikasi tidak merespons dengan kode status yang diharapkan (200 OK untuk HTTP atau SYN, ACK untuk TCP) selama health check di jalur dan port yang dikonfigurasi.
Jika aplikasi Anda tidak merespons health check dengan benar, hal ini mungkin disebabkan oleh salah satu alasan berikut:
- Network Endpoint Groups(NEG):
- Aplikasi tidak berjalan dengan benar dalam Pod.
- Aplikasi tidak memproses port atau jalur yang dikonfigurasi.
- Ada masalah konektivitas jaringan yang mencegah pemeriksaan kesehatan mencapai Pod.
- Grup Instance:
- Node dalam grup instance tidak responsif.
- Aplikasi tidak berjalan dengan benar di node.
- Permintaan health check tidak menjangkau node.
Jika health check Anda gagal, berdasarkan penyiapan Anda, pecahkan masalahnya sebagai berikut:
Untuk NEG:
Akses Pod menggunakan
kubectl exec
:kubectl exec -it pod-name -- command
Flag
-it
menyediakan sesi terminal interaktif (i untuk interaktif, t untuk TTY).Ganti kode berikut:
pod-name
: nama Pod Anda.command
: perintah yang ingin Anda jalankan di dalam Pod. Perintah yang paling umum adalahbash
ataush
untuk mendapatkan shell interaktif.
Jalankan perintah
curl
untuk menguji konektivitas dan respons aplikasi:curl localhost:<Port>/<Path>
curl -v http://<POD_IP>/[Path configured in HC]
curl http://localhost/[Path configured in HC]
Untuk Instance Groups:
- Pastikan node dalam kondisi baik dan merespons pemeriksaan health check default.
- Jika node dalam kondisi baik, tetapi Pod aplikasi tidak merespons, selidiki aplikasi lebih lanjut.
- Jika permintaan tidak mencapai Pod, mungkin ada masalah jaringan GKE. Hubungi dukungan Trusted Cloud by S3NS untuk mendapatkan bantuan.
Error saat mengedit pemeriksaan kesiapan di Pod
Saat Anda mencoba mengedit pemeriksaan kesiapan pada Pod untuk mengubah parameter health check, akan terjadi error yang mirip dengan berikut ini:
Pod "pod-name" is invalid: spec: Forbidden: pod updates may not change fields
Jika Anda mengubah pemeriksaan kesiapan Pod yang terkait dengan Layanan yang sudah ditautkan ke Ingress (dan load balancer yang sesuai), GKE tidak akan otomatis memperbarui konfigurasi health check di load balancer. Hal ini menyebabkan ketidakcocokan antara pemeriksaan kesiapan Pod dan health check load balancer, sehingga menyebabkan health check gagal.
Untuk mengatasinya, deploy ulang Pod dan resource Ingress. Hal ini akan memaksa GKE untuk membuat ulang load balancer dan health check-nya, serta menggabungkan setelan pemeriksaan kesiapan yang baru.
Deployment dan load balancer gagal dimulai
Jika deployment Anda gagal dimulai dan layanan backend di belakang load balancer pengontrol Ingress Anda ditandai tidak responsif, kegagalan pemeriksaan kesiapan mungkin menjadi penyebabnya.
Anda mungkin melihat pesan error berikut yang menyebutkan kegagalan pemeriksaan kesiapan:
Readiness probe failed: connection refused
Aplikasi dalam Pod tidak merespons dengan benar pemeriksaan kesiapan yang dikonfigurasi dalam konfigurasi YAML Pod. Hal ini dapat disebabkan oleh berbagai alasan, seperti aplikasi tidak dimulai dengan benar, memproses port yang salah, atau mengalami error selama inisialisasi.
Untuk mengatasinya, selidiki dan perbaiki setiap perbedaan dalam konfigurasi atau perilaku aplikasi Anda dengan melakukan hal berikut:
- Pastikan aplikasi dikonfigurasi dengan benar dan merespons di jalur dan port yang ditentukan dalam parameter pemeriksaan kesiapan.
- Tinjau log aplikasi dan pecahkan masalah atau error saat memulai.
- Pastikan
containerPort
di konfigurasi Pod cocok dengantargetPort
di Layanan dan port backend yang ditentukan di Ingress.
Aturan firewall masuk otomatis tidak ada
Anda membuat resource Ingress, tetapi traffic tidak mencapai layanan backend.
Aturan firewall Ingress otomatis, yang biasanya dibuat GKE saat resource Ingress dibuat, tidak ada atau telah dihapus secara tidak sengaja.
Untuk memulihkan konektivitas ke layanan backend Anda, lakukan langkah-langkah berikut:
- Verifikasi keberadaan aturan firewall Ingress otomatis di jaringan VPC Anda.
- Jika aturan tidak ada, Anda dapat membuatnya ulang secara manual atau menghapus dan membuat ulang resource Ingress untuk memicu pembuatan otomatisnya.
- Pastikan aturan firewall mengizinkan traffic pada port dan protokol yang sesuai seperti yang ditentukan dalam resource Ingress Anda.
Protokol yang salah digunakan dalam manifes BackendConfig
Jika mengonfigurasi CRD BackendConfig
dengan protokol jenis TCP, Anda akan melihat error berikut:
Error syncing to GCP: error running backend syncing routine:
error ensuring health check: Protocol "TCP" is not valid, must be one of ["HTTP","HTTPS","HTTP2"]'
BackendConfig
mendukung pembuatan health check hanya menggunakan protokol HTTP, HTTPS,
atau HTTP/2. Untuk mengetahui informasi selengkapnya, lihat Kriteria keberhasilan untuk HTTP, HTTPS, dan HTTP/2.
Langkah berikutnya
Untuk menyiapkan health check kustom untuk Ingress dalam satu cluster, lihat Resep jaringan GKE.
Jika Anda tidak dapat menemukan solusi untuk masalah Anda dalam dokumentasi, lihat Mendapatkan dukungan untuk mendapatkan bantuan lebih lanjut, termasuk saran tentang topik berikut:
- Membuka kasus dukungan dengan menghubungi Layanan Pelanggan Cloud.
- Mendapatkan dukungan dari komunitas dengan
mengajukan pertanyaan di StackOverflow
dan menggunakan tag
google-kubernetes-engine
untuk menelusuri masalah serupa. Anda juga dapat bergabung ke#kubernetes-engine
channel Slack untuk mendapatkan dukungan komunitas lainnya. - Membuka bug atau permintaan fitur menggunakan issue tracker publik.