Menyelesaikan masalah pengelolaan traffic di Cloud Service Mesh

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

Error koneksi server API dalam log Istiod

Istio tidak dapat menghubungi apiserver jika Anda melihat error yang mirip dengan hal berikut ini:

error k8s.io/client-go@v0.18.0/tools/cache/reflector.go:125: Failed to watch *crd.IstioSomeCustomResource`…dial tcp 10.43.240.1:443: connect: connection refused

Anda dapat menggunakan string ekspresi reguler /error.*cannot list resource/ untuk menemukan {i>error<i} ini di log.

Kesalahan ini biasanya bersifat sementara dan jika Anda mencapai log {i>proxy<i} menggunakan kubectl, masalahnya mungkin sudah teratasi. Kesalahan ini biasanya disebabkan berdasarkan peristiwa yang membuat server API tidak tersedia untuk sementara, seperti ketika API server yang tidak berada dalam konfigurasi ketersediaan tinggi akan memulai ulang untuk upgrade atau penskalaan otomatis.

Penampung istio-init mengalami error

Masalah ini dapat terjadi jika aturan iptable pod tidak diterapkan ke namespace jaringan pod. Hal ini dapat disebabkan oleh:

  • Penginstalan istio-cni yang tidak lengkap
  • Izin pod workload tidak memadai (izin CAP_NET_ADMIN tidak ada)

Jika Anda menggunakan plugin Istio CNI, pastikan bahwa Anda mengikuti petunjuk dengan lengkap. Pastikan penampung istio-cni-node sudah siap, dan periksa log. Jika tetap ada, memasang {i>secure shell<i} (SSH) ke dalam {i>node<i} {i>host<i} dan mencari log node untuk perintah nsenter, dan lihat apakah ada error.

Jika Anda tidak menggunakan plugin Istio CNI, pastikan bahwa pod beban kerja memiliki izin CAP_NET_ADMIN, yang otomatis disetel oleh injektor file bantuan.

Koneksi ditolak setelah pod dimulai

Saat Pod dimulai dan connection refused mencoba terhubung ke masalahnya, masalahnya mungkin container aplikasi dimulai sebelum penampung isto-proxy. Dalam hal ini, container aplikasi mengirimkan permintaan ke istio-proxy, namun koneksi ditolak karena istio-proxy belum memproses port.

Dalam hal ini, Anda dapat:

  • Ubah kode startup aplikasi Anda untuk membuat permintaan berkelanjutan ke Endpoint kesehatan istio-proxy hingga aplikasi menerima kode 200. Tujuan Endpoint kesehatan istio-proxy adalah:

    http://localhost:15020/healthz/ready
    
  • Menambahkan mekanisme permintaan percobaan ulang ke beban kerja aplikasi Anda.

Gateway listingan menampilkan nilai kosong

Gejala: Saat Anda membuat daftar Gateway menggunakan kubectl get gateway --all-namespaces setelah berhasil membuat Cloud Service Mesh Gateway, perintah tersebut akan menampilkan No resources found.

Masalah ini dapat terjadi pada GKE 1.20 dan yang lebih baru karena pengontrol Gateway GKE otomatis menginstal resource Gateway.networking.x-k8s.io/v1alpha1 GKE dalam cluster. Untuk mengatasi masalah ini:

  1. Periksa apakah ada beberapa resource kustom gateway di cluster:

    kubectl api-resources | grep gateway
    

    Contoh output:

    gateways                          gw           networking.istio.io/v1beta1            true         Gateway
    gatewayclasses                    gc           networking.x-k8s.io/v1alpha1           false        GatewayClass
    gateways                          gtw          networking.x-k8s.io/v1alpha1           true         Gateway

  2. Jika daftar menampilkan entri selain Gateway dengan apiVersion networking.istio.io/v1beta1, gunakan nama lengkap resource atau nama pendek yang dapat dibedakan dalam perintah kubectl. Misalnya, jalankan kubectl get gw atau kubectl get gateways.networking.istio.io, bukan kubectl get gateway untuk memastikan Gateway istio tercantum.

Untuk informasi selengkapnya tentang masalah ini, lihat Gateway Kubernetes dan Gateway Istio.