Memecahkan masalah health check Ingress


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. CRD BackendConfig 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.
Praktik terbaik:

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 informasi healthCheck, 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 dengan containerPort Pod penayangan.
  • Untuk backend grup instance, pastikan port health check dalam manifes BackendConfig cocok dengan nodePort 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 CRD BackendConfig, 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 kolom containers[].spec.ports.containerPort konfigurasi Pod Anda.
  • containerPort Pod penayangan harus cocok dengan targetPort 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 dengan spec.ports[].name yang ditentukan di Layanan terkait.
    • spec.rules[].http.paths[].backend.service.port.number di Ingress cocok dengan spec.ports[].port yang ditentukan di Layanan terkait.

Memecahkan masalah umum pemeriksaan kondisi

Gunakan diagram alur pemecahan masalah berikut untuk membantu mengidentifikasi masalah pemeriksaan kesehatan:

Memecahkan masalah health check Ingress.
Gambar: Memecahkan masalah pemeriksaan kesehatan

Dalam diagram alur ini, panduan pemecahan masalah berikut membantu menentukan letak masalahnya:

  1. 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.
  2. Logging health check: Pastikan Anda telah mengaktifkan logging health check.

  3. 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.
  4. 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.

  5. 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:

  1. 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 adalah bash atau sh untuk mendapatkan shell interaktif.
  2. 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:

  1. Pastikan node dalam kondisi baik dan merespons pemeriksaan health check default.
  2. Jika node dalam kondisi baik, tetapi Pod aplikasi tidak merespons, selidiki aplikasi lebih lanjut.
  3. 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 dengan targetPort 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