Istio ak Kubernetes nan pwodiksyon. Pati 2. Trase

Nan tan lontan an Atik Nou te gade eleman debaz yo nan Service Mesh Istio, te fè konesans ak sistèm nan epi reponn kesyon prensipal yo ki anjeneral leve lè yo kòmanse travay ak Istio. Nan pati sa a nou pral gade ki jan yo òganize koleksyon enfòmasyon trase sou yon rezo.

Istio ak Kubernetes nan pwodiksyon. Pati 2. Trase

Premye bagay ki vin nan tèt ou pou anpil devlopè ak administratè sistèm lè yo tande mo Service Mesh ap trase. Vreman vre, nou ajoute yon sèvè proxy espesyal nan chak ne rezo kote tout trafik TCP pase. Li sanble ke li se kounye a posib yo fasil voye enfòmasyon sou tout entèraksyon rezo sou rezo a. Malerezman, an reyalite, gen anpil nuans ki bezwen pran an kont. Ann gade yo.

Miskonsepsyon nimewo en: nou ka jwenn done randone sou entènèt gratis.

An reyalite, pou relativman gratis, nou ka sèlman jwenn nœuds yo nan sistèm nou an ki konekte pa flèch ak pousantaj done ki pase ant sèvis (an reyalite, sèlman kantite bytes pou chak inite tan). Sepandan, nan pifò ka yo, sèvis nou yo kominike sou kèk kalite pwotokòl kouch aplikasyon, tankou HTTP, gRPC, Redis, ak sou sa. Epi, nan kou, nou vle wè enfòmasyon trase espesyalman pou pwotokòl sa yo; nou vle wè to demann lan, pa to done a. Nou vle konprann latansi demann yo itilize pwotokòl nou an. Finalman, nou vle wè chemen an konplè ke yon demann pran soti nan antre nan sistèm nou an pou resevwa yon repons nan men itilizatè a. Pwoblèm sa a pa fasil pou rezoud ankò.

Premyèman, an n gade nan ki sa voye trase spans sanble nan yon pwen de vi achitekti nan Istio. Kòm nou sonje nan premye pati a, Istio gen yon eleman separe ki rele mixer pou kolekte telemetri. Sepandan, nan vèsyon aktyèl la 1.0.*, voye fè dirèkteman nan serveurs prokurasyon, sètadi, soti nan prokurasyon anvwaye. Envoy proxy sipòte voye trase span lè l sèvi avèk pwotokòl zipkin la soti nan bwat la. Li posib pou konekte lòt pwotokòl, men sèlman atravè yon plugin. Avèk Istio nou imedyatman jwenn yon prokurasyon anvwaye reyini ak konfigirasyon, ki sèlman sipòte pwotokòl zipkin la. Si nou vle sèvi ak, pou egzanp, pwotokòl Jaeger la epi voye trase spans atravè UDP, Lè sa a, nou pral bezwen bati pwòp imaj istio-proxy nou an. Gen sipò pou grefon koutim pou istio-proxy, men li toujou nan vèsyon an alfa. Se poutèt sa, si nou vle fè san yo pa yon gwo kantite anviwònman koutim, seri a nan teknoloji yo itilize pou estoke ak resevwa trase span redwi. Nan sistèm prensipal yo, an reyalite, kounye a ou ka itilize Zipkin tèt li, oswa Jaeger, men voye tout bagay la lè l sèvi avèk pwotokòl la konpatib zipkin (ki se anpil mwens efikas). Pwotokòl zipkin nan tèt li enplike voye tout enfòmasyon trase bay pèseptè atravè pwotokòl la HTTP, ki se byen chè.

Kòm mwen te deja di, nou vle trase pwotokòl nivo aplikasyon yo. Sa vle di ke serveurs prokurasyon yo ki kanpe akote chak sèvis dwe konprann ki kalite entèraksyon k ap pase kounye a. Pa default, Istio configured tout pò yo dwe plenn TCP, ki vle di pa gen okenn tras yo pral voye. Pou tras yo dwe voye, ou dwe, premyèman, pèmèt opsyon sa a nan konfigirasyon may prensipal la epi, sa ki trè enpòtan, non tout pò nan antite sèvis kubernetes an akò ak pwotokòl la ki itilize nan sèvis la. Sa se, pou egzanp, tankou sa a:

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

Ou kapab tou itilize non konpoze tankou http-majik (Istio pral wè http epi rekonèt pò sa a kòm yon pwen final http). Fòma a se: proto-extra.

Pou pa patch yon gwo kantite konfigirasyon detèmine pwotokòl la, ou ka itilize yon solisyon sal: patch eleman Pilòt la nan moman sa a lè li jis. fè lojik definisyon pwotokòl. Nan fen a, nan kou, li pral nesesè yo chanje lojik sa a nan estanda ak chanje nan yon konvansyon nonmen pou tout pò yo.

Pou w ka konprann si wi ou non pwotokòl la vrèman defini kòrèkteman, ou bezwen antre nan nenpòt nan veso sidecar yo ak envoy proxy epi fè yon demann nan pò admin nan koòdone anvwaye ak kote /config_dump. Nan konfigirasyon an ki kapab lakòz, ou bezwen gade nan jaden an operasyon nan sèvis la vle. Yo itilize li nan Istio kòm yon idantifyan pou kote yo fè demann lan. Yo nan lòd yo Customize valè a nan paramèt sa a nan Istio (nou pral Lè sa a, wè li nan sistèm trase nou an), li nesesè presize drapo a serviceCluster nan etap nan lanse veso a sidecar. Pou egzanp, li ka kalkile tankou sa a soti nan varyab yo jwenn nan anba a kubernetes API:

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

Yon bon egzanp pou konprann ki jan trase travay nan Envoy se isit la.

Yo dwe espesifye pwen final la li menm pou voye trace spans tou nan drapo anvwaye prokurasyon yo, pou egzanp: --zipkinAddress tracing-collector.tracing:9411

Miskonsepsyon nimewo de: nou ka pa chè jwenn tras konplè demann nan sistèm nan soti nan bwat la

Malerezman, li pa. Konpleksite aplikasyon an depann sou fason ou te deja aplike entèraksyon sèvis yo. Poukisa se sa?

Reyalite a se ke pou istio-proxy kapab konprann korespondans demann fèk ap rantre nan yon sèvis ak moun ki kite menm sèvis la, li pa ase tou senpleman entèsepte tout trafik. Ou bezwen gen yon kalite idantifyan kominikasyon. HTTP anvwaye proxy sèvi ak tèt espesyal, pa ki anvwaye konprann ki demann espesifik nan sèvis la jenere demann espesifik nan lòt sèvis. Lis tèt sa yo:

  • x-demann-id,
  • x-b3-traceid,
  • x-b3-spanid,
  • x-b3-parentspanid,
  • x-b3-pran echantiyon,
  • x-b3-drapo,
  • x-ot-span-context.

Si ou gen yon sèl pwen, pou egzanp, yon kliyan debaz, nan ki ou ka ajoute lojik sa yo, Lè sa a, tout bagay anfòm, ou jis bezwen tann pou bibliyotèk sa a yo dwe mete ajou pou tout kliyan. Men, si ou gen yon sistèm trè eterojèn epi pa gen okenn inifikasyon nan deplase soti nan sèvis nan sèvis sou rezo a, Lè sa a, sa a pral gen plis chans pou yon gwo pwoblèm. San yo pa ajoute lojik sa yo, tout enfòmasyon trase yo pral sèlman "sèl nivo". Sa vle di, nou pral resevwa tout entèraksyon entè-sèvis, men yo pa pral kole nan chenn sèl pasaj atravè rezo a.

Konklizyon

Istio bay yon zouti pratik pou kolekte enfòmasyon trase sou yon rezo, men ou dwe konprann ke pou aplikasyon w ap bezwen adapte sistèm ou a epi pran an kont karakteristik aplikasyon Istio. Kòm yon rezilta, de pwen prensipal yo bezwen rezoud: defini pwotokòl nivo aplikasyon an (ki dwe sipòte pa prokurasyon anvwaye a) ak mete kanpe voye enfòmasyon sou koneksyon an nan demann nan sèvis la soti nan demann ki soti nan sèvis la (itilize tèt yo. , nan ka pwotokòl HTTP). Lè pwoblèm sa yo rezoud, nou gen yon zouti pwisan ki pèmèt nou transparan kolekte enfòmasyon ki soti nan rezo a, menm nan sistèm trè eterojèn ekri nan anpil lang ak kad diferan.

Nan pwochen atik sou sèvis may, nou pral gade youn nan pi gwo pwoblèm ak Istio - gwo konsomasyon RAM nan chak veso proxy sidecar epi diskite sou fason ou ka fè fas ak li.

Sous: www.habr.com

Add nouvo kòmantè