Istio lan Kubernetes ing produksi. Part 2. Tracing

Ing pungkasan artikel Kita ndeleng komponen dhasar Service Mesh Istio, kenal karo sistem kasebut lan mangsuli pitakon utama sing biasane muncul nalika miwiti nggarap Istio. Ing bagean iki kita bakal ndeleng carane ngatur koleksi informasi nelusuri liwat jaringan.

Istio lan Kubernetes ing produksi. Part 2. Tracing

Babagan pisanan sing dipikirake kanggo akeh pangembang lan administrator sistem nalika krungu tembung Service Mesh sing dilacak. Pancen, kita nambah server proxy khusus kanggo saben simpul jaringan sing dilewati kabeh lalu lintas TCP. Iku misale jek saiki bisa gampang ngirim informasi babagan kabeh interaksi jaringan ing jaringan. Sayange, ing kasunyatan, ana akeh nuansa sing kudu digatekake. Ayo padha ndeleng.

Kesalahan nomer siji: kita bisa entuk data hiking online kanthi gratis.

Nyatane, kanthi relatif gratis, kita mung bisa njaluk simpul sistem kita sing disambungake kanthi panah lan tingkat data sing ngliwati layanan (nyatane, mung jumlah bita saben unit wektu). Nanging, ing umume kasus, layanan kita komunikasi liwat sawetara jinis protokol lapisan aplikasi, kayata HTTP, gRPC, Redis, lan liya-liyane. Lan, mesthi, kita pengin ndeleng informasi nelusuri khusus kanggo protokol kasebut; kita pengin ndeleng tingkat panjaluk, dudu tingkat data. Kita pengin ngerti latensi panjalukan nggunakake protokol kita. Pungkasan, kita pengin ndeleng path lengkap sing dibutuhake saka panjalukan saka mlebu menyang sistem kanggo nampa respon saka pangguna. Masalah iki ora gampang dirampungake maneh.

Pisanan, ayo goleki kaya apa sing ngirim tracing span saka sudut pandang arsitektur ing Istio. Minangka kita elinga saka bagean pisanan, Istio duwe komponen kapisah disebut Mixer kanggo ngumpulake telemetri. Nanging, ing versi saiki 1.0.*, ngirim ditindakake langsung saka server proxy, yaiku, saka proxy utusan. Proxy utusan ndhukung ngirim tracing span nggunakake protokol zipkin metu saka kothak. Sampeyan bisa nyambungake protokol liyane, nanging mung liwat plugin. Kanthi Istio, kita langsung entuk proxy utusan sing dipasang lan dikonfigurasi, sing mung ndhukung protokol zipkin. Yen kita pengin nggunakake, contone, protokol Jaeger lan ngirim tracing span liwat UDP, banjur kita kudu mbangun gambar istio-proxy kita dhewe. Ana dhukungan kanggo plugin khusus kanggo istio-proxy, nanging isih ana ing versi alpha. Dadi, yen kita pengin nindakake tanpa akeh setelan khusus, sawetara teknologi sing digunakake kanggo nyimpen lan nampa jarak tracing suda. Saka sistem utama, nyatane, saiki sampeyan bisa nggunakake Zipkin dhewe, utawa Jaeger, nanging ngirim kabeh ana nggunakake protokol kompatibel zipkin (sing luwih efisien). Protokol zipkin dhewe kalebu ngirim kabeh informasi nelusuri menyang kolektor liwat protokol HTTP, sing cukup larang.

Kaya sing wis dakkandhakake, kita pengin nglacak protokol tingkat aplikasi. Iki tegese server proxy sing ana ing jejere saben layanan kudu ngerti apa jenis interaksi sing kedadeyan saiki. Kanthi gawan, Istio ngatur kabeh port dadi TCP kosong, tegese ora ana jejak sing bakal dikirim. Supaya tilak dikirim, sampeyan kudu, pisanan, ngaktifake pilihan iki ing konfigurasi bolong utama lan, apa penting banget, jeneng kabeh bandar layanan kubernetes entitas sesuai karo protokol sing digunakake ing layanan. Yaiku, contone, kaya iki:

apiVersion: v1
kind: Service
metadata:
  name: nginx
spec:
  ports:
  - port: 80
    targetPort: 80
    name: http
  selector:
    app: nginx

Sampeyan uga bisa nggunakake jeneng senyawa kaya http-sihir (Istio bakal weruh http lan ngenali port sing minangka http endpoint). Format kasebut: proto-ekstra.

Supaya ora kanggo nambal nomer akeh konfigurasi kanggo nemtokake protokol, sampeyan bisa nggunakake workaround reged: patch komponen Pilot ing wayahe nalika lagi wae. nindakake logika definisi protokol. Ing pungkasan, mesthi, bakal perlu kanggo ngganti logika iki standar lan ngalih menyang konvènsi jeneng kanggo kabeh bandar.

Kanggo ngerti apa protokol kasebut pancen ditetepake kanthi bener, sampeyan kudu mlebu ing salah sawijining wadhah sidecar kanthi proxy utusan lan njaluk panjaluk menyang port admin antarmuka utusan kanthi lokasi /config_dump. Ing konfigurasi sing diasilake, sampeyan kudu ndeleng lapangan operasi layanan sing dikarepake. Iki digunakake ing Istio minangka pengenal ing ngendi panjaluk kasebut ditindakake. Kanggo ngatur nilai parameter iki ing Istio (banjur kita bakal weruh ing sistem tracing kita), perlu kanggo nemtokake flag serviceCluster ing tataran ngluncurake wadhah sidecar. Contone, bisa diitung kaya iki saka variabel sing dipikolehi saka API kubernetes mudhun:

--serviceCluster ${POD_NAMESPACE}.$(echo ${POD_NAME} | sed -e 's/-[a-z0-9]*-[a-z0-9]*$//g')

Conto sing apik kanggo ngerti kepiye cara nglacak ing utusan kene.

Titik pungkasan dhewe kanggo ngirim tracing span uga kudu ditemtokake ing bendera peluncuran proxy utusan, contone: --zipkinAddress tracing-collector.tracing:9411

Misconception nomer loro: kita bisa entuk panjaluk lengkap kanthi murah liwat sistem metu saka kothak

Sayange, ora. Kerumitan implementasine gumantung carane sampeyan wis ngetrapake interaksi layanan. Kok ngono?

Kasunyatane yaiku supaya istio-proxy bisa ngerti korespondensi panjaluk sing mlebu menyang layanan karo sing ninggalake layanan sing padha, ora cukup mung nyegat kabeh lalu lintas. Sampeyan kudu duwe sawetara jinis pengenal komunikasi. Proksi utusan HTTP nggunakake header khusus, sing utusan ngerti panjaluk tartamtu kanggo layanan kasebut nggawe panjaluk khusus kanggo layanan liyane. Dhaptar header kasebut:

  • x-request-id,
  • x-b3-traceid,
  • x-b3-spanyol,
  • x-b3-parentspanid,
  • x-b3-sampel,
  • gendera x-b3,
  • x-ot-span-konteks.

Yen sampeyan duwe titik siji, contone, klien dhasar, kang sampeyan bisa nambah logika kuwi, banjur kabeh iku nggoleki, sampeyan mung kudu ngenteni perpustakaan iki dianyari kanggo kabeh klien. Nanging yen sampeyan duwe sistem sing heterogen banget lan ora ana manunggalake kanggo pindhah saka layanan menyang layanan liwat jaringan, mula iki bakal dadi masalah gedhe. Tanpa nambah logika kasebut, kabeh informasi nelusuri mung "tingkat siji". Sing, kita bakal nampa kabeh interaksi antar-layanan, nanging padha ora bakal glued menyang rentengan siji saka wacana liwat jaringan.

kesimpulan

Istio nyedhiyakake alat sing trep kanggo ngumpulake informasi nelusuri liwat jaringan, nanging sampeyan kudu ngerti manawa kanggo implementasine sampeyan kudu adaptasi sistem lan njupuk fitur saka implementasine Istio. AkibatΓ©, rong titik utama kudu dirampungake: nemtokake protokol tingkat aplikasi (sing kudu didhukung dening proxy utusan) lan nyetel terusake informasi babagan sambungan panjalukan menyang layanan saka panjalukan saka layanan (nggunakake header. , ing kasus protokol HTTP). Nalika masalah kasebut dirampungake, kita duwe alat sing kuat sing ngidini kita ngumpulake informasi kanthi transparan saka jaringan, sanajan ing sistem heterogen sing ditulis ing pirang-pirang basa lan kerangka kerja.

Ing artikel sabanjure babagan Service Mesh, kita bakal ndeleng salah sawijining masalah paling gedhe karo Istio - konsumsi RAM sing akeh ing saben wadhah proxy sidecar lan ngrembug babagan carane sampeyan bisa ngatasi.

Source: www.habr.com

Add a comment