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 kesehatanistio-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:
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
Jika daftar menampilkan entri selain Gateway dengan
apiVersion
networking.istio.io/v1beta1
, gunakan nama lengkap resource atau nama pendek yang dapat dibedakan dalam perintahkubectl
. Misalnya, jalankankubectl get gw
ataukubectl get gateways.networking.istio.io
, bukankubectl get gateway
untuk memastikan Gateway istio tercantum.
Untuk informasi selengkapnya tentang masalah ini, lihat Gateway Kubernetes dan Gateway Istio.