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 di log Istiod
Istiod tidak dapat menghubungi apiserver jika Anda melihat error yang mirip dengan berikut:
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 error ini dalam log.
Error ini biasanya bersifat sementara dan jika Anda membuka log proxy menggunakan
kubectl, masalah tersebut mungkin sudah teratasi. Error ini biasanya disebabkan oleh peristiwa yang membuat server API tidak tersedia untuk sementara, seperti saat server API yang tidak berada dalam konfigurasi ketersediaan tinggi dimulai ulang untuk upgrade atau perubahan penskalaan otomatis.
Penampung istio-init mengalami error
Masalah ini dapat terjadi jika aturan iptables pod tidak diterapkan ke namespace jaringan pod. Hal ini dapat disebabkan oleh:
- Penginstalan istio-cni yang tidak lengkap
- Izin pod beban kerja tidak memadai (izin
CAP_NET_ADMINtidak ada)
Jika Anda menggunakan plugin CNI Istio, pastikan Anda telah mengikuti petunjuk sepenuhnya.
Pastikan penampung istio-cni-node sudah siap, lalu periksa log. Jika masalah berlanjut, buat secure shell (SSH) ke node host dan telusuri log node untuk menemukan perintah nsenter, lalu lihat apakah ada error.
Jika Anda tidak menggunakan plugin CNI Istio, pastikan pod workload
memiliki izin CAP_NET_ADMIN, yang ditetapkan secara otomatis oleh injector sidecar.
Koneksi ditolak setelah pod dimulai
Saat Pod dimulai dan connection refused mencoba terhubung ke
endpoint, masalahnya mungkin karena penampung aplikasi dimulai sebelum
penampung isto-proxy. Dalam hal ini, penampung aplikasi mengirim
permintaan ke istio-proxy, tetapi 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-proxyhingga aplikasi menerima kode 200. Endpoint kesehatanistio-proxyadalah:http://localhost:15020/healthz/readyTambahkan mekanisme permintaan percobaan ulang ke beban kerja aplikasi Anda.
Listingan gateway kosong
Gejala: Saat Anda mencantumkan Gateway menggunakan kubectl get gateway --all-namespaces
setelah berhasil membuat Cloud Service Mesh Gateway, perintah akan menampilkan
No resources found.
Masalah ini dapat terjadi di GKE 1.20 dan yang lebih baru karena pengontrol GKE Gateway secara otomatis menginstal resource Gateway.networking.x-k8s.io/v1alpha1 GKE di cluster. Untuk mengatasi masalah ini:
Periksa apakah ada beberapa resource kustom gateway di cluster:
kubectl api-resources | grep gatewayContoh 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
Jika daftar menampilkan entri selain Gateway dengan
apiVersionnetworking.istio.io/v1beta1, gunakan nama resource lengkap atau nama singkat yang dapat dibedakan dalam perintahkubectl. Misalnya, jalankankubectl get gwataukubectl get gateways.networking.istio.io, bukankubectl get gatewayuntuk memastikan Gateway istio tercantum.
Untuk mengetahui informasi selengkapnya tentang masalah ini, lihat Gateway Kubernetes dan Gateway Istio.