Zindikirani. transl.: Ma meshes a ntchito akhaladi yankho loyenera pazomangamanga zamakono pazogwiritsa ntchito motsatira kamangidwe ka microservice. Ngakhale Istio ikhoza kukhala pamilomo ya akatswiri ambiri a DevOps, ndi chinthu chatsopano chomwe, ngakhale chiri chokwanira malinga ndi luso lomwe limapereka, chingafunike nthawi yochuluka kuti muzolowerane nazo. Katswiri wa ku Germany Rinor Maloku, yemwe ali ndi udindo woyang'anira cloud computing kwa makasitomala akuluakulu ku kampani ya telecommunications Orange Networks, adalemba mndandanda wodabwitsa wa zipangizo zomwe zimakulolani kuti mulowe mu Istio mofulumira komanso mozama. Amayamba nkhani yake ndi zomwe Istio angachite nthawi zambiri komanso momwe mungadziwonere mwachangu ndi maso anu.
Istio - Pulojekiti ya Open Source yopangidwa mogwirizana ndi magulu a Google, IBM ndi Lyft. Imathetsa zovuta zomwe zimabwera muzogwiritsa ntchito ma microservices, monga:
Kuwongolera Magalimoto: kutha kwa nthawi, kuyesanso, kusanja katundu;
Chitetezo: kutsimikizika kwa ogwiritsa ntchito kumapeto ndi chilolezo;
Kutulutsa kwa Canary: imangowongolera kuchuluka kwa zopempha ku mtundu watsopano wa ntchito.
Monitoring ndi metrics: Zinatenga nthawi yayitali bwanji kuti utumikiwo uyankhe?
Kufufuza ndi Kuwona: Imawonjezera mitu yapadera pa pempho lililonse ndikutsata gulu lonse.
Chitetezo: Imapeza chizindikiro cha JWT, imatsimikizira ndi kuvomereza ogwiritsa ntchito.
Izi ndi zochepa chabe mwa mwayi (zochepa kwenikweni!) kuti zikusangalatseni. Tsopano tiyeni tilowe muzambiri zaukadaulo!
Zomangamanga za Istio
Istio imalepheretsa kuchuluka kwa magalimoto pamanetiweki ndikuyikapo malamulo angapo, ndikuyika projekiti yanzeru ngati chidebe cham'mbali mu pod iliyonse. Ma proxies omwe amayatsa mphamvu zonse amapanga a Ndege ya Data, ndipo amatha kusinthidwa mosinthika pogwiritsa ntchito Control Ndege.
Ndege ya Data
Ma proxies olowetsedwa mu ma pod amalola Istio kukwaniritsa zofunikira zomwe tikufuna. Mwachitsanzo, tiyeni tiyesenso ndi ntchito za circuit breaker.
Momwe kuyesanso ndi kuswa madera kumakhazikitsidwa mu Envoy
Mwachidule:
nthumwi (tikulankhula za proxy yomwe ili mu chidebe cham'mbali, chomwe chimagawidwa ngati osiyana mankhwala - pafupifupi. transl.) imatumiza pempho ku nthawi yoyamba ya utumiki B ndipo ikulephera.
Evoy Sidecar ayesanso (yesanso). (1)
Pempho lalephera ndipo libwezeredwa kwa woyitanira yemwe adayitcha.
Izi zikutanthauza kuti simuyenera kugwiritsa ntchito laibulale ina Yesaninso, simuyenera kupanga nokha kukhazikitsa kwa Circuit Breaking ndi Service Discovery m'chinenero cha pulogalamu X, Y kapena Z. Zonsezi ndi zina zambiri zikupezeka m'bokosi. mu Istio ndipo safuna ayi kusintha kwa code.
Zabwino! Tsopano mungafune kupita paulendo ndi Istio, koma muli ndi kukayikira, mafunso otseguka. Ngati ili ndi yankho lachilengedwe pazochitika zonse m'moyo, ndiye kuti muli ndi chikayikiro chachilengedwe: pambuyo pake, mayankho onsewa amakhala osayenera pazochitika zilizonse.
Ndipo pamapeto pake mumafunsa kuti: "Kodi ndi makonda?"
Tsopano mwakonzekera ulendo wa panyanja, tiyeni tidziwe Control Plane.
Control Ndege
Lili ndi zigawo zitatu: Woyendetsa, Wosakaniza ΠΈ Citadel, zomwe zimagwirira ntchito limodzi kukonza Nthumwi kuti ziyendetse magalimoto, kutsata ndondomeko, ndi kusonkhanitsa deta ya telemetry. Mwadongosolo zonse zikuwoneka motere:
Kuyanjana kwa Control Plane ndi Data Plane
Nthumwi (i.e. dataplane) zimakonzedwa pogwiritsa ntchito Kubernetes CRD (Custom Resource Definitions) yofotokozedwa ndi Istio ndipo cholinga chake ndi ichi. Zomwe zikutanthauza kwa inu ndikuti akuwoneka ngati chida china ku Kubernetes chokhala ndi mawu odziwika bwino. Akapangidwa, gweroli lidzatengedwa ndi ndege yoyang'anira ndikugwiritsidwa ntchito kwa Nthumwi.
Ubale wa mautumiki ku Istio
Tafotokoza za ubale wa Istio ndi mautumiki, koma osati mobwerera: kodi mautumikiwa amagwirizana bwanji ndi Istio?
Kunena zowona, mautumiki amadziΕ΅a kukhalapo kwa Istio monga momwe nsomba zilili ndi madzi pamene amadzifunsa kuti, "Kodi madzi ndi chiyani?"
Istio imafuna gulu la Kubernetes lokhala ndi osachepera 4 vCPU ndi 8 GB ya RAM yomwe ilipo. Kuti mukhazikitse gulu mwachangu ndikutsata malangizo a nkhaniyi, ndikupangira kugwiritsa ntchito Google Cloud Platform, yomwe imapereka ogwiritsa ntchito atsopano. kwaulere $300.
Mutapanga gulu ndikusintha mwayi wofikira Kubernetes kudzera pa chothandizira, mutha kukhazikitsa Istio kudzera pa Helm package manager.
Kuyika helm
Ikani kasitomala wa Helm pa kompyuta yanu, monga tafotokozera mu zolemba zovomerezeka. Tidzagwiritsa ntchito izi kupanga ma tempuleti oyika Istio mu gawo lotsatira.
Kukhazikitsa Istio
Tsitsani zothandizira za Istio kuchokera kutulutsidwa kwaposachedwa(ulalo wa wolemba woyamba ku mtundu 1.0.5 wasinthidwa kukhala wamakono, mwachitsanzo 1.0.6 - approx. transl.), chotsani zomwe zili m'ndandanda umodzi, zomwe ndidzaimbira [istio-resources].
Kuti muzindikire zida za Istio mosavuta, pangani malo a mayina mugulu la K8s istio-system:
$ kubectl create namespace istio-system
Malizitsani kukhazikitsa popita ku chikwatu [istio-resources] ndi kuyendetsa lamulo:
kiali.enabled imayika Kiali mumagulu kuti muwonetsetse ntchito ndi magalimoto;
grafana.enabled imayika Grafana kuti muwone ma metric osonkhanitsidwa.
Tiyeni tigwiritse ntchito zinthu zopangidwa ndi lamulo:
$ kubectl apply -f istio.yaml
Kuyika kwa Istio pagulu kwatha! Dikirani mpaka masamba onse ali mumphika wamadzi istio-system adzatha Running kapena Completedpoyendetsa lamulo ili pansipa:
Tsopano pod iliyonse yomwe idzayikidwa mu malo osasintha (default) adzalandira chidebe chake cham'mbali. Kuti titsimikizire izi, tiyeni titumize ntchito yoyeserera popita ku bukhu la nkhokwe [istio-mastery] ndikuyendetsa lamulo ili:
$ kubectl apply -f resource-manifests/kube
persistentvolumeclaim/sqlite-pvc created
deployment.extensions/sa-feedback created
service/sa-feedback created
deployment.extensions/sa-frontend created
service/sa-frontend created
deployment.extensions/sa-logic created
service/sa-logic created
deployment.extensions/sa-web-app created
service/sa-web-app created
Pambuyo potumiza mautumikiwa, tiyeni tiwone ngati ma pod ali ndi zotengera ziwiri (ndi utumiki womwewo ndi galimoto yake yam'mbali) poyendetsa lamulo. kubectl get pods ndi kuonetsetsa kuti pansi pa mzati READY mtengo watchulidwa 2/2, kusonyeza kuti zotengera zonse zikuyenda:
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
sa-feedback-55f5dc4d9c-c9wfv 2/2 Running 0 12m
sa-frontend-558f8986-hhkj9 2/2 Running 0 12m
sa-logic-568498cb4d-2sjwj 2/2 Running 0 12m
sa-logic-568498cb4d-p4f8c 2/2 Running 0 12m
sa-web-app-599cf47c7c-s7cvd 2/2 Running 0 12m
Njira yabwino yokwaniritsira izi (lolani magalimoto mumagulu) ndikudutsa Ingress Gateway ku Istio, yomwe ili pa "m'mphepete" mwa gululo ndipo imakulolani kuti muthe kuyika zinthu za Istio monga njira, kusanja katundu, chitetezo ndi kuyang'anira magalimoto omwe akubwera.
Chigawo cha Ingress Gateway ndi ntchito yomwe imatumiza kunja idayikidwa mgululi panthawi yoyika Istio. Kuti mudziwe adilesi yakunja ya IP ya ntchitoyo, yesani:
$ kubectl get svc -n istio-system -l istio=ingressgateway
NAME TYPE CLUSTER-IP EXTERNAL-IP
istio-ingressgateway LoadBalancer 10.0.132.127 13.93.30.120
Tipitiliza kupeza pulogalamuyi pogwiritsa ntchito IP iyi (ndiyitchula kuti EXTERNAL-IP), kuti zikhale zosavuta tidzalemba mtengowo kuti ukhale wosinthika:
$ EXTERNAL_IP=$(kubectl get svc -n istio-system
-l app=istio-ingressgateway
-o jsonpath='{.items[0].status.loadBalancer.ingress[0].ip}')
Ngati muyesa kupeza IP iyi kudzera pa msakatuli tsopano, mudzalandira cholakwika cha Utumiki Chosapezeka, chifukwa mwachisawawa Istio imaletsa magalimoto onse omwe akubwera, Gateway sinafotokozedwebe.
Chithandizo cha Gateway
Gateway ndi CRD (Custom Resource Definition) ku Kubernetes, yomwe imatanthauzidwa pambuyo pa kukhazikitsa Istio mumagulu ndikuthandizira kufotokozera madoko, protocol ndi makamu omwe tikufuna kulola magalimoto obwera.
Kwa ife, tikufuna kulola kuchuluka kwa HTTP padoko 80 kwa onse omwe ali nawo. Ntchitoyi ikugwiridwa ndi tanthauzo ili (http-gateway.yaml):
ndemanga: Zosintha pamwambapa zimasungidwa mufayilo sa-virtualservice-external.yaml, yomwe ilinso ndi zoikamo zoyendetsera mu SA-WebApp ndi SA-Feedback, koma yafupikitsidwa apa m'nkhaniyo kuti ikhale yofupikitsa.
Tiyeni tigwiritse ntchito VirtualService poyimba:
$ kubectl apply -f resource-manifests/istio/sa-virtualservice-external.yaml
virtualservice.networking.istio.io/sa-external-services created
ndemanga: Tikamadya zinthu za Istio, Kubernetes API Server imapanga chochitika chomwe chimalandiridwa ndi Istio Control Plane, ndipo pambuyo pake kusinthika kwatsopano kumagwiritsidwa ntchito kwa ma proxies a pod iliyonse. Ndipo wolamulira wa Ingress Gateway akuwoneka kuti ndi nthumwi ina yokonzedwa mu Control Plane. Zonsezi zikuwoneka ngati izi mujambula:
Kukonzekera kwa Istio-IngressGateway pakufunsira njira
Sentiment Analysis application ikupezeka pa http://{EXTERNAL-IP}/. Osadandaula ngati simunapezeke: Nthawi zina zimatenga nthawi yayitali kuti kasinthidwe ayambe kugwira ntchito ndipo ma cache a Envoy asinthe.
Kuti mufike pa mawonekedwe a Kiali, yendetsani lamulo ili:
$ kubectl port-forward
$(kubectl get pod -n istio-system -l app=kiali
-o jsonpath='{.items[0].metadata.name}')
-n istio-system 20001
... ndi kutsegula http://localhost:20001/, kulowa ngati admin/admin. Apa mupeza zinthu zambiri zothandiza, mwachitsanzo, kuyang'ana kasinthidwe ka zigawo za Istio, kuwona mautumiki pogwiritsa ntchito zidziwitso zomwe zasonkhanitsidwa kuchokera pakufunsira zofunsira pa netiweki, pezani mayankho a mafunso "Ndani akulumikizana ndi ndani?", "Ndi mtundu uti wautumiki womwe ukukumana nawo. zolephera?β ndi zina zotero. Nthawi zambiri, fufuzani zomwe Kiali ali nazo musanayambe kuwonera ma metric ndi Grafana.
Grafana: mawonekedwe a metrics
Ma metric omwe amasonkhanitsidwa ku Istio amapita ku Prometheus ndipo amawonetsedwa ndi Grafana. Kuti mufike ku Grafana administrative interface, yendetsani lamulo ili pansipa ndikutsegula http://localhost:3000/:
$ kubectl -n istio-system port-forward
$(kubectl -n istio-system get pod -l app=grafana
-o jsonpath={.items[0].metadata.name}) 3000
Kusindikiza pa menyu Kunyumba pamwamba kumanzere ndi kusankha Istio Service Dashboard pamwamba kumanzere ngodya, kuyamba ndi utumiki sa-web-appkuti muwone ma metric omwe asonkhanitsidwa:
$ while true; do
curl -i http://$EXTERNAL_IP/sentiment
-H "Content-type: application/json"
-d '{"sentence": "I love yogobella"}';
sleep .8; done
Tsopano tili ndi ma graph abwino kwambiri, ndipo kuwonjezera pa iwo, zida zabwino za Prometheus zowunikira ndi Grafana zowonera ma metric omwe angatithandizire kuphunzira za magwiridwe antchito, thanzi, kusintha / kutsika kwa ntchito pakapita nthawi.
Pomaliza, tiyeni tiyang'ane kutsata zopempha mu ntchito.
Chitsanzo chodziwika bwino cha pempho lolephera mwachisawawa
Pempho likubwera, likugwa - chifukwa chake ndi chiyani? Utumiki woyamba? Kapena wachiwiri? Pali zosiyana mu zonse ziwiri - tiyeni tiwone zipika za iliyonse. Kodi mwadzipeza bwanji mukuchita izi? Ntchito yathu ili ngati ofufuza mapulogalamu kuposa opanga ...
Ili ndi vuto lodziwika bwino mu ma microservices ndipo limathetsedwa ndi njira zotsatirira zogawa, momwe mautumiki amadutsa mutu wapadera kwa wina ndi mzake, pambuyo pake chidziwitsochi chimatumizidwa kumayendedwe otsatirira, pomwe amafananizidwa ndi zopempha. Nachi chithunzi:
TraceId imagwiritsidwa ntchito kuzindikira pempho
Istio imagwiritsa ntchito Jaeger Tracer, yomwe imagwiritsa ntchito ndondomeko ya OpenTracing API yodziyimira pawokha. Mutha kugwiritsa ntchito mawonekedwe a Jaeger ndi lamulo ili:
$ kubectl port-forward -n istio-system
$(kubectl get pod -n istio-system -l app=jaeger
-o jsonpath='{.items[0].metadata.name}') 16686
Pempho likubwera istio-ingressgateway (uku ndiko kuyanjana koyamba ndi imodzi mwamautumiki, ndipo Trace ID imapangidwa kuti ifunsidwe), pambuyo pake chipata chimatumiza pempho ku ntchitoyo. sa-web-app.
Mu utumiki sa-web-app pempho likutengedwa ndi Evoy sidecar, "mwana" amapangidwa mu span (ndicho chifukwa ife tikuziwona izo mu mayendedwe) ndi kutumizidwa ku chidebe. sa-web-app. (chikhato - gawo lomveka la ntchito ku Jaeger, lomwe lili ndi dzina, nthawi yoyambira kugwira ntchito ndi nthawi yake. Spans ikhoza kukhazikitsidwa ndikuyitanitsa. Chithunzi chowongolera cha acyclic cha spans chimapanga trace. - pafupifupi. transl.)
Apa pempho likukonzedwa ndi njira sentimentAnalysis. Zotsatirazi zapangidwa kale ndi ntchito, i.e. anafunika kusintha ma code.
Kuyambira pano, pempho la POST likuyambika sa-logic. Trace ID iyenera kutumizidwa kuchokera sa-web-app.
...
ndemanga: Mu sitepe 4, ntchitoyo iyenera kuwona mitu yopangidwa ndi Istio ndikuipereka ku zopempha zotsatila monga momwe tawonetsera pachithunzichi:
(A) Istio ili ndi udindo wotumiza mitu; (B) Ntchito zili ndi udindo pamitu
Istio imagwira ntchito zambiri chifukwa ... imapanga mitu yazofunsira zomwe zikubwera, imapanga mipata yatsopano m'mbali zonse ndikuzipititsa patsogolo. Komabe, popanda kugwira ntchito ndi mitu mkati mwa mautumiki, njira yonse yofunsira idzatayika.
Iyi si ntchito yovuta, koma kufewetsa kukhazikitsa kwake kulipo kale malaibulale ambiri - mwachitsanzo, mu ntchito ya sa-web-app, kasitomala wa RestTemplate amatumiza mitu iyi ngati mungowonjezera malaibulale a Jaeger ndi OpenTracing ku zizolowezi zake.
Dziwani kuti ntchito ya Sentiment Analysis ikuwonetsa zomwe zachitika mu Flask, Spring, ndi ASP.NET Core.
Zindikirani. transl.: Werengani za izi mu gawo lotsatira la zolemba za Istio kuchokera kwa Rinor Maloku, zomasulira zomwe zidzatsatira pa blog yathu posachedwa. PEZANI (March 14): Gawo lachiwiri zasindikizidwa kale.