Kev ruaj ntseg: end user authentication thiab tso cai;
kev soj ntsuam: tracing, saib xyuas, kaw.
Tag nrho cov ntawm lawv tuaj yeem daws tau ntawm daim ntawv thov, tab sis tom qab ntawd koj cov kev pabcuam yuav tsis yog "micro". Txhua qhov kev siv zog ntxiv los daws cov teeb meem no yog pov tseg ntawm tuam txhab peev txheej uas tuaj yeem siv ncaj qha rau kev lag luam tus nqi. Xav txog ib qho piv txwv:
Tus Thawj Saib Xyuas Haujlwm: Nws siv sijhawm ntev npaum li cas txhawm rau ntxiv cov lus tawm tswv yim?
Tus tsim tawm: Ob sprints.
MP: Dab tsi?.. Nws yog CRUD xwb!
R: Ua CRUD yog qhov yooj yim ntawm txoj haujlwm, tab sis peb tseem yuav tsum tau lees paub thiab tso cai rau cov neeg siv thiab cov kev pabcuam. Txij li thaum lub network tsis muaj kev ntseeg siab, koj yuav tsum tau ua raws li kev thov rov ua dua, nrog rau Circuit Court breaker qauv hauv cov neeg siv khoom. Tsis tas li ntawd, kom paub tseeb tias tag nrho cov system tsis tsoo, timeouts thiab tej taub hau(Saib tom qab hauv tsab xov xwm kom paub meej ntxiv ntawm ob tus qauv hais.), thiab txhawm rau txheeb xyuas cov teeb meem, saib xyuas, taug qab, [β¦]
MP: Huag, cia li muab cov yeeb yam no tso rau hauv Cov Khoom Pabcuam tom qab ntawd.
Kuv xav tias lub tswv yim yog qhov tseeb: tus nqi ntawm cov kauj ruam thiab kev siv zog yuav tsum tau ntxiv rau ib qho kev pabcuam loj heev. Hauv tsab xov xwm no, peb yuav saib yuav ua li cas Istio tshem tawm tag nrho cov kev nyuaj uas tau hais los saum toj no (tsis yog tsom los ntawm kev lag luam logic) los ntawm cov kev pabcuam.
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅: Kab lus xav tias koj muaj kev paub ua haujlwm ntawm Kubernetes. Txwv tsis pub, kuv xav kom nyeem Kuv qhov kev taw qhia rau Kubernetes thiab tsuas yog tom qab ntawd txuas ntxiv nyeem cov ntaub ntawv no.
Qhov kev xav
Hauv lub ntiaj teb uas tsis muaj Istio, ib qho kev pabcuam ua rau kev thov ncaj qha rau lwm tus, thiab yog tias tsis ua haujlwm, cov kev pabcuam yuav tsum tau ua nws tus kheej: ua ib qho kev sim tshiab, muab sijhawm rau lub sijhawm, qhib Circuit Court breaker, thiab lwm yam.
Network tsheb khiav hauv Kubernetes
Istio, ntawm qhov tod tes, muab cov kev daws teeb meem tshwj xeeb uas cais tawm ntawm cov kev pabcuam thiab kev ua haujlwm los ntawm kev cuam tshuam nrog kev sib tham hauv network. Thiab yog li nws siv:
txhaum cai: raws li txoj cai raws li txoj cai hauv cov lus teb, nws nkag siab yog tias qhov kev thov ua tsis tiav thiab rov xa nws dua.
Cov no tsuas yog qee qhov ua tau (tsuas yog ob peb yam!) kom txaus siab rau koj. Tam sim no cia peb dhia mus rau hauv cov ntsiab lus technical!
Kev tsim vaj tsev
Istio cuam tshuam tag nrho cov tsheb khiav hauv lub network thiab siv cov txheej txheem rau nws, ntxig lub npe ntse hauv daim ntawv ntawm lub thawv sab hauv rau hauv txhua lub pod. Proxies uas qhib txhua qhov muaj peev xwm tsim tau a Lub dav hlau Data, thiab lawv tuaj yeem hloov kho dynamically nrog Tswj lub dav hlau.
Lub dav hlau Data
Cov proxies tso rau hauv cov pods ua rau nws yooj yim rau Istio kom tau raws li peb xav tau. Piv txwv li, cia peb tshawb xyuas qhov kev rov ua dua thiab kev ua haujlwm ntawm Circuit Court breaker.
Yuav ua li cas retry thiab Circuit Court breaking yog siv nyob rau hauv Envoy
Mus saib lub ntsab lug:
Envoy (peb tab tom tham txog ib lub npe nyob rau hauv lub thawv sidecar, uas yog muab faib thiab yuav ua li cas cais cov khoom - kwv yees. txhais.) xa ib daim ntawv thov mus rau thawj qhov kev pabcuam B thiab ua tsis tiav.
Envoy Sidecar tab tom sim dua (rov sim dua). (1)
Qhov kev thov ua tsis tiav raug xa rov qab mus rau lub npe hu ua nws.
Qhov no qhib Circuit Breaker thiab hu rau cov kev pabcuam tom ntej rau kev thov tom ntej. (2)
Qhov no txhais tau hais tias koj tsis tas yuav siv lub tsev qiv ntawv Retry tom ntej, koj tsis tas yuav ua koj tus kheej siv Circuit Breaking thiab Service Discovery hauv X, Y lossis Z programming lus. lub thawv hauv Istio thiab tsis xav tau tsis muaj code hloov.
Zoo heev! Tam sim no koj tuaj yeem xav mus ncig nrog Istio, tab sis tseem muaj qee qhov tsis ntseeg, qhib cov lus nug. Yog tias qhov no yog kev daws teeb meem thoob ntiaj teb rau txhua lub sijhawm hauv lub neej, tom qab ntawd koj muaj kev xav tsis thoob: tom qab tag nrho, tag nrho cov kev daws teeb meem no yog qhov tseeb tsis haum rau txhua qhov xwm txheej.
Yog li, koj tuaj yeem nqa ib pawg ua haujlwm thiab tom qab siv Istio Cheebtsam, cov kev pabcuam hauv nws yuav ua haujlwm ntxiv, thiab tom qab tshem cov khoom no, txhua yam yuav zoo dua. Nws yog tseeb hais tias nyob rau hauv cov ntaub ntawv no koj yuav poob lub cib fim muab los ntawm Istio.
Txoj kev xav txaus - cia peb muab qhov kev paub no rau hauv kev xyaum!
Istio hauv kev xyaum
Istio xav kom Kubernetes pawg nrog tsawg kawg 4 vCPUs thiab 8 GB ntawm RAM muaj. Txhawm rau kom ceev cov pawg thiab ua raws li cov lus qhia los ntawm tsab xov xwm, Kuv pom zoo kom siv Google Cloud Platform, uas muaj cov neeg siv tshiab pub dawb $300.
Tom qab tsim cov pawg thiab teeb tsa kev nkag mus rau Kubernetes los ntawm kev siv hluav taws xob console, koj tuaj yeem nruab Istio los ntawm tus thawj tswj hwm pob Helm.
Helm Installation
Nruab tus neeg siv Helm ntawm koj lub computer raws li tau piav qhia hauv cov ntaub ntawv raug cai. Peb yuav siv nws los tsim cov qauv rau kev txhim kho Istio hauv ntu tom ntej.
Kev teeb tsa
Download Istio cov peev txheej los ntawm tso tawm tshiab(tus thawj tus kws sau ntawv txuas mus rau version 1.0.5 tau hloov mus rau qhov tam sim no, piv txwv li 1.0.6 - kwv yees transl.), rho tawm cov ntsiab lus rau ib daim ntawv teev npe, uas kuv yuav xa mus rau [istio-resources].
grafana.enabled nruab Grafana kom pom cov metrics sau.
Siv cov peev txheej generated nrog cov lus txib:
$ kubectl apply -f istio.yaml
Kev teeb tsa Istio hauv pawg ua tiav! Tos kom txog thaum tag nrho cov pods nyob rau hauv lub namespace istio-system yuav muaj peev xwm Running los yog Completedlos ntawm kev khiav cov lus txib hauv qab no:
$ kubectl get pods -n istio-system
Tam sim no peb npaj mus txuas ntxiv mus rau ntu tom ntej, qhov twg peb yuav tsa thiab khiav daim ntawv thov.
Sentiment Analysis Application Architecture
Cia peb siv tus piv txwv ntawm Sentiment Analysis microservice daim ntawv thov siv nyob rau hauv uas twb tau hais lawm Kab lus taw qhia rau Kubernetes. Nws yog qhov nyuaj txaus los qhia qhov ua tau ntawm Istio hauv kev xyaum.
Daim ntawv thov muaj plaub microservices:
kev pab cuam SA-Front, uas ua haujlwm rau pem hauv ntej-kawg daim ntawv thov ntawm Reactjs;
kev pab cuam SA Web App, uas ua haujlwm rau Sentiment Analysis queries;
Tua tawm daim ntawv thov nrog lub npe los ntawm Istio
Rau kev ua haujlwm ntxiv uas tau hais hauv tsab xov xwm, clone koj lub chaw cia khoom kev txawj ntse. Nws muaj cov ntawv thov thiab tshwm sim rau Kubernetes thiab Istio.
Ntxig sidecars
Insertion tuaj yeem ua tau cia li tau los yog manually. Txhawm rau muab tso rau sab hauv lub thawv, koj yuav tsum teeb tsa daim ntawv lo rau lub namespace istio-injection=enabled, uas yog ua los ntawm cov lus txib hauv qab no:
Tam sim no txhua lub pod uas yuav muab tso rau hauv lub neej ntawd namespace (default) yuav tau txais nws lub thawv sidecar. Txhawm rau txheeb xyuas qhov no, cia peb xa daim ntawv thov xeem los ntawm kev mus rau hauv cov npe hauv paus ntawm qhov chaw khaws cia [istio-mastery] thiab khiav cov lus txib hauv qab no:
$ 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
Tom qab xa cov kev pabcuam, xyuas tias cov pods muaj ob lub thawv (nrog rau kev pabcuam nws tus kheej thiab nws lub tsheb) los ntawm kev khiav cov lus txib kubectl get pods thiab xyuas kom meej tias nyob rau hauv kab READY tus nqi teev 2/2, symbolizing tias ob lub thawv tau khiav:
$ 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
Visually nws zoo li no:
Envoy proxy nyob rau hauv ib qho ntawm cov pods
Tam sim no hais tias daim ntawv thov tau nce thiab khiav, peb yuav tsum tso cai nkag mus nkag rau hauv daim ntawv thov.
Ingress Rooj vag
Qhov kev coj ua zoo tshaj plaws kom ua tiav qhov no (cia kev khiav tsheb hauv pawg) yog dhau los Ingress Rooj vag hauv Istio, uas nyob ntawm "ntug" ntawm pawg thiab tso cai rau koj los pab Istio cov yam ntxwv xws li kev taug kev, thauj khoom sib npaug, kev ruaj ntseg, thiab kev saib xyuas cov tsheb tuaj.
Ingress Gateway tivthaiv thiab cov kev pabcuam uas xa mus rau sab nraud tau teeb tsa ntawm pawg thaum lub sijhawm Istio installation. Txhawm rau kom paub qhov chaw nyob IP sab nraud ntawm qhov kev pabcuam, khiav:
$ 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
Peb yuav txuas ntxiv nkag mus rau daim ntawv thov siv tus IP no (Kuv yuav xa mus rau nws li EXTERNAL-IP), yog li kom yooj yim, peb yuav sau tus nqi rau qhov sib txawv:
$ EXTERNAL_IP=$(kubectl get svc -n istio-system
-l app=istio-ingressgateway
-o jsonpath='{.items[0].status.loadBalancer.ingress[0].ip}')
Yog tias koj sim nkag mus rau IP no los ntawm qhov browser tam sim no, koj yuav tau txais Kev Pabcuam Tsis Muaj Kev Ua Haujlwm, vim los ntawm lub neej ntawd Istio thaiv tag nrho cov tsheb khiavkom txog thaum lub rooj vag yog txhais.
Gateway kev pab
Gateway yog CRD (Kev Cai Kev Cai Txhais Lus) hauv Kubernetes, txhais tau tias tom qab txhim kho Istio hauv pawg thiab ua kom muaj peev xwm txheeb xyuas cov chaw nres nkoj, raws tu qauv, thiab cov tswv tsev uas peb xav tso cai nkag mus.
Hauv peb qhov xwm txheej, peb xav tso cai HTTP tsheb khiav ntawm chaw nres nkoj 80 rau txhua tus tswv. Qhov teeb meem yog pom tau los ntawm cov ntsiab lus hauv qab no (http-gateway.yaml):
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅: Cov kev teeb tsa saum toj no yog khaws cia hauv cov ntaub ntawv sa-virtualservice-external.yaml, uas tseem muaj cov chaw rau routing rau SA-WebApp thiab SA-Feedback, tab sis tau luv luv ntawm no nyob rau hauv tsab xov xwm rau brevity.
Thov VirtualService los ntawm kev hu rau:
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅: Thaum peb siv Istio cov peev txheej, Kubernetes API Server hluav taws xob ib qho xwm txheej uas Istio Control Plane tau txais, thiab tom qab ntawd, qhov kev teeb tsa tshiab tau siv rau txhua lub pod's Envoy proxy. Thiab Ingress Gateway maub los zoo li yog lwm tus Envoy teeb tsa hauv Kev Tswj Dav Hlau. Tag nrho cov no zoo li qhov no hauv daim duab:
Sentiment Analysis yog tam sim no muaj nyob rau http://{EXTERNAL-IP}/. Tsis txhob txhawj yog tias koj tsis pom qhov xwm txheej: qee zaum nws yuav siv sij hawm ntev me ntsis rau kev teeb tsa kom muaj txiaj ntsig thiab rau Envoy caches hloov tshiab.
Ua ntej pib, ua si nrog daim ntawv thov rau me ntsis los tsim kev khiav tsheb. (nws lub xub ntiag yog tsim nyog rau kev pom tseeb hauv kev ua tom ntej - kwv yees li.).
Peb yuav xav tau kev taug qab, vim tias peb muaj kev pabcuam ntau dua, nws nyuaj rau kev nkag mus rau qhov ua rau tsis ua haujlwm. Cia peb saib ib rooj plaub yooj yim ntawm daim duab hauv qab no:
Ib qho piv txwv ntawm qhov kev thov ua tsis tiav random
Thov tuaj, ntog - yog vim li cas? Thawj qhov kev pabcuam? Los yog thib ob? Muaj kev zam nyob rau hauv ob qho tib si - cia saib cov cav ntawm txhua tus. Ntev npaum li cas koj tau ntes koj tus kheej ua qhov no? Peb txoj hauj lwm yog zoo li software detective tshaj developersβ¦
Qhov no yog ib qho teeb meem thoob plaws hauv microservices thiab tau daws los ntawm kev faib cov tracing systems, uas cov kev pab cuam kis tau tus cim header rau ib leeg, tom qab uas cov ntaub ntawv no yog redirected rau lub tracing system, qhov twg nws yog muab piv nrog cov ntaub ntawv thov. Nov yog ib qho piv txwv:
TraceId yog siv los txheeb xyuas qhov kev thov
Istio siv Jaeger Tracer, uas siv cov neeg muag khoom ywj pheej OpenTracing API lub hauv paus. Koj tuaj yeem nkag mus rau Jaeger tus neeg siv interface nrog cov lus txib hauv qab no:
Tam sim no mus rau http://localhost:16686/ thiab xaiv ib qho kev pabcuam sa-web-app. Yog tias qhov kev pabcuam tsis pom nyob rau hauv cov ntawv qhia zaub mov, qhia / tsim cov haujlwm ntawm nplooj ntawv thiab hloov kho lub interface. Tom qab ntawd nyem rau ntawm lub pob Nrhiav cov kab, uas yuav qhia cov kab dhau los tsis ntev los no - xaiv ib qho - cov ncauj lus kom ntxaws ntawm txhua kab yuav tshwm sim:
Cov kab no qhia tau tias:
Qhov kev thov tuaj rau hauv istio-ingressgateway (qhov no yog thawj zaug kev cuam tshuam nrog ib qho ntawm cov kev pabcuam, thiab Trace ID yog tsim rau qhov kev thov), tom qab ntawd lub rooj vag xa cov lus thov mus rau qhov kev pabcuam sa-web-app.
Hauv kev pabcuam sa-web-app qhov kev thov raug khaws los ntawm Envoy sidecar, ib tug "me nyuam" yog tsim nyob rau hauv lub ncua (yog vim li cas peb pom nws nyob rau hauv ib tug kab) thiab redirected rau lub thawv sa-web-app. (Span - ib chav tsev ntawm kev ua haujlwm hauv Jaeger, muaj lub npe, lub sijhawm pib ntawm kev ua haujlwm thiab nws lub sijhawm. Spans tuaj yeem ua zes thiab xaj. Ib daim duab qhia acyclic ntawm spans ua ib txoj kab. - kwv yees. txhais.)
Ntawm no qhov kev thov raug ua tiav los ntawm txoj kev kev xav Analysis. Cov kab no twb tsim los ntawm daim ntawv thov, i.e. lawv yuav tsum tau hloov code.
Txij lub sijhawm no, qhov kev thov POST tau pib hauv sa-logic. Tus ID nkag mus yuav tsum tau xa los ntawm sa-web-app.
...
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅: Hauv kauj ruam 4, daim ntawv thov yuav tsum pom cov headers tsim los ntawm Istio thiab dhau lawv mus rau kev thov tom ntej, raws li qhia hauv daim duab hauv qab no: