Memecahkan masalah server Kubernetes API

Halaman ini menunjukkan cara menyelesaikan masalah terkait server Kubernetes API (kube-apiserver) untuk Google Distributed Cloud.

Halaman ini ditujukan untuk admin IT dan Operator yang mengelola siklus proses infrastruktur teknologi dasar, serta merespons pemberitahuan dan halaman saat tujuan tingkat layanan (SLO) tidak terpenuhi atau aplikasi gagal. Untuk mempelajari informasi lebih lanjut tentang peran umum dan contoh tugas yang kami rujuk di Google Cloud konten, lihat Peran dan tugas pengguna GKE Enterprise yang umum.

Jika Anda memerlukan bantuan tambahan, hubungi Cloud Customer Care.

Waktu tunggu webhook dan panggilan webhook gagal

Error ini dapat terlihat dalam beberapa cara yang berbeda. Jika Anda mengalami salah satu gejala berikut, ada kemungkinan panggilan webhook gagal:

  • Koneksi ditolak: Jika kube-apiserver melaporkan error waktu tunggu untuk memanggil webhook, error berikut dilaporkan di log:

    failed calling webhook "server.system.private.gdc.goog":
    failed to call webhook: Post "https://root-admin-webhook.gpc-system.svc:443/mutate-system-private-gdc-goog-v1alpha1-server?timeout=10s":
    dial tcp 10.202.1.18:443: connect: connection refused
    
  • Batas waktu konteks terlampaui: Anda mungkin juga melihat error berikut yang dilaporkan di log:

    failed calling webhook "namespaces.hnc.x-k8s.io": failed to call webhook: Post
    "https://hnc-webhook-service.hnc-system.svc:443/validate-v1-namespace?timeout=10s\":
    context deadline exceeded"
    

Jika Anda merasa mengalami waktu tunggu webhook atau panggilan webhook gagal, gunakan salah satu metode berikut untuk mengonfirmasi masalah:

  • Periksa log server API untuk melihat apakah ada masalah jaringan.

    • Periksa log untuk mengetahui error terkait jaringan seperti TLS handshake error.
    • Periksa apakah IP/Port cocok dengan server API yang dikonfigurasi untuk merespons kueri.
  • Pantau latensi webhook dengan langkah-langkah berikut:

    1. Di konsol, buka halaman Cloud Monitoring.

      Buka halaman Cloud Monitoring

    2. Pilih Metrics Explorer.

    3. Pilih metrik apiserver_admission_webhook_admission_duration_seconds.

Untuk mengatasi masalah ini, tinjau saran berikut:

  • Aturan firewall tambahan mungkin diperlukan untuk webhook. Untuk selengkapnya informasi, lihat cara menambahkan aturan firewall untuk kasus penggunaan tertentu.

  • Jika webhook memerlukan waktu lebih lama untuk diselesaikan, Anda dapat mengonfigurasi nilai waktu tunggu kustom. Latensi webhook ditambahkan ke latensi permintaan API, sehingga harus dievaluasi sebagai secepat mungkin.

  • Jika error webhook memblokir ketersediaan cluster atau webhook tidak berbahaya untuk mengatasi dan mengurangi situasi, periksa apakah tetapkan failurePolicy ke Ignore atau hapus webhook yang melanggar.

Kegagalan atau latensi panggilan server API

Error ini dapat terlihat dalam beberapa cara:

  • Error resolusi nama eksternal: Klien eksternal mungkin menampilkan error yang berisi lookup dalam pesan, seperti:

    dial tcp: lookup kubernetes.example.com on 127.0.0.1:53: no such host
    

    Error ini tidak berlaku untuk klien yang berjalan dalam cluster. Tujuan IP Layanan Kubernetes diinjeksi, sehingga tidak diperlukan resolusi.

  • Kesalahan jaringan:Klien mungkin mencetak kesalahan jaringan umum ketika mencoba untuk memanggil server API, seperti contoh berikut:

    dial tcp 10.96.0.1:443: connect: no route to host
    dial tcp 10.96.0.1:443: connect: connection refused
    dial tcp 10.96.0.1:443: connect: i/o timeout
    
  • Latensi tinggi saat terhubung ke server API: Koneksi ke server API mungkin berhasil, tetapi waktu tunggu permintaan habis di sisi klien. Dalam skenario ini, klien biasanya mencetak pesan error yang berisi context deadline exceeded.

Jika koneksi ke server API gagal sepenuhnya, coba koneksi di dalam lingkungan yang sama di mana klien melaporkan {i>error<i}. Container ephemeral Kubernetes bisa digunakan untuk memasukkan kontainer {i>debugging<i} ke namespace yang ada sebagai berikut ini:

  1. Dari tempat klien yang bermasalah berjalan, gunakan kubectl untuk melakukan permintaan yang panjangnya bertele-tele. Misalnya, permintaan GET ke /healthz biasanya tidak memerlukan autentikasi:

    kubectl get -v999 --raw /healthz
    
  2. Jika permintaan gagal atau kubectl tidak tersedia, Anda dapat memperoleh URL dari output dan melakukan permintaan secara manual dengan curl. Misalnya, jika host layanan yang diperoleh dari output sebelumnya adalah https://192.0.2.1:36917/, Anda dapat mengirim permintaan serupa seperti berikut:

    # Replace "--ca-cert /path/to/ca.pem" to "--insecure" if you are accessing
    # a local cluster and you trust the connection cannot be tampered.
    # The output is always "ok" and thus contains no sensentive information.
    
    curl -v --cacert /path/to/ca.pem https://192.0.2.1:36917/healthz
    

    Output dari perintah ini biasanya menunjukkan penyebab utama kegagalan koneksi jarak jauh.

    Jika koneksi berhasil, tetapi lambat atau waktu habis, hal ini mengindikasikan server API yang kelebihan beban. Untuk mengonfirmasi, lihat API Server Request Rate di konsol dan minta metrik latensi di Cloud Kubernetes > Anthos > Cluster > K8s Control Plane.

Untuk mengatasi kegagalan koneksi atau masalah latensi ini, tinjau referensi berikut opsi perbaikan:

  • Jika terjadi error jaringan dalam cluster, mungkin ada masalah dengan Plugin Container Network Interface (CNI). Masalah ini biasanya bersifat sementara dan selesai sendiri setelah pembuatan ulang atau penjadwalan ulang Pod.

  • Jika error jaringan berasal dari luar cluster, periksa apakah klien tersebut telah dikonfigurasi dengan benar untuk mengakses cluster, atau membuat klien konfigurasi lagi. Jika koneksi melewati {i>proxy<i} atau {i>gateway<i}, periksa jika koneksi lain yang melalui mekanisme yang sama bekerja.

  • Jika server API kelebihan beban, biasanya itu berarti banyak klien yang mengakses server API secara bersamaan. Satu klien tidak dapat membebani server API karena throttling dan Prioritas dan Keadilan aplikasi baru. Tinjau beban kerja untuk area berikut:

    • Berfungsi pada level Pod. Lebih umum terjadi kesalahan pembuatan dan pengabaian Pod daripada resource level yang lebih tinggi.
    • Sesuaikan jumlah replika melalui penghitungan yang salah.
    • Webhook yang melakukan loop kembali permintaan ke dirinya sendiri atau memperkuat beban dengan membuat lebih banyak permintaan daripada yang ditanganinya.

Langkah selanjutnya

Jika Anda memerlukan bantuan tambahan, hubungi Cloud Customer Care.