Istio na Kubernetes dina produksi. Bagian 2. Nyukcruk

Di tempo anu kalangkung artikel Kami ningali komponén dasar Service Mesh Istio, kenal sareng sistem sareng ngajawab patarosan utama anu biasana timbul nalika ngamimitian damel sareng Istio. Dina bagian ieu urang bakal ningali kumaha ngatur kumpulan inpormasi ngalacak dina jaringan.

Istio na Kubernetes dina produksi. Bagian 2. Nyukcruk

Hal kahiji anu aya dina pikiran pikeun seueur pamekar sareng pangurus sistem nalika aranjeunna nguping kecap Service Mesh dilacak. Mémang, kami nambihan server proxy khusus ka unggal titik jaringan anu ngalangkungan sadaya lalu lintas TCP. Sigana ayeuna tiasa gampang ngirim inpormasi ngeunaan sadaya interaksi jaringan dina jaringan. Hanjakalna, dina kanyataanana aya seueur nuansa anu kedah diperhatoskeun. Hayu urang tingali aranjeunna.

Misconception nomer hiji: urang bisa meunangkeun data hiking online haratis.

Kanyataanna, rélatif bébas, urang ngan bisa meunangkeun titik tina sistem urang disambungkeun ku panah jeung laju data nu ngalirkeun antara jasa (dina kanyataanana, ngan jumlah bait per unit waktu). Nanging, dina kalolobaan kasus, jasa kami komunikasi dina sababaraha jinis protokol lapisan aplikasi, sapertos HTTP, gRPC, Redis, sareng sajabana. Sareng, tangtosna, urang hoyong ningali ngalacak inpormasi khusus pikeun protokol ieu; urang hoyong ningali tingkat pamundut, sanés tingkat data. Kami hoyong ngartos latency pamundut nganggo protokol kami. Tungtungna, urang hoyong ningali jalur lengkep anu dipénta tina logging kana sistem kami pikeun nampi réspon ti pangguna. masalah ieu geus euweuh jadi gampang pikeun ngajawab.

Kahiji, hayu urang tingali kumaha ngirim ngalacak bentang katingalina tina sudut pandang arsitéktur di Istio. Sakumaha urang émut tina bagian kahiji, Istio gaduh komponén anu misah anu disebut Mixer pikeun ngumpulkeun telemétri. Nanging, dina vérsi ayeuna 1.0.*, ngirim langsung ti server proxy, nyaéta, ti proxy utusan. Proksi utusan ngadukung ngirim jarak ngalacak nganggo protokol zipkin out of the box. Kasebut nyaéta dimungkinkeun pikeun nyambungkeun protokol séjén, tapi ngan ngaliwatan plugin a. Kalayan Istio kami langsung kéngingkeun proksi utusan anu dirakit sareng dikonpigurasi, anu ngan ukur ngadukung protokol zipkin. Upami urang hoyong nganggo, contona, protokol Jaeger sareng ngirim ngalacak ngalangkungan UDP, maka urang kedah ngawangun gambar istio-proxy urang sorangan. Aya dukungan pikeun plugins khusus pikeun istio-proxy, tapi masih aya dina versi alfa. Ku alatan éta, lamun urang rék ngalakukeun tanpa angka nu gede ngarupakeun setélan custom, rentang téhnologi dipaké pikeun nyimpen jeung narima bentang tracing dikirangan. Tina sistem utama, kanyataanna, ayeuna anjeun tiasa nganggo Zipkin sorangan, atanapi Jaeger, tapi ngirim sadayana didinya nganggo protokol anu cocog sareng zipkin (anu kirang efisien). Protokol zipkin sorangan ngalibatkeun ngirim sadaya inpormasi ngalacak ka kolektor via protokol HTTP, anu lumayan mahal.

Sakumaha anu kuring parantos nyarios, urang hoyong ngalacak protokol tingkat aplikasi. Ieu ngandung harti yén server proxy anu nangtung di gigireun unggal jasa kedah ngartos jenis interaksi anu lumangsung ayeuna. Sacara standar, Istio ngonpigurasikeun sadaya palabuhan janten TCP polos, anu hartosna henteu aya jejak anu bakal dikirim. Supados ngambah dikirim, Anjeun kudu, firstly, ngaktipkeun pilihan ieu dina config bolong utama jeung, naon anu kacida penting, ngaran sakabeh palabuhan tina entitas jasa kubernetes luyu jeung protokol anu dipaké dina layanan dina. Nyaéta, contona, sapertos kieu:

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

Anjeun oge bisa make ngaran sanyawa kawas http-magic (Istio bakal ningali http sarta ngakuan yén port salaku titik tungtung http). formatna nyaéta: proto-ekstra.

Dina raraga teu patch sajumlah badag konfigurasi pikeun nangtukeun protokol, anjeun tiasa nganggo workaround kotor: patch komponén Pilot dina momen nalika éta ngan. ngalaksanakeun logika harti protokol. Tungtungna, tangtosna, bakal perlu ngarobah logika ieu standar sarta pindah ka konvénsi ngaran pikeun sakabéh palabuhan.

Pikeun ngartos naha protokol leres-leres didefinisikeun, anjeun kedah lebet kana salah sahiji wadah sidecar kalayan proxy utusan sareng naroskeun ka port admin antarmuka utusan sareng lokasi /config_dump. Dina konfigurasi anu dihasilkeun, anjeun kedah ningali widang operasi tina jasa anu dipikahoyong. Hal ieu dipaké dina Istio salaku identifier pikeun dimana pamundut dijieun. Pikeun ngaropea nilai parameter ieu dina Istio (urang lajeng bakal ningali eta dina sistem tracing kami), perlu pikeun nangtukeun bendera serviceCluster dina tahap launching wadahna sidecar. Salaku conto, éta tiasa diitung sapertos kieu tina variabel anu dicandak tina API kubernetes ka handap:

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

Conto anu saé pikeun ngartos kumaha cara ngalacak dina utusan di dieu.

Titik tungtung sorangan pikeun ngirim bentang ngalacak ogé kedah disebatkeun dina bendera peluncuran proxy utusan, contona: --zipkinAddress tracing-collector.tracing:9411

Misconception nomer dua: urang murah tiasa ngambah ngambah lengkep pamundut ngaliwatan sistem out of the box.

Hanjakal, éta henteu. Pajeulitna palaksanaan gumantung kana kumaha anjeun parantos ngalaksanakeun interaksi jasa. Kunaon éta?

Kanyataanna nyaéta supados istio-proxy tiasa ngartos korespondensi pamundut anu asup kana jasa sareng anu ninggalkeun jasa anu sami, henteu cekap ngan saukur nyegat sadaya lalu lintas. Anjeun kedah gaduh sababaraha jinis identifier komunikasi. Proksi utusan HTTP nganggo lulugu khusus, anu ku utusan ngartos paménta khusus pikeun jasa anu ngahasilkeun pamundut khusus pikeun jasa anu sanés. Daptar lulugu sapertos kieu:

  • x-pamundut-id
  • x-b3-traceid,
  • x-b3-Spanyol,
  • x-b3-parentspanid,
  • x-b3-sampel,
  • x-b3-bandéra,
  • x-ot-span-konteks.

Upami anjeun gaduh titik tunggal, contona, klien dasar, dimana anjeun tiasa nambihan logika sapertos kitu, maka sadayana henteu kunanaon, anjeun ngan ukur kedah ngantosan perpustakaan ieu diropéa pikeun sadaya klien. Tapi lamun boga sistem pisan hétérogén tur euweuh ngahijikeun Tatar dina pindah ti layanan ka layanan ngaliwatan jaringan, ieu paling dipikaresep bakal jadi masalah badag. Tanpa nambihan logika sapertos kitu, sadaya inpormasi ngalacak ngan ukur "tingkat tunggal". Hartina, urang bakal nampa sakabeh interaksi antar-layanan, tapi maranéhna moal glued kana ranté tunggal petikan ngaliwatan jaringan.

kacindekan

Istio nyayogikeun alat anu gampang pikeun ngumpulkeun inpormasi dina jaringan, tapi anjeun kedah ngartos yén pikeun palaksanaan anjeun kedah adaptasi sistem anjeun sareng tumut kana fitur palaksanaan Istio. Hasilna, dua titik utama kedah direngsekeun: netepkeun protokol tingkat aplikasi (anu kedah dirojong ku proksi utusan) sareng nyetél neraskeun inpormasi ngeunaan sambungan pamundut ka jasa tina pamundut ti jasa (nganggo header. , dina kasus protokol HTTP). Nalika masalah ieu direngsekeun, urang gaduh alat anu kuat anu ngamungkinkeun urang sacara transparan ngumpulkeun inpormasi tina jaringan, bahkan dina sistem anu hétérogén anu ditulis dina seueur basa sareng kerangka anu béda.

Dina artikel salajengna ngeunaan Service bolong, urang bakal ningali salah sahiji masalah pangbadagna kalayan Istio - konsumsi badag RAM ku unggal wadahna proxy sidecar sarta ngabahas kumaha anjeun tiasa nungkulan eta.

sumber: www.habr.com

Tambahkeun komentar