Memecahkan masalah deployment Envoy
Panduan ini memberikan informasi untuk membantu Anda menyelesaikan masalah konfigurasi dengan klien Envoy saat Anda menjalankan Cloud Service Mesh dengan Google API. Untuk mengetahui informasi tentang cara menggunakan Client Status Discovery Service (CSDS) API guna membantu Anda menyelidiki masalah terkait Cloud Service Mesh, lihat Memahami status klien Cloud Service Mesh.
Menentukan versi Envoy yang diinstal pada VM
Gunakan petunjuk ini untuk memverifikasi versi Envoy mana yang berjalan di instance virtual machine (VM).
Untuk memverifikasi atau memeriksa versi Envoy, Anda dapat melakukan salah satu tindakan berikut:
Periksa atribut tamu VM pada jalur gce-service-proxy/proxy-version
:
gcloud compute --project cloud-vm-mesh-monitoring instances get-guest-attributes INSTANCE_NAME
--zone ZONEc --query-path=gce-service-proxy/proxy-versionNAMESPACE KEY VALUE gce-service-proxy proxy-version dc78069b10cc94fa07bb974b7101dd1b42e2e7bf/1.15.1-dev/Clean/RELEASE/BoringSSL
Periksa log instance Cloud Logging dari halaman Logging detail instance VM di Google Cloud Console dengan kueri seperti ini:
resource.type="gce_instance" resource.labels.instance_id="3633122484352464042" jsonPayload.message:"Envoy version"
Anda akan menerima respons seperti ini:
{ "insertId": "9zy0btf94961a", "jsonPayload": { "message": "Envoy Version: dc78069b10cc94fa07bb974b7101dd1b42e2e7bf/1.15.1-dev/Clean/RELEASE/BoringSSL", "localTimestamp": "2021-01-12T11:39:14.3991Z" }, "resource": { "type": "gce_instance", "labels": { "zone": "asia-southeast1-b", "instance_id": "3633122484352464042", "project_id": "cloud-vm-mesh-monitoring" } }, "timestamp": "2021-01-12T11:39:14.399200504Z", "severity": "INFO", "logName": "projects/cloud-vm-mesh-monitoring/logs/service-proxy-agent", "receiveTimestamp": "2021-01-12T11:39:15.407023427Z" }
Gunakan SSH untuk terhubung ke VM dan periksa versi binernya:
YOUR_USER_NAME@backend-mig-5f5651e1-517a-4269-b457-f6bdcf3d98bc-m3wt:~$ /usr/local/bin/envoy --version/usr/local/bin/envoy version: dc78069b10cc94fa07bb974b7101dd1b42e2e7bf/1.15.1-dev/Clean/RELEASE/BoringSSL
Gunakan SSH untuk terhubung ke VM dan antarmuka admin sebagai root:
root@backend-mig-5f5651e1-517a-4269-b457-f6bdcf3d98bc-m3wt:~# curl localhost:15000/server_info { "version": "dc78069b10cc94fa07bb974b7101dd1b42e2e7bf/1.15.1-dev/Clean/RELEASE/BoringSSL", "state": "LIVE", "hot_restart_version": "disabled", ... }
Lokasi log Envoy
Untuk memecahkan beberapa masalah, Anda perlu memeriksa log proxy Envoy.
Anda dapat menggunakan SSH untuk terhubung ke instance VM guna mendapatkan file log. Jalur tersebut kemungkinan adalah sebagai berikut.
/var/log/envoy/envoy.err.log
Proxy tidak terhubung ke Cloud Service Mesh
Jika proxy Anda tidak terhubung ke Cloud Service Mesh, lakukan langkah berikut:
Periksa log proxy Envoy untuk menemukan error saat menghubungkan ke
trafficdirector.googleapis.com
.Jika Anda menyiapkan
netfilter
(dengan menggunakaniptables
) untuk mengalihkan semua traffic ke proxy Envoy, pastikan pengguna (UID) yang Anda gunakan untuk menjalankan proxy dikecualikan dari pengalihan. Jika tidak, traffic akan terus-menerus melakukan loop kembali ke proxy.Pastikan Anda mengaktifkan API Cloud Service Mesh untuk project tersebut. Di bagian APIs & services untuk project Anda, cari error untuk Cloud Service Mesh API.
Pastikan cakupan akses API VM disetel untuk mengizinkan akses penuh ke Google Cloud API dengan menentukan hal berikut saat Anda membuat VM:
--scopes=https://www.googleapis.com/auth/cloud-platform
Pastikan akun layanan memiliki izin yang benar. Untuk informasi selengkapnya, lihat Mengaktifkan akun layanan untuk mengakses Traffic Director API.
Konfirmasi bahwa Anda dapat mengakses
trafficdirector.googleapis.com:443
dari VM. Jika ada masalah dengan akses ini, kemungkinan penyebabnya adalah firewall yang mencegah akses ketrafficdirector.googleapis.com
melalui port TCP443
, atau masalah resolusi DNS untuk nama hosttrafficdirector.googleapis.com
.Jika Anda menggunakan Envoy untuk proxy file bantuan, pastikan versi Envoy dirilis 1.24.9 atau yang lebih baru.
Layanan yang dikonfigurasi dengan Cloud Service Mesh tidak dapat dijangkau
Jika layanan yang dikonfigurasi dengan Cloud Service Mesh tidak dapat dijangkau, pastikan proxy file bantuan berjalan dan dapat terhubung ke Cloud Service Mesh.
Jika menggunakan Envoy sebagai proxy file bantuan, Anda dapat mengonfirmasinya dengan menjalankan perintah berikut:
Dari command line, pastikan proses Envoy sedang berjalan:
ps aux | grep envoy
Periksa konfigurasi runtime Envoy untuk mengonfirmasi bahwa Cloud Service Mesh telah mengonfigurasi resource dinamis. Untuk melihat konfigurasi, jalankan perintah ini:
curl http://localhost:15000/config_dump
Pastikan intersepsi traffic untuk proxy file bantuan disiapkan dengan benar. Untuk penyiapan pengalihan dengan
iptables
, jalankan perintahiptables
lalugrep
output untuk memastikan aturan Anda ada di sana:sudo iptables -t nat -S | grep ISTIO
Berikut adalah contoh output untuk
iptables
yang mencegat alamat IP virtual (VIP)10.0.0.1/32
dan meneruskannya ke proxy Envoy yang berjalan pada port15001
sebagai UID1006
:-N ISTIO_IN_REDIRECT -N ISTIO_OUTPUT -N ISTIO_REDIRECT -A OUTPUT -p tcp -j ISTIO_OUTPUT -A ISTIO_IN_REDIRECT -p tcp -j REDIRECT --to-ports 15001 -A ISTIO_OUTPUT -m owner --uid-owner 1006 -j RETURN -A ISTIO_OUTPUT -d 127.0.0.1/32 -j RETURN -A ISTIO_OUTPUT -d 10.0.0.1/32 -j ISTIO_REDIRECT -A ISTIO_OUTPUT -j RETURN
Jika instance VM dibuat melalui Google Cloud Console, beberapa modul yang terkait dengan IPv6 tidak akan diinstal dan tersedia sebelum mulai ulang. Hal ini menyebabkan iptables
gagal karena tidak adanya dependensi. Dalam kasus ini, mulai ulang VM dan jalankan kembali
proses penyiapan, yang akan menyelesaikan masalah. VM Compute Engine yang Anda buat menggunakan Google Cloud CLI diperkirakan tidak mengalami masalah ini.
Layanan berhenti dapat dijangkau saat logging akses Envoy dikonfigurasi
Jika Anda menggunakan TRAFFICDIRECTOR_ACCESS_LOG_PATH
untuk mengonfigurasi log akses Envoy seperti yang dijelaskan dalam Mengonfigurasi atribut bootstrap Envoy untuk Cloud Service Mesh, pastikan pengguna sistem yang menjalankan proxy Envoy memiliki izin untuk menulis ke lokasi log akses yang ditentukan.
Kegagalan dalam memberikan izin yang diperlukan akan menyebabkan pemroses tidak diprogram pada proxy dan dapat dideteksi dengan memeriksa pesan error berikut di log proxy Envoy:
gRPC config for type.googleapis.com/envoy.api.v2.Listener rejected: Error adding/updating listener(s) TRAFFICDIRECTOR_INTERCEPTION_PORT: unable to open file '/var/log/envoy.log': Permission denied
Untuk mengatasi masalah ini, ubah izin file yang dipilih untuk log akses agar dapat ditulis oleh pengguna Envoy.
Pesan error di log Envoy menunjukkan masalah konfigurasi
Bagian ini berlaku untuk deployment yang menggunakan API load balancing.
Jika mengalami masalah dengan konfigurasi Cloud Service Mesh, Anda mungkin akan melihat salah satu pesan error berikut di log Envoy:
warning envoy config StreamAggregatedResources gRPC config stream closed: 5, Cloud Service Mesh configuration was not found for network "VPC_NAME" in project "PROJECT_NUMBER".
warning envoy upstream StreamLoadStats gRPC config stream closed: 5, Cloud Service Mesh configuration was not found for network "VPC_NAME" in project "PROJECT_NUMBER".
warning envoy config StreamAggregatedResources gRPC config stream closed: 5, Requested entity was not found.
warning envoy upstream StreamLoadStats gRPC config stream closed: 5, Requested entity was not found.
Cloud Service Mesh configuration was not found.
Pesan error terakhir (Traffic Director configuration was not found
) umumnya menunjukkan bahwa Envoy meminta konfigurasi dari Cloud Service Mesh, tetapi tidak ada konfigurasi yang cocok yang dapat ditemukan. Saat terhubung ke Cloud Service Mesh, Envoy akan menampilkan nama jaringan VPC (misalnya, my-network
). Cloud Service Mesh kemudian mencari aturan penerusan yang memiliki skema load balancing INTERNAL_SELF_MANAGED
dan mereferensikan nama jaringan VPC yang sama.
Untuk memperbaiki error ini, lakukan hal berikut:
Pastikan ada aturan penerusan di jaringan Anda yang memiliki skema load balancing
INTERNAL_SELF_MANAGED
. Perhatikan nama jaringan VPC aturan penerusan.Jika Anda menggunakan Cloud Service Mesh dengan deployment Envoy otomatis di Compute Engine, pastikan nilai yang diberikan ke flag
--service-proxy:network
cocok dengan nama jaringan VPC aturan penerusan.Jika Anda menggunakan Cloud Service Mesh dengan deployment Envoy manual di Compute Engine, periksa file bootstrap Envoy untuk menemukan hal berikut:
- Pastikan nilai untuk variabel
TRAFFICDIRECTOR_NETWORK_NAME
cocok dengan nama jaringan VPC aturan penerusan. - Pastikan nomor project ditetapkan dalam variabel
TRAFFICDIRECTOR_GCP_PROJECT_NUMBER
.
- Pastikan nilai untuk variabel
Jika Anda melakukan deployment di GKE, dan menggunakan injektor otomatis, pastikan nomor project dan nama jaringan VPC dikonfigurasi dengan benar, sesuai dengan petunjuk dalam penyiapan Cloud Service Mesh untuk Pod GKE dengan injeksi Envoy otomatis.
Pemecahan masalah untuk Compute Engine
Bagian ini berisi petunjuk pemecahan masalah deployment Envoy untuk Compute Engine.
Proses bootstrap Envoy dan VM serta operasi pengelolaan siklus proses lebih lanjut dapat gagal karena berbagai alasan, termasuk masalah konektivitas sementara, repositori yang rusak, bug dalam skrip bootstrap dan agen di VM, serta tindakan pengguna yang tidak terduga.
Saluran komunikasi untuk pemecahan masalah
Google Cloud menyediakan saluran komunikasi yang dapat Anda gunakan untuk membantu memahami proses bootstrap dan status saat ini dari komponen yang berada di VM Anda.
Logging output port serial virtual
Sistem operasi VM, BIOS, dan entitas level sistem lainnya biasanya menulis output ke port serial. Output ini berguna untuk memecahkan masalah error sistem, booting yang gagal, masalah startup, dan masalah penonaktifan.
Agen bootstrap Compute Engine mencatat semua tindakan yang dilakukan ke port
serial 1. Hal ini termasuk peristiwa sistem, dimulai dengan penginstalan paket dasar
hingga mendapatkan data dari server metadata instance, konfigurasi iptables
, dan status penginstalan Envoy.
Agen di VM mencatat status kondisi proses Envoy, layanan Cloud Service Mesh yang baru ditemukan, dan informasi lainnya yang mungkin berguna saat Anda menyelidiki masalah terkait VM.
Logging Cloud Monitoring
Data yang diekspos dalam output port serial juga akan dicatat ke Monitoring, yang menggunakan library Golang dan mengekspor log ke log terpisah untuk mengurangi derau. Karena log ini adalah log level instance, Anda mungkin menemukan log proxy layanan di halaman yang sama dengan log instance lainnya.
Atribut tamu VM
Atribut tamu adalah jenis metadata kustom tertentu yang dapat menjadi tujuan penulisan aplikasi Anda saat dijalankan pada instance Anda. Setiap aplikasi atau pengguna di instance Anda dapat membaca dan menulis data ke nilai metadata atribut tamu ini.
Skrip bootstrap Compute Engine Envoy dan agen di VM menampilkan atribut
dengan informasi tentang proses bootstrap dan status Envoy saat ini.
Semua atribut tamu ditampilkan dalam namespace gce-service-proxy
:
gcloud compute instances get-guest-attributes INSTANCE_NAME \ --query-path=gce-service-proxy/ \ --zone=ZONE
Jika Anda menemukan masalah, sebaiknya periksa nilai atribut
tamu bootstrap-status
dan bootstrap-last-failure
. Nilai
bootstrap-status
selain FINISHED
menunjukkan bahwa lingkungan
Envoy belum dikonfigurasi. Nilai bookstrap-last-failure
mungkin menunjukkan masalahnya.
Tidak dapat menjangkau layanan Cloud Service Mesh dari VM yang dibuat menggunakan template instance yang mendukung service-proxy
Untuk memperbaiki masalah ini, ikuti langkah-langkah berikut:
Penginstalan komponen proxy layanan pada VM mungkin belum selesai atau gagal. Gunakan perintah berikut untuk menentukan apakah semua komponen telah diinstal dengan benar:
gcloud compute instances get-guest-attributes INSTANCE_NAME \ --query-path=gce-service-proxy/ \ --zone=ZONE
Atribut tamu
bootstrap-status
disetel ke salah satu nilai berikut:[none]
menunjukkan bahwa penginstalan belum dimulai. VM mungkin masih sedang {i>booting<i}. Periksa kembali statusnya dalam beberapa menit.IN PROGRESS
menunjukkan bahwa penginstalan dan konfigurasi komponen proxy layanan belum selesai. Ulangi pemeriksaan status untuk mengetahui informasi terbaru tentang prosesnya.FAILED
menunjukkan bahwa penginstalan atau konfigurasi komponen gagal. Periksa pesan error dengan membuat kueri atributgce-service-proxy/bootstrap-last-failure1
.FINISHED
menunjukkan bahwa proses penginstalan dan konfigurasi selesai tanpa error apa pun. Gunakan petunjuk berikut untuk memverifikasi bahwa intersepsi traffic dan proxy Envoy dikonfigurasi dengan benar.
Intersepsi traffic pada VM tidak dikonfigurasi dengan benar untuk layanan berbasis Cloud Service Mesh. Login ke VM dan periksa konfigurasi
iptables
:gcloud compute ssh INSTANCE_NAME \ --zone=ZONE \ sudo iptables -L -t nat
Periksa rantai
SERVICE_PROXY_SERVICE_CIDRS
untuk entriSERVICE_PROXY_REDIRECT
seperti berikut:Chain SERVICE_PROXY_SERVICE_CIDRS (1 references) target prot opt source destination ... SERVICE_PROXY_REDIRECT all -- anywhere 10.7.240.0/20
Untuk setiap layanan, harus ada alamat IP atau CIDR yang cocok di kolom
destination
. Jika tidak ada entri untuk alamat IP virtual (VIP), berarti ada masalah dengan mengisi konfigurasi proxy Envoy dari Cloud Service Mesh, atau agen di VM gagal.Proxy Envoy belum menerima konfigurasinya dari Cloud Service Mesh. Login ke VM untuk memeriksa konfigurasi proxy Envoy:
gcloud compute ssh INSTANCE_NAME \ --zone=ZONE \ sudo curl localhost:15000/config_dump
Periksa konfigurasi pemroses yang diterima dari Cloud Service Mesh. Misalnya:
"dynamic_active_listeners": [ ... "filter_chains": [{ "filter_chain_match": { "prefix_ranges": [{ "address_prefix": "10.7.240.20", "prefix_len": 32 }], "destination_port": 80 }, ... "route_config_name": "URL_MAP/PROJECT_NUMBER.td-routing-rule-1" ... ]
address_prefix
adalah alamat IP virtual (VIP) dari layanan Cloud Service Mesh. Kolom ini mengarah ke peta URL bernamatd-routing-rule-1
. Periksa apakah layanan yang ingin Anda hubungkan sudah disertakan dalam konfigurasi pemroses.Agen di VM tidak berjalan. Agen di VM secara otomatis mengonfigurasi intersepsi traffic saat layanan Cloud Service Mesh baru dibuat. Jika agen tidak berjalan, semua traffic ke layanan baru akan langsung menuju VIP, mengabaikan proxy Envoy, dan akan kehabisan waktu.
Verifikasi status agen di VM dengan menjalankan perintah berikut:
gcloud compute instances get-guest-attributes INSTANCE_NAME \ --query-path=gce-service-proxy/ \ --zone=ZONE
Periksa atribut agen di VM. Nilai atribut
agent-heartbeat
memiliki waktu saat agen terakhir kali melakukan tindakan atau pemeriksaan. Jika nilainya lebih dari lima menit, agen macet, dan Anda harus membuat ulang VM dengan menggunakan perintah berikut:gcloud compute instance-groups managed recreate-instance
Atribut
agent-last-failure
mengekspos error terakhir yang terjadi dalam agen. Ini mungkin masalah sementara yang akan diselesaikan saat berikutnya agen memeriksa—misalnya, jika error-nya adalahCannot reach the Cloud Service Mesh API server
—atau mungkin merupakan error permanen. Tunggu beberapa menit, lalu periksa kembali error-nya.
Intersepsi traffic masuk dikonfigurasi ke port workload, tetapi Anda tidak dapat terhubung ke port dari luar VM
Untuk memperbaiki masalah ini, ikuti langkah-langkah berikut:
Penginstalan komponen proxy layanan pada VM mungkin belum selesai atau gagal. Gunakan perintah berikut untuk menentukan apakah semua komponen telah diinstal dengan benar:
gcloud compute instances get-guest-attributes INSTANCE_NAME \ --query-path=gce-service-proxy/ \ --zone=ZONE
Atribut tamu
bootstrap-status
disetel ke salah satu nilai berikut:[none]
menunjukkan bahwa penginstalan belum dimulai. VM mungkin masih sedang {i>booting<i}. Periksa kembali statusnya dalam beberapa menit.IN PROGRESS
menunjukkan bahwa penginstalan dan konfigurasi komponen proxy layanan belum selesai. Ulangi pemeriksaan status untuk mengetahui informasi terbaru tentang prosesnya.FAILED
menunjukkan bahwa penginstalan atau konfigurasi komponen gagal. Periksa pesan error dengan membuat kueri atributgce-service-proxy/bootstrap-last-failure1
.FINISHED
menunjukkan bahwa proses penginstalan dan konfigurasi selesai tanpa error apa pun. Gunakan petunjuk berikut untuk memverifikasi bahwa intersepsi traffic dan proxy Envoy dikonfigurasi dengan benar.
Intersepsi traffic pada VM tidak dikonfigurasi dengan benar untuk traffic masuk. Login ke VM dan periksa konfigurasi
iptables
:gcloud compute ssh INSTANCE_NAME \ --zone=ZONE \ sudo iptables -L -t nat
Periksa rantai
SERVICE_PROXY_INBOUND
untuk entriSERVICE_PROXY_IN_REDIRECT
seperti berikut:Chain SERVICE_PROXY_INBOUND (1 references) target prot opt source destination ... SERVICE_PROXY_IN_REDIRECT tcp -- anywhere anywhere tcp dpt:mysql
Untuk setiap port yang ditentukan dalam
service-proxy:serving-ports
, harus ada port yang cocok di kolomdestination
. Jika tidak ada entri untuk port, semua traffic masuk akan langsung menuju ke port ini, dengan mengabaikan proxy Envoy.Pastikan tidak ada aturan lain yang mengalihkan traffic ke port ini atau semua port kecuali satu port tertentu.
Proxy Envoy belum menerima konfigurasinya untuk port masuk dari Cloud Service Mesh. Login ke VM untuk memeriksa konfigurasi proxy Envoy:
gcloud compute ssh INSTANCE_NAME \ --zone=ZONE \ sudo curl localhost:15000/config_dump
Cari konfigurasi pemroses inbound yang diterima dari Cloud Service Mesh:
"dynamic_active_listeners": [ ... "filter_chains": [{ "filter_chain_match": { "prefix_ranges": [{ "address_prefix": "10.0.0.1", "prefix_len": 32 }], "destination_port": 80 }, ... "route_config_name": "inbound|default_inbound_config-80" ... ]
route_config_name
, dimulai denganinbound
, menunjukkan layanan khusus yang dibuat untuk tujuan intersepsi traffic masuk. Periksa apakah port yang ingin Anda hubungkan sudah disertakan dalam konfigurasi pemroses di bagiandestination_port
.
Masalah saat koneksi menggunakan protokol yang mengutamakan server
Beberapa aplikasi, seperti MySQL, menggunakan protokol di mana server mengirim paket pertama. Artinya, pada saat koneksi awal, server mengirim byte pertama. Protokol dan aplikasi ini tidak didukung oleh Cloud Service Mesh.
Memecahkan masalah kondisi mesh layanan
Panduan ini memberikan informasi untuk membantu Anda menyelesaikan masalah konfigurasi Cloud Service Mesh.
Perilaku Cloud Service Mesh saat sebagian besar endpoint tidak responsif
Untuk keandalan yang lebih baik, saat 99% endpoint tidak responsif, Cloud Service Mesh akan mengonfigurasi bidang data untuk mengabaikan status respons endpoint. Sebagai gantinya, bidang data akan menyeimbangkan traffic di antara semua endpoint karena port yang mungkin masih berfungsi masih berfungsi.
Backend yang tidak responsif menyebabkan distribusi traffic yang kurang optimal
Cloud Service Mesh menggunakan informasi dalam resource HealthCheck
yang dilampirkan ke layanan backend untuk mengevaluasi kondisi backend Anda.
Cloud Service Mesh menggunakan status respons ini untuk mengarahkan traffic ke backend responsif terdekat. Jika beberapa backend Anda tidak responsif, traffic mungkin akan terus diproses, tetapi dengan distribusi yang kurang optimal. Misalnya, traffic mungkin mengalir ke region tempat backend yang sehat masih ada, tetapi jauh lebih jauh dari klien sehingga menyebabkan latensi. Untuk mengidentifikasi dan memantau status kondisi backend Anda, coba langkah-langkah berikut:
- Memeriksa status respons layanan backend Anda di Konsol Google Cloud.
Buka layanan Cloud Service Mesh - Pastikan logging diaktifkan
untuk resource
HealthCheck
. - Jika health check mulai gagal baru-baru ini, periksa Cloud Audit Logs untuk mengetahui apakah konfigurasi
HealthCheck
Anda baru-baru ini diubah.
Langkah selanjutnya
- Untuk mengatasi masalah konfigurasi saat men-deploy layanan gRPC tanpa proxy, lihat Memecahkan masalah deployment yang menggunakan gRPC tanpa proxy.
- Untuk menemukan dukungan tambahan terkait penggunaan Cloud Service Mesh, lihat Mendapatkan dukungan.