Istio ja Kubernetes tootmises. Osa 2. JĂ€lgimine

Eelmisel artiklis Oleme uurinud Service Mesh Istio pĂ”hikomponente, tutvunud sĂŒsteemiga ja vastanud peamistele kĂŒsimustele, mis tavaliselt tekivad Istio kasutamise alguses. Selles osas vaatame, kuidas korraldada jĂ€litusteabe kogumist vĂ”rgus.

Istio ja Kubernetes tootmises. Osa 2. JĂ€lgimine

Esimene asi, mis paljudele arendajatele ja sĂŒsteemiadministraatoritele pĂ€he tuleb, kui nad kuulevad sĂ”nu Service Mesh, on jĂ€litamine. Ja tĂ”epoolest, lisame iga vĂ”rgu sĂ”lme spetsiaalse proxy-serveri, mille kaudu lĂ€bib kogu TCP-liiklus. Tundub, et nĂŒĂŒd on lihtne edastada teavet kĂ”igi vĂ”rgu interaktsioonide kohta. Kahjuks ilmuvad reaalsuses mitmed nĂŒansid, mida tuleb arvestada. Vaadakem neid.

MĂŒĂŒt number ĂŒks: me saame tasuta andmeid vĂ”rgu teekondade kohta.

Tegelikult saame suhteliselt tasuta vaid seotud nooltega sĂ”lmede meie sĂŒsteemis ja andmevahetuse mÀÀra, mis toimub teenuste vahel (tĂ”epoolest - ainult baitide arvu ajas). Siiski suhtlevad meie teenused enamikul juhtudel mĂ”ne rakendusprotokolliga, nagu HTTP, gRPC, Redis jne. Ja muidugi tahame nĂ€ha jĂ€litusteavet just nende protokollide kohta, tahame nĂ€ha pĂ€ringute mÀÀra, mitte andmevahetuse mÀÀra. Tahame mĂ”ista pĂ€ringute latentsust meie protokollis. LĂ”puks tahame nĂ€ha tĂ€pset teed, mida pĂ€ring lĂ€bib sissepÀÀsust meie sĂŒsteemi kuni kasutaja vastuse saamiseni. See ĂŒlesanne ei ole enam nii lihtne.

Esiteks vaatame, kuidas nĂ€eb vĂ€lja tracing span'ide saatmine arktitektuuri seisukohalt Istios. Nagu me esimeses osas mĂ€letame, on Istio-l telemeetriate kogumiseks eraldi komponent nimega Mixer. Siiski, kĂ€esolevas versioonis 1.0.* toimub saatmine otse proksiserveritest, nimelt envoy proksist. Envoy proksi toetab tracing span'ide saatmist zipkini protokolli kaudu vĂ€lja kastist. Teisi protokolle on vĂ”imalik lisada, kuid ainult plugina kaudu. Istio-s saame kohe valmis ja seadistatud envoy proksi, milles toetatakse ainult zipkini protokolli. Kui me soovime kasutada nĂ€iteks Jaeger protokolli ja saata tracing span'e UDP kaudu, siis peame ise koguma oma istio-proxy pildi. Kliendi pluginate tugi istio-proxy-le on olemas, kuid see on endiselt alpha versioonis. SeetĂ”ttu, kui me tahame hakkama saada ilma suure hulga kohandatud seadistusteta, kitseneb tehnoloogiate ring, mida saab tracing span'ide hoidmiseks ja vastuvĂ”tmiseks kasutada. Praegusest peamistest sĂŒsteemidest saame kasutada kas zipkini vĂ”i jaegeri, kuid saatmine toimub siiski zipkini ĂŒhilduva protokolli kaudu (mis on oluliselt vĂ€hem efektiivne). Zipkini protokoll eeldab, et kogu trace info saadetakse kollektoreille HTTP protokolli kaudu, mis on ĂŒsna kulukas.

Nagu ma juba ĂŒtlesin, soovime jĂ€lgida rakendustasandi protokolle. See tĂ€hendab, et proksiserverid, mis asuvad iga teenuse kĂ”rval, peavad mĂ”istma, milline suhtlus toimub. Vaikimisi konfigureerib Istio kĂ”igi sadamate jaoks plain TCP tĂŒĂŒbi, mis tĂ€hendab, et mingeid trace'e ei saadeta. Trace'ide saatmiseks tuleb kĂ”igepealt see valik peamise mesh config'iga sisse lĂŒlitada ja mis on vĂ€ga oluline, peab kĂ”ikide Kubernetes'e teenuste sadamate nimed olema vastavuses teenuses kasutatava protokolliga. NĂ€iteks nĂ€iteks niimoodi:

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

Saab kasutada ka koostatud nimesid, nÀiteks http-magic (Istio tuvastab http ja tunnustab seda porti http endpoint'ina). Formaat on jÀrgmine: proto-extra.

Kuna ei soovi paljusid konfiguratsioonide patch'e teha protokolli mÀÀramiseks, vĂ”ime kasutusele vĂ”tta hĂ€guse lahenduse: patch'ida Pilot komponent just siis, kui see just teeb protokolli mÀÀramise loogikat.. LĂ”puks tuleb kindlasti muuta see loogika standardselt ja liikuda ĂŒle kĂ”ikide portide nimede konventsioonile.

Kuna mĂ”ista, kas protokoll on tĂ”epoolest Ă”igesti mÀÀratletud, tuleb siseneda ĂŒhtegi sidecar konteinerisse koos envoy proxy’ga ja teha pĂ€ring admin-interfÀÀsi envoy porti aadressil /config_dump. Saadud seadistustes tuleb vaadata vajaliku teenuse vĂ€lja operation. Seda kasutatakse Istios identifikaatorina selle kohta, kuhu pĂ€ring toimub. Selle parameetri vÀÀrtuse kohandamiseks Istios (me nĂ€eme seda hiljem meie jĂ€lgimissĂŒsteemis) tuleb sidecar konteineri kĂ€ivitamise etapis mÀÀrata lipp serviceCluster. NĂ€iteks saab seda nii arvutada, kasutades allapoole suunatud API muutujatele kubernetes:

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

Hea nĂ€ide sellest, kuidas tracing envoy’is töötab, on siit.

Isegi endpoint, kuhu tracing span’e saata, tuleb samuti mÀÀrata envoy proxy kĂ€ivitamise lipuks, nĂ€iteks: --zipkinAddress tracing-collector.tracing:9411

MĂŒĂŒt number kaks: me saame umbes tasuta tĂ€ielikud jĂ€ljed pĂ€ringute lĂ€bimisest sĂŒsteemis vĂ€lja pakutud.

Kahjuks ei ole see tÔsi. Rakendamise keerukus sÔltub sellest, kuidas teil juba teenuste vahel suhtlemine on korraldatud. Miks see nii on?

Asi on selles, et istio-proxy peab mĂ”istma sissetulevate pĂ€ringute ja selle teenuse vĂ€ljuvate pĂ€ringute vastavust; pelgalt kogu liikluse pealtkuulamine ei ole piisav. Peab olema mingisugune ĂŒhenduse identifikaator. HTTP envoy proxy’s kasutatakse spetsiaalseid pĂ€iseid, mille abil envoy mĂ”istab, milline pĂ€ring teenusele genereerib konkreetseid pĂ€ringuid teistesse teenustesse. Nende pĂ€iste loetelu on:

  • x-request-id,
  • x-b3-traceid,
  • x-b3-spanid,
  • x-b3-parentspanid,
  • x-b3-sampled,
  • x-b3-flags,
  • x-ot-span-context.

Kui teil on ĂŒks ainus koht, nĂ€iteks pĂ”hiklient, kuhu saab sellist loogikat lisada, siis on kĂ”ik suurepĂ€rane, peate lihtsalt ootama selle teegi vĂ€rskendust kĂ”igilt klientidelt. Kuid kui teil on vĂ€ga heterogeenne sĂŒsteem ja teenuste vahel pole vĂ”rgu kaudu ĂŒhtsust, on see tĂ”enĂ€oliselt suur probleem. Ilma sellise loogika lisamata jÀÀb kogu jĂ€lgimisteave vaid "ĂŒhe taseme". See tĂ€hendab, et saame kĂ”ik teenustevahelised suhtlused, kuid need ei ole kokku pandud tĂ”husate vĂ”rgu lĂ€biviijate ahelateks.

KokkuvÔte

Istio pakub mugavat tööriista traabsanalyseerimise teabe kogumiseks vĂ”rgus, kuid tuleb mĂ”ista, et selle rakendamiseks tuleb oma sĂŒsteemi kohandada ja arvesse vĂ”tta Istio rakenduse eripĂ€ra. LĂ”ppkokkuvĂ”ttes tuleb lahendada kaks pĂ”hiprobleemi: rakendustasandi protokolli mÀÀratlemine (mida peaks toetama envoy proxy) ja teabe edastamise seadistamine nĂ”udluste sidususe kohta teenuse nĂ”uetelt teenustele (kasutades pĂ€iseid, juhul kui kasutada HTTP protokolli). Kui need kĂŒsimused on lahendatud, saame vĂ”imsa tööriista, mis vĂ”imaldab lĂ€bipaistvalt kogu teavet koguda isegi vĂ€ga heterogeensetes sĂŒsteemides, mis on kirjutatud erinevates keeltes ja raamistikudes.

JĂ€rgmises artiklis Service Meshi kohta vaatame ĂŒhte suurimat Istio probleemi – iga sidecar proxy konteineri suur mĂ€lu tarbimine, ja arutame, kuidas selle vastu vĂ”idelda.

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster