Istio менен микросервистерге кайтуу. 1-бөлүк

Istio менен микросервистерге кайтуу. 1-бөлүк

Эскертүү. котормо.: Кызмат торлору микросервис архитектурасынан кийинки тиркемелер үчүн заманбап инфраструктурада актуалдуу чечим болуп калды. Istio көптөгөн DevOps инженерлеринин оозунда болушу мүмкүн, бирок ал берген мүмкүнчүлүктөрү боюнча ар тараптуу болгону менен, таанышуу үчүн бир топ убакытты талап кылган жаңы продукт. Orange Networks телекоммуникация компаниясынын ири кардарлары үчүн булуттагы эсептөөлөр үчүн жооптуу немис инженери Ринор Малоку Istio'го тез жана терең сүңгүүгө мүмкүндүк берген сонун материалдардын сериясын жазган. Ал өз окуясын Истио жалпысынан эмне кыла алат жана аны өз көзүңүз менен кантип тез көрүүгө болот дегенден баштайт.

Istio — Google, IBM жана Lyft командалары менен биргеликте иштелип чыккан Open Source долбоору. Ал микросервистерге негизделген тиркемелерде пайда болгон татаал маселелерди чечет, мисалы:

  • Traffic Management: тайм-ауттар, кайра аракет кылуу, жүктү теңдөө;
  • коопсуздук: акыркы колдонуучунун аутентификациясы жана авторизациясы;
  • Байкоочулук: байкоо, мониторинг, журналга алуу.

Булардын бардыгын колдонмо деңгээлинде чечсе болот, бирок андан кийин сиздин кызматтарыңыз “микро” болбой калат. Бул көйгөйлөрдү чечүү үчүн бардык кошумча күч-аракет түздөн-түз бизнес наркы үчүн пайдаланылышы мүмкүн болгон компаниянын ресурстарын текке кетирүү болуп саналат. Келгиле, бир мисал карап көрөлү:

Долбоордун менеджери: Пикир билдирүү функциясын кошууга канча убакыт кетет?
Иштеп чыгуучу: Эки спринт.

Депутат: Эмне?.. Бул жөн эле КУДАЙ!
R: CRUD жасоо оңой бөлүк, бирок биз дагы эле колдонуучулардын жана кызматтардын аныктыгын текшерип, авторизациялашыбыз керек. тармак ишенимсиз болгондуктан, кайра-кайра суроо-талаптарды ишке ашыруу үчүн керек болот, ошондой эле өчүргүчтүн үлгүсү кардарларда. Ошондой эле, бүт система кыйроого учурабашы үчүн, сизге тайм-ауттар жана бөлүктөр (Эки айтылган үлгүлөр жөнүндө көбүрөөк маалымат алуу үчүн, кийинки макалада караңыз - болжол менен котормо.), жана көйгөйлөрдү аныктоо үчүн, мониторинг жүргүзүү, издөө, […]

Депутат: Оо, анда бул функцияны Продукт кызматына киргизели.

Менимче, идея түшүнүктүү: бир кызматты кошуу үчүн зарыл болгон кадамдардын жана күч-аракеттин көлөмү абдан чоң. Бул макалада биз Istio кызматтардан жогоруда айтылган бардык татаалдыктарды (бул бизнес логикасы үчүн арналган эмес) кантип алып салаарын карап чыгабыз.

Istio менен микросервистерге кайтуу. 1-бөлүк

пикир: Бул макалада сиз Kubernetes боюнча жумушчу билимиңиз бар деп болжолдойт. Болбосо, мен окууну сунуштайм менин Kubernetes менен таанышуу андан кийин гана бул материалды окууну улант.

Istio идеясы

Istio жок дүйнөдө бир кызмат экинчисине түздөн-түз суроо-талаптарды жасайт, ал эми иштебей калган учурда кызмат аны өзү чечиши керек: жаңы аракет жасоо, тайм-аут берүү, автоматтык өчүргүчтү ачуу ж.б.

Istio менен микросервистерге кайтуу. 1-бөлүк
Kubernetesтеги тармак трафиги

Istio кызматтардан толугу менен бөлүнгөн жана тармактык байланышка тоскоол болуу менен иштеген адистештирилген чечимди сунуштайт. Ошентип, ал ишке ашырат:

  • катага сабырдуулук: Жооптогу статус кодунун негизинде ал сурам ишке ашпай калганын түшүнөт жана аны кайра аткарат.
  • Канарийлер: суроо-талаптардын белгиленген пайызын гана кызматтын жаңы версиясына багыттайт.
  • Мониторинг жана метрика: Кызмат жооп бергенче канча убакыт өттү?
  • Издөө жана байкоо жүргүзүү: Ар бир суроого атайын аталыштарды кошуп, аларды кластер боюнча карайт.
  • коопсуздук: JWT энбелгисин чыгарып, колдонуучулардын аныктыгын текшерет жана авторизациялайт.

Булар сизди кызыктырган мүмкүнчүлүктөрдүн бир канчасы гана (чындыгында бир нечеси!). Эми техникалык деталдарга тереңдеп киришели!

Istio архитектурасы

Istio бардык тармактык трафикти кармайт жана ага бир катар эрежелерди колдонот, ар бир поддонго капталдагы контейнер түрүндөгү акылдуу проксиди киргизет. Бардык мүмкүнчүлүктөрдү активдештирүүчү проксилер а Data Plane, жана аларды динамикалык түрдө конфигурациялоого болот Башкаруучу учак.

Data Plane

Подокторго киргизилген проксилер Istio бизге керектүү талаптарды оңой эле канааттандырууга мүмкүндүк берет. Мисалы, кайра аракет кылуу жана өчүргүчтүн функцияларын текшерип көрөлү.

Istio менен микросервистерге кайтуу. 1-бөлүк
Envoy'до кайра аракет кылуу жана схеманы бузуу кантип ишке ашырылат

Жыйынтык чыгаруу үчүн:

  1. өкүлү (биз деп бөлүштүрүлгөн каптал контейнеринде жайгашкан прокси жөнүндө сөз болуп жатат өзүнчө продукт — болжол менен. котормо.) Б кызматынын биринчи инстанциясына суроо-талап жөнөтөт жана ишке ашпай калат.
  2. Элчи Сидекар дагы аракет кылат (кайра аракет кылуу). (1)
  3. Сурам ишке ашпай калат жана аны чакырган проксиге кайтарылат.
  4. Бул Circuit Breakerди ачат жана кийинки суроо-талаптар үчүн кийинки кызматты чакырат. (2)

Бул башка Кайра аракет кылуу китепканасын колдонуунун кереги жок дегенди билдирет, X, Y же Z программалоо тилдеринде Circuit Breaking and Service Discovery программасын өзүңүздүн ишке ашырууңуздун кажети жок. Мунун баары жана башка көптөгөн нерселер кутудан тышкары жеткиликтүү. Istio жана талап кылбайт кандайдыр кодексине өзгөртүүлөр.

Абдан жакшы! Эми сиз Истио менен саякатка чыгууну кааласаңыз болот, бирок сизде дагы эле күмөн, ачык суроолор бар. Эгер бул жашоонун бардык учурлары үчүн универсалдуу чечим болсо, анда сизде табигый шектенүү пайда болот: чындыгында, мындай чечимдердин баары кандайдыр бир иш үчүн жараксыз болуп чыгат.

Акырында сиз: "Бул ыңгайлаштырылганбы?"

Эми сиз деңиз саякатына даярсыз, келгиле Башкаруучу учак менен таанышалы.

Башкаруучу учак

Ал үч компоненттен турат: учкуч, аралаштыргыч и Citadel, алар трафикти багыттоо, саясаттарды ишке ашыруу жана телеметриялык маалыматтарды чогултуу үчүн Элчилерди конфигурациялоо үчүн бирге иштешет. Схема боюнча баары мындай көрүнөт:

Istio менен микросервистерге кайтуу. 1-бөлүк
Башкаруу тегиздигинин маалымат тегиздиги менен өз ара аракеттенүүсү

Элчилер (б.а. маалымат учак) колдонуу менен конфигурацияланат Kubernetes CRD (Бажы ресурстарынын аныктамалары) Istio тарабынан аныкталган жана ушул максат үчүн атайын арналган. Бул сизге эмнени билдирет, алар Кубернетестеги тааныш синтаксиси бар дагы бир ресурс болуп көрүнөт. Түзүлгөндөн кийин, бул ресурс башкаруучу учак тарабынан алынып, Элчилерге колдонулат.

Кызматтардын Istio менен байланышы

Биз Истионун кызматтарга болгон мамилесин сүрөттөп бердик, бирок тескерисинче эмес: кызматтардын Истио менен кандай байланышы бар?

Чынын айтсам, кызмат адамдары Истионун бар экенин балык суудай эле билишет, алар өздөрүнө: "Анткен менен суу деген эмне?"

Istio менен микросервистерге кайтуу. 1-бөлүк
сүрөт Виктория Димитракопулос: - Сууну жакшы көрөсүңбү? - Суу деген эмне?

Ошентип, сиз жумушчу кластерди ала аласыз жана Istio компоненттерин жайгаштыргандан кийин, анда жайгашкан кызматтар иштей берет жана бул компоненттерди алып салгандан кийин, баары кайрадан жакшы болот. Бул учурда сиз Istio тарабынан берилген мүмкүнчүлүктөрдү жогото турганыңыз айдан ачык.

Жетиштүү теория – бул билимди иш жүзүндө колдонолу!

Истио практикада

Istio кеминде 4 vCPU жана 8 ГБ оперативдүү эс тутуму бар Kubernetes кластерин талап кылат. Кластерди тез орнотуу жана макаладагы нускамаларды аткаруу үчүн мен жаңы колдонуучуларды сунуштаган Google Булут платформасын колдонууну сунуштайм бекер $300.

Кластерди түзүп, консолдук программа аркылуу Kubernetesке кирүү мүмкүнчүлүгүн конфигурациялагандан кийин, Helm пакет менеджери аркылуу Istio орното аласыз.

Руль орнотуу

Helm кардарын компьютериңизде сүрөттөлгөндөй орнотуңуз расмий документтер. Биз муну кийинки бөлүмдө Istio орнотуу үчүн калыптарды түзүү үчүн колдонобуз.

Istio орнотулууда

Isio булактарын жүктөп алыңыз акыркы чыгарылыш (1.0.5 версиясына автордун түпнуска шилтемеси азыркыга өзгөртүлдү, б.а. 1.0.6 - болжол менен котормо.), мазмунду бир каталогго чыгарып алыңыз, мен мындан ары аны чакырам [istio-resources].

Istio ресурстарын оңой аныктоо үчүн, K8s кластеринде аттар мейкиндигин түзүңүз istio-system:

$ kubectl create namespace istio-system

Каталогго баруу менен орнотууну бүтүрүңүз [istio-resources] жана буйрукту иштетүү:

$ helm template install/kubernetes/helm/istio 
  --set global.mtls.enabled=false 
  --set tracing.enabled=true 
  --set kiali.enabled=true 
  --set grafana.enabled=true 
  --namespace istio-system > istio.yaml

Бул буйрук Istio негизги компоненттерин файлга чыгарат istio.yaml. Биз төмөнкү параметрлерди көрсөтүү менен стандарттык шаблонду өзүбүзгө ылайыкташтырдык:

  • global.mtls.enabled орнотулган false (б.а. mTLS аутентификациясы өчүрүлгөн - болжол менен.)биздин таанышуу процессин жөнөкөйлөтүү үчүн;
  • tracing.enabled Jaeger аркылуу сурамдарды издөөнү камтыйт;
  • kiali.enabled кызматтарды жана трафикти визуалдаштыруу үчүн кластерге Kiali орнотот;
  • grafana.enabled чогултулган көрсөткүчтөрдү визуалдаштыруу үчүн Grafana орнотот.

Келгиле, түзүлгөн ресурстарды буйрук менен колдонолу:

$ kubectl apply -f istio.yaml

Кластерге Istio орнотуу аяктады! Бардык подстер аттар мейкиндигинде болгуча күтө туруңуз istio-system алат Running же Completedтөмөнкү буйрукту иштетүү менен:

$ kubectl get pods -n istio-system

Эми биз колдонмону ишке киргизе турган кийинки бөлүмдө улантууга даярбыз.

Сезим талдоо колдонмосунун архитектурасы

Келгиле, буга чейин айтылганда колдонулган сезимди анализдөө микросервис тиркемесинин мисалын колдонолу Кубернетеске киришүү макаласы. Истионун мумкунчулуктерун иш жузунде керсетуу учун ете татаал.

Колдонмо төрт микросервистен турат:

  1. кызмат SA-Фронтенд, ал Reactjs тиркемесинин алдыңкы бөлүгүн тейлейт;
  2. кызмат SA-WebApp, Сезим талдоо сурамдарын тейлейт;
  3. кызмат SA-Logic, ал өзүн аткарат сезим талдоо;
  4. кызмат SA-пикир, ал анализдин тактыгы тууралуу колдонуучулардын пикирлерин алат.

Istio менен микросервистерге кайтуу. 1-бөлүк

Бул диаграммада, кызматтардан тышкары, биз Kubernetesте кирген суроо-талаптарды тиешелүү кызматтарга багыттаган Ingress Controllerди да көрөбүз. Istio өзүнүн Ingress Gateway ичинде окшош концепцияны колдонот, анын кененирээк маалыматы кийинчерээк болот.

Istio прокси менен тиркемени иштетүү

Макалада айтылган кийинки операциялар үчүн репозиторийиңизди клондоңуз чеберчилик. Ал Kubernetes жана Istio үчүн тиркемени жана манифесттерди камтыйт.

Капталдарды киргизүү

Киргизүүгө болот жазуусу же кол менен. Автоматтык түрдө каптал контейнерлерин салуу үчүн, сиз ат мейкиндигине энбелги коюшуңуз керек istio-injection=enabled, ал төмөнкү буйрук менен аткарылат:

$ kubectl label namespace default istio-injection=enabled
namespace/default labeled

Эми демейки аттар мейкиндигинде орнотула турган ар бир поддон (default) анын каптал контейнерин алат. Муну текшерүү үчүн репозиторийдин түпкү каталогуна баруу менен тесттик тиркемени жайылталы [istio-mastery] жана төмөнкү буйрукту иштетүү:

$ 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

Кызматтарды жайгаштыргандан кийин, келгиле, команданы иштетип, поддондордун эки контейнери (кызматтын өзү жана анын капталдары менен) бар экендигин текшерели kubectl get pods жана тилкенин астында экенине ынануу READY көрсөтүлгөн маани 2/2, эки контейнер иштеп жатканын символдоштурган:

$ 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

Визуалдык түрдө мындай көрүнөт:

Istio менен микросервистерге кайтуу. 1-бөлүк
Подоктордун биринде элчи прокси

Эми колдонмо иштеп жатат, биз кирүүчү трафиктин колдонмого киришине уруксат беришибиз керек.

Ingress Gateway

Буга жетүү үчүн эң жакшы тажрыйба (кластерде трафикке уруксат берүү) аркылуу Ingress Gateway кластердин "четинде" жайгашкан жана Istio функцияларын, мисалы, маршрутташтыруу, жүктөрдү теңдөө, коопсуздук жана кирген трафикти көзөмөлдөө сыяктуу функцияларды иштетүүгө мүмкүндүк берген Istio-до.

Ingress Gateway компоненти жана аны сыртка жөнөтүүчү кызмат Istio орнотуу учурунда кластерде орнотулган. Кызматтын тышкы IP дарегин билүү үчүн:

$ 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

Биз бул IP аркылуу тиркемеге кирүүнү улантабыз (мен аны ТЫШКЫ-IP деп атайм), ошондуктан ыңгайлуулук үчүн маанини өзгөрмөгө жазабыз:

$ EXTERNAL_IP=$(kubectl get svc -n istio-system 
  -l app=istio-ingressgateway 
  -o jsonpath='{.items[0].status.loadBalancer.ingress[0].ip}')

Эгер сиз азыр бул IP-ге браузер аркылуу кирүүгө аракет кылсаңыз, сиз Кызмат жеткиликтүү эмес катасын аласыз, анткени демейки боюнча Istio бардык келген трафикти бөгөттөйт, Gateway азырынча аныктала элек.

Gateway ресурсу

Gateway - бул Kubernetesтеги CRD (Custom Resource Definition), кластерде Istio орнотулгандан кийин аныкталат жана биз кирүүчү трафикке уруксат берүүнү каалаган портторду, протоколдорду жана хостторду көрсөтүү мүмкүнчүлүгүн берет.

Биздин учурда, биз бардык хосттор үчүн 80 портунда HTTP трафикке уруксат бергибиз келет. Милдет төмөнкү аныктама менен ишке ашырылат (http-gateway.yaml):

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: http-gateway
spec:
  selector:
    istio: ingressgateway
  servers:
  - port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
- "*"

Бул конфигурация селектордон башка эч кандай түшүндүрмөнү талап кылбайт istio: ingressgateway. Бул селектордун жардамы менен конфигурацияны кайсы Ingress Gatewayге колдонууну белгилей алабыз. Биздин учурда, бул Istio демейки боюнча орнотулган Ingress Gateway контроллери.

Конфигурация төмөнкү буйрукту чакыруу менен колдонулат:

$ kubectl apply -f resource-manifests/istio/http-gateway.yaml gateway.networking.istio.io/http-gateway created

Шлюз азыр 80-портко кирүүгө мүмкүндүк берет, бирок суроо-талаптарды кайда багыттоо керек экенин билбейт. Бул үчүн сизге керек болот Виртуалдык кызматтар.

VirtualService булагы

VirtualService Ingress Gatewayге кластердин ичинде уруксат берилген суроо-талаптарды кантип багыттоо керектигин айтып берет.

http-шлюз аркылуу келген биздин колдонмого суроо-талаптар sa-frontend, sa-web-app жана sa-feedback кызматтарына жөнөтүлүшү керек:

Istio менен микросервистерге кайтуу. 1-бөлүк
VirtualServices менен конфигурацияланышы керек болгон маршруттар

SA-Frontendге жөнөтүлүшү керек болгон суроо-талаптарды карап көрөлү:

  • Жолдо так дал келүү / index.html алуу үчүн SA-Frontendге жөнөтүлүшү керек;
  • Префикстүү жолдор /static/* фронтондо колдонулган CSS жана JavaScript сыяктуу статикалык файлдарды алуу үчүн SA-Frontendге жөнөтүлүшү керек;
  • Кадимки туюнтма менен дал келген жолдор '^.*.(ico|png|jpg)$', SA-Frontend жөнөтүлүшү керек, анткени Бул бетте көрсөтүлгөн сүрөттөр.

Ишке ашыруу төмөнкү конфигурация менен ишке ашат (sa-virtualservice-external.yaml):

kind: VirtualService
metadata:
  name: sa-external-services
spec:
  hosts:
  - "*"
  gateways:
  - http-gateway                      # 1
  http:
  - match:
    - uri:
        exact: /
    - uri:
        exact: /callback
    - uri:
        prefix: /static
    - uri:
        regex: '^.*.(ico|png|jpg)$'
    route:
    - destination:
        host: sa-frontend             # 2
        port:
number: 80

Маанилүү учурлар:

  1. Бул VirtualService аркылуу келген суроо-талаптарды билдирет http-шлюз;
  2. В destination Сурамдар жөнөтүлө турган кызмат аныкталат.

пикир: Жогорудагы конфигурация файлда сакталган sa-virtualservice-external.yaml, ал ошондой эле SA-WebApp жана SA-Fiedback'те багыттоо жөндөөлөрүн камтыйт, бирок бул жерде кыскача макалада кыскартылган.

Келгиле, VirtualServiceди чакырып колдонолу:

$ kubectl apply -f resource-manifests/istio/sa-virtualservice-external.yaml
virtualservice.networking.istio.io/sa-external-services created

пикир: Istio ресурстарын керектегенде, Kubernetes API Server Istio Control Plane тарабынан кабыл алынган окуяны жаратат жана андан кийин жаңы конфигурация ар бир поддондун Элчи проксилерине колдонулат. Жана Ingress Gateway контроллери Башкаруу планында конфигурацияланган дагы бир Элчи болуп көрүнөт. Мунун баары диаграммада мындай көрүнөт:

Istio менен микросервистерге кайтуу. 1-бөлүк
Сурам багыттоосу үчүн Istio-IngressGateway конфигурациясы

Сезимди талдоо колдонмосу азыр жеткиликтүү http://{EXTERNAL-IP}/. Табылган жок статусуна ээ болсоңуз, кабатыр болбоңуз: Кээде конфигурациянын күчүнө кириши жана Envoy кэштерин жаңыртуу үчүн бир аз көбүрөөк убакыт талап кылынат.

Улантуудан мурун, трафикти түзүү үчүн колдонмо менен бир аз ойноңуз. (анын катышуусу кийинки аракеттердин айкын болушу үчүн зарыл - болжол менен котормосу.).

Киали: байкоочулук

Kiali административдик интерфейсине кирүү үчүн, төмөнкү буйрукту аткарыңыз:

$ kubectl port-forward 
    $(kubectl get pod -n istio-system -l app=kiali 
    -o jsonpath='{.items[0].metadata.name}') 
    -n istio-system 20001

... жана ачык http://localhost:20001/, администратор/администратор катары кирүү. Бул жерден сиз көптөгөн пайдалуу функцияларды таба аласыз, мисалы, Istio компоненттеринин конфигурациясын текшерүү, тармактык суроо-талаптарды кармап калуудан чогултулган маалыматтын жардамы менен кызматтарды визуалдаштыруу, “Ким ким менен байланышып жатат?”, “Кызматтын кайсы версиясы болуп жатат?” деген суроолорго жооп аласыз. ийгиликсиздиктер?" жана башка. Жалпысынан алганда, Grafana менен метрикаларды визуалдаштырууга өтүүдөн мурун Киалинин мүмкүнчүлүктөрүн изилдеңиз.

Istio менен микросервистерге кайтуу. 1-бөлүк

Grafana: метрикалык визуализация

Истиодо чогултулган метрика Прометейге кирет жана Графана менен визуализацияланат. Grafana административдик интерфейсине кирүү үчүн, төмөнкү буйрукту иштетип, анан ачыңыз 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

Менюну басуу Home жогорку сол жана тандоо Isio Кызмат панели жогорку сол бурчта, кызмат менен баштоо sa-web-appчогултулган көрсөткүчтөрдү карап көрүү үчүн:

Istio менен микросервистерге кайтуу. 1-бөлүк

Бул жерде бизди бош жана таптакыр кызыксыз спектакль күтүп турат - жетекчилик муну эч качан жактырбайт. Төмөнкү буйрук менен кичинекей жүктү түзөлү:

$ while true; do 
    curl -i http://$EXTERNAL_IP/sentiment 
    -H "Content-type: application/json" 
    -d '{"sentence": "I love yogobella"}'; 
    sleep .8; done

Азыр бизде алда канча жакшыраак графиктер бар жана аларга кошумча, мониторинг жүргүзүү үчүн сонун Prometheus куралдары жана убакыттын өтүшү менен кызмат көрсөтүүлөрдүн натыйжалуулугу, ден соолугу, жакшыруусу / деградациясы жөнүндө билүүгө мүмкүндүк берүүчү метрикаларды визуалдаштыруу үчүн Grafana.

Акырында, келгиле, кызматтарда сурамдарды издөөнү карап көрөлү.

Jaeger: издөө

Бизге издөө керек болот, анткени бизде канча кызматтар көп болсо, катанын себебин табуу ошончолук кыйын болот. Төмөндөгү сүрөттөн жөнөкөй ишти карап көрөлү:

Istio менен микросервистерге кайтуу. 1-бөлүк
Кокус ишке ашпай калган суроонун типтүү мисалы

Өтүнүч келет, түшөт - себеби эмнеде? Биринчи кызмат? Же экинчиби? Экөөндө тең өзгөчөлүктөр бар - келгиле, ар биринин журналдарын карап көрөлү. Муну менен өзүңүздү канча жолу кармадыңыз? Биздин иш иштеп чыгуучуларга караганда программалык детективдерге окшош...

Бул микросервистерде кеңири таралган көйгөй жана бөлүштүрүлгөн көзөмөлдөө тутумдары менен чечилет, мында кызматтар бири-бирине уникалдуу башты өткөрүп беришет, андан кийин бул маалымат издөө тутумуна жөнөтүлөт, ал жерде сурамдын маалыматтары менен салыштырылат. Бул жерде бир мисал:

Istio менен микросервистерге кайтуу. 1-бөлүк
TraceId өтүнүчтү аныктоо үчүн колдонулат

Istio сатуучудан көз карандысыз OpenTracing API негизин ишке ашырган Jaeger Tracerди колдонот. Сиз Jaeger колдонуучу интерфейсине төмөнкү буйрук менен кире аласыз:

$ kubectl port-forward -n istio-system 
    $(kubectl get pod -n istio-system -l app=jaeger 
    -o jsonpath='{.items[0].metadata.name}') 16686

Азыр барыңыз http://localhost:16686/ жана кызматты тандаңыз sa-web-app. Эгерде кызмат ачылуучу менюда көрсөтүлбөсө, баракта активдүүлүктү көрсөтүңүз/түзүңүз жана интерфейсти жаңыртыңыз. Андан кийин, баскычты чыкылдатыңыз Издерди табуу, анда эң акыркы издер көрсөтүлөт - каалаганын тандаңыз - бардык издер боюнча толук маалымат пайда болот:

Istio менен микросервистерге кайтуу. 1-бөлүк

Бул из көрсөтөт:

  1. Сураныч келет istio-ingressgateway (бул кызматтардын бири менен биринчи өз ара аракеттенүү жана сурам үчүн Trace ID түзүлөт), андан кийин шлюз суроо-талапты кызматка жөнөтөт sa-web-app.
  2. Кызматта sa-web-app өтүнүч Элчинин капталдагы унаасы тарабынан кабыл алынат, аралыкта "бала" түзүлөт (ошондуктан биз аны издерден көрөбүз) жана контейнерге багытталат sa-web-app. (карыш - Жаэгердеги жумуштун логикалык бирдиги, анын аталышы, операциянын башталышы жана анын узактыгы. Аралыктарды уя салып, заказ кылса болот. Аралыктардын багытталган ациклдик графиги изди түзөт. — болжол менен. котормо.)
  3. Бул жерде суроо-талап ыкма менен иштетилет сезимталдоо. Бул издер мурунтан эле колдонмо тарабынан түзүлгөн, б.а. алар кодду өзгөртүүнү талап кылышкан.
  4. Ушул учурдан тартып POST сурамы башталат са-логика. Trace ID төмөнкүгө багытталышы керек sa-web-app.
  5. ...

пикир: 4-кадамда, колдонмо Istio тарабынан түзүлгөн аталыштарды көрүп, аларды төмөнкү сүрөттө көрсөтүлгөндөй кийинки суроо-талаптарга өткөрүп бериши керек:

Istio менен микросервистерге кайтуу. 1-бөлүк
(A) Istio темаларды жөнөтүү үчүн жооптуу; (B) Кызматтар баш маалымат үчүн жооптуу

Истио иштин көбүн аткарат, анткени... кирүүчү суроо-талаптар үчүн аталыштарды жаратат, ар бир тарапта жаңы аралыктарды түзөт жана аларды алдыга жылдырат. Бирок, кызматтардын ичиндеги аталыштар менен иштебестен, сурамдын толук издөө жолу жоголот.

Төмөнкү аталыштарды эске алуу керек:

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

Бул кыйын иш эмес, бирок аны ишке ашырууну жөнөкөйлөтүү азыртадан эле бар көптөгөн китепканалар - мисалы, sa-web-колдонмо кызматында, эгер сиз жөн гана Jaeger жана OpenTracing китепканаларын кошсоңуз, RestTemplate кардары бул аталыштарды багыттайт. анын көз карандылыктары.

Сезим талдоо тиркемеси Flask, Spring жана ASP.NET Core ичинде ишке ашырууну көрсөтөт.

Эми кутучадан эмнени ала турганыбыз (же дээрлик кутудан чыгып калганы) түшүнүктүү болгондон кийин, келгиле, такталган маршрутизацияны, тармактык трафикти башкарууну, коопсуздукту ж.б. карап көрөлү!

Эскертүү. котормо.: Бул тууралуу Ринор Малокунун Истиодогу материалдарынын кийинки бөлүгүндө окуңуз, алардын котормолору жакынкы келечекте биздин блогубузда болот. UPDATE (14-март): экинчи бөлүгү буга чейин жарыяланган.

Котормочудан PS

Биздин блогдон дагы окуңуз:

Source: www.habr.com

Комментарий кошуу