Ескерту. аударма: Қызмет торлары микросервис архитектурасынан кейінгі қолданбаларға арналған бүгінгі инфрақұрылымның өзекті тақырыбына айналды. Istio көптеген DevOps инженерлерінің радарында болуы мүмкін, бірақ бұл өте жаңа өнім, ол қамтамасыз ететін мүмкіндіктері жағынан күрделі болғанымен, танысу үшін көп уақытты қажет етеді. Orange Networks телекоммуникациялық компаниясында ірі клиенттер үшін бұлтты есептеулерге жауапты неміс инженері Ринор Малоку Istio-ға тез және терең енуге мүмкіндік беретін тамаша материалдар сериясын жазды. Ол өз тарихын Истионың не істей алатынынан және оны өз көзіңізбен қалай тез көруге болатынынан бастайды.
Istio — Google, IBM және Lyft командаларымен бірлесіп жасалған Open Source-жоба. Ол микросервистерге негізделген қолданбаларда туындайтын қиындықтарды шешеді, мысалы:
Қауіпсіздік: соңғы пайдаланушының аутентификациясы және авторизациясы;
Бақылау мүмкіндігі: бақылау, бақылау, журналға түсіру.
Олардың барлығын қолданба деңгейінде шешуге болады, бірақ одан кейін сіздің қызметтеріңіз «микро» болмайды. Осы мәселелерді шешуге жұмсалатын барлық қосымша күш – бұл компания ресурстарын ысырап ету, оны бизнес құны үшін тікелей пайдалануға болады. Мысал қарастырайық:
Жоба менеджері: Кері байланыс мүмкіндігін қосу қанша уақытты алады?
Әзірлеуші: Екі спринт.
Депутат: Не?.. Бұл жай ғана CRUD!
R: CRUD жасау оңай бөлік, бірақ біз әлі де пайдаланушылар мен қызметтерді аутентификациялау және авторизациялауымыз керек. Желі сенімсіз болғандықтан, қайталанатын сұрауларды, сондай-ақ іске асыру қажет болады ажыратқыш үлгісі клиенттерде. Сондай-ақ, бүкіл жүйенің апатқа ұшырамағанына көз жеткізу үшін күту уақыты және қалқандар(Аталған екі үлгі туралы қосымша мәліметтер алу үшін кейінірек мақаланы қараңыз.), және проблемаларды анықтау, бақылау, қадағалау, […]
Депутат: О, бұл мүмкіндікті Өнім қызметіне енгізейік.
Менің ойымша, идея түсінікті: бір қызметті қосу үшін қажетті қадамдар мен күш-жігер көлемі өте үлкен. Бұл мақалада біз Istio жоғарыда аталған барлық күрделілікті (бизнес логикасына бағытталмаған) қызметтерден қалай алып тастайтынын қарастырамыз.
ескерту: Мақалада сізде Kubernetes туралы жұмыс білімі бар деп болжанады. Әйтпесе, оқуға кеңес беремін менің Кубернетеске кіріспе содан кейін ғана осы материалды оқуды жалғастырыңыз.
Istio идеясы
Istio жоқ әлемде бір қызмет екіншісіне тікелей сұраулар жасайды және сәтсіздікке ұшыраған жағдайда қызмет оны өзі өңдеуі керек: жаңа әрекет жасау, күту уақытын қамтамасыз ету, автоматты ажыратқышты ашу және т.б.
Кубернетестегі желілік трафик
Istio, керісінше, желілік өзара әрекеттесуге кедергі жасау арқылы қызметтер мен функциялардан мүлдем бөлек мамандандырылған шешімді ұсынады. Осылайша ол іске асырады:
ақауларға төзімділік: жауаптағы күй кодының негізінде ол сұраудың орындалмағанын түсінеді және оны қайта жібереді.
Канариялық прокаттар: қызметтің жаңа нұсқасына сұраулардың белгіленген пайызын ғана қайта бағыттайды.
Мониторинг және метрика: қызмет жауап беру үшін қанша уақыт қажет болды?
Бақылау және бақылау мүмкіндігі: Әрбір сұрауға арнайы тақырыптарды қосады және оларды кластер бойынша қадағалайды.
Қауіпсіздік: JWT таңбалауышын шығарып, пайдаланушыларды аутентификациялайды және авторизациялайды.
Бұл сізді қызықтыратын мүмкіндіктердің бірнешеуі ғана (шын мәнінде бірнешеу!). Енді техникалық мәліметтерге тоқталайық!
Архитектура
Istio барлық желілік трафикті ұстайды және оған ережелер жинағын қолданады, әрбір подкольге бүйірлік контейнер түріндегі смарт проксиді енгізеді. Барлық мүмкіндіктерді белсендіретін проксилер a құрайды Деректер жазықтығы, және олар динамикалық түрде конфигурациялануы мүмкін Бақылау жазықтығы.
Деректер жазықтығы
Қоспаларға енгізілген проксилер Istio-ға бізге қажетті талаптарға оңай қол жеткізуге мүмкіндік береді. Мысалы, қайталау және автоматты ажыратқыш функцияларын тексерейік.
Envoy бағдарламасында қайталау және тізбекті үзу қалай жүзеге асырылады
Қортындысы:
өкілі (біз бүйірлік контейнерде орналасқан прокси туралы айтып отырмыз, ол таратылады және қалай бөлек өнім - шамамен. аудар.) В қызметінің бірінші инстанциясына сұрау жібереді және сәтсіз аяқталады.
Envo Sidecar тағы әрекеттеніп жатыр (қайталау). (1)
Сәтсіз сұрау оны шақырған проксиге қайтарылады.
Бұл автоматты ажыратқышты ашады және келесі сұраулар үшін келесі қызметті шақырады. (2)
Бұл келесі қайталау кітапханасын пайдаланудың қажеті жоқ дегенді білдіреді, X, Y немесе Z бағдарламалау тілінде тізбекті үзу және сервисті табуды өз бетінше жасаудың қажеті жоқ. Осының барлығы және т.б. қолжетімді. Istio ішіндегі жәшік және талап етпейді жоқ код өзгереді.
Тамаша! Енді сіз Истиомен саяхатқа шыққыңыз келуі мүмкін, бірақ әлі де кейбір күмәндар, ашық сұрақтар бар. Егер бұл өмірдегі барлық жағдайларға арналған әмбебап шешім болса, онда сізде заңды күдік бар: барлық мұндай шешімдер іс жүзінде кез келген жағдайға жарамайды.
Соңында сіз: «Оны теңшеуге бола ма?» Деп сұрайсыз.
Енді сіз теңіз саяхатына дайынсыз - ал Басқару ұшағымен танысайық.
Бақылау жазықтығы
Ол үш компоненттен тұрады: Ұшқыш, Миксер и Цитадель, ол бірге Өкілдерді трафикті бағыттау, саясаттарды қолдану және телеметрия деректерін жинау үшін теңшейді. Схема бойынша бәрі келесідей көрінеді:
Басқару жазықтығының деректер жазықтығымен әрекеттесуі
Өкілдер (яғни деректер жазықтығы) конфигурацияланады Kubernetes CRD (Пайдаланушы ресурс анықтамалары) Istio анықтаған және осы мақсат үшін арнайы әзірленген. Бұл сізге нені білдіреді, олар Кубернетестегі таныс синтаксисі бар басқа ресурс болып табылады. Жасалғаннан кейін бұл ресурс басқару ұшағы арқылы қабылданады және Елшілерге қолданылады.
Қызметтердің Istio-мен байланысы
Біз Istio-ның қызметтермен қарым-қатынасын сипаттадық, бірақ керісінше емес: қызметтердің Istio-ға қандай қатысы бар?
Шынымды айтсам, балықтар өздеріне: «Су деген не?» деп сұрағанда, су туралы білетін сияқты, қызмет көрсетушілер де Истионың бар екенін біледі.
Осылайша, сіз жұмыс кластерін ала аласыз және Istio құрамдастарын орналастырғаннан кейін ондағы қызметтер жұмысын жалғастырады және осы құрамдастарды жойғаннан кейін бәрі қайтадан жақсы болады. Бұл жағдайда Истио ұсынған мүмкіндіктерден айырылатыныңыз анық.
Теория жеткілікті - бұл білімді тәжірибеде қолданайық!
Іс жүзінде
Istio кемінде 4 vCPU және 8 ГБ жедел жады бар Kubernetes кластерін қажет етеді. Кластерді жылдам көтеру және мақаладағы нұсқауларды орындау үшін мен жаңа пайдаланушыларға ұсынатын Google Cloud платформасын пайдалануды ұсынамын. тегін $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] және пәрменді іске қосыңыз:
Бұл пәрмен 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
Енді біз қосымшаны көтеріп, іске қосатын келесі бөлімге өтуге дайынбыз.
Сезімдерді талдау қолданбасының архитектурасы
Жоғарыда айтылғанда пайдаланылған Сезім талдау микросервис қолданбасының мысалын қолданайық Кубернетеске кіріспе мақаласы. Istio мүмкіндіктерін іс жүзінде көрсету үшін жеткілікті күрделі.
Қолданба төрт микросервистен тұрады:
қызмет көрсету SA-Фронтенд, ол Reactjs жүйесінде фронтальды қолданбаға қызмет етеді;
қызмет көрсету SA WebApp, ол көңіл-күйді талдау сұрауларына қызмет етеді;
қызмет көрсету SA кері байланыс, ол орындалған талдаудың дәлдігі туралы пайдаланушылардан кері байланыс алады.
Бұл диаграммада қызметтерге қоса, біз Kubernetes-те кіріс сұрауларын тиісті қызметтерге бағыттайтын кіріс контроллерін де көреміз. Istio өзінің кіру шлюзінде ұқсас тұжырымдаманы пайдаланады, оның егжей-тегжейлері кейінірек болады.
Istio проксиімен қолданбаны іске қосу
Мақалада айтылған қосымша әрекеттер үшін репозиторийіңізді клондаңыз шеберлік. Онда Kubernetes және Istio қолданбалары мен манифестер бар.
Арбаларды салу
Енгізуге болады автоматты түрде немесе қолмен. Бүйірлік контейнерлерді автоматты түрде енгізу үшін белгіні аттар кеңістігіне орнату керек istio-injection=enabled, ол келесі пәрменмен орындалады:
Енді әдепкі аттар кеңістігінде орналастырылатын әрбір подкаст (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 ішінде кластердің «шетінде» орналасқан және 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 барлық кіріс трафикті блоктайдышлюз анықталғанша.
Шлюз ресурсы
Шлюз - бұл кластерде Istio орнатқаннан кейін анықталған және кіріс трафикке рұқсат бергіміз келетін порттарды, протоколды және хосттарды көрсету мүмкіндігін беретін Kubernetes жүйесіндегі CRD (Теңшелетін ресурс анықтамасы).
Біздің жағдайда біз барлық хосттар үшін 80 портында HTTP трафикіне рұқсат бергіміз келеді. Тапсырма келесі анықтама арқылы жүзеге асырылады (http-gateway.yaml):
Бұл конфигурация селектордан басқа ешқандай түсіндіруді қажет етпейді istio: ingressgateway. Бұл селектордың көмегімен конфигурацияны қай кіріс шлюзіне қолдану керектігін белгілей аламыз. Біздің жағдайда бұл Istio-да әдепкі бойынша орнатылған Ingress Gateway контроллері.
Конфигурация келесі пәрменді шақыру арқылы қолданылады:
$ kubectl apply -f resource-manifests/istio/http-gateway.yaml gateway.networking.istio.io/http-gateway created
Шлюз енді 80 портқа кіруге мүмкіндік береді, бірақ сұрауларды қайда бағыттау керектігін білмейді. Бұл үшін сізге қажет болады Виртуалды қызметтер.
VirtualService ресурсы
VirtualService кіріс шлюзіне кластер ішінде рұқсат етілген сұрауларды қалай бағыттау керектігін айтады.
http-шлюз арқылы келетін біздің қолданбаға сұраулар sa-frontend, sa-web-app және sa-кері байланыс қызметтеріне жіберілуі керек:
VirtualServices көмегімен конфигурацияланатын маршруттар
Этот VirtualService относится к запросам, приходящим через http-gateway;
В destination определяется сервис, куда отправляются запросы.
Примечание: Конфигурация выше хранится в файле sa-virtualservice-external.yaml, который также содержит настройки для маршрутизации в SA-WebApp и SA-Feedback, но был сокращён здесь в статье для лаконичности.
Применим 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, и уже после этого новая конфигурация применяется к прокси-серверам Envoy каждого pod'а. А контроллер Ingress Gateway представляется очередным Envoy, сконфигурированным в Control Plane. Всё это на схеме выглядит так:
Конфигурация Istio-IngressGateway для маршрутизации запросов
Приложение Sentiment Analysis стало доступным по http://{EXTERNAL-IP}/. Не переживайте, если вы получаете статус Not Found: иногда требуется чуть больше времени для того, чтобы конфигурация вступила в силу и кэши Envoy обновились.
Перед тем, как продолжить, поработайте немного с приложением, чтобы сгенерировать трафик (его наличие необходимо для наглядности в последующих действиях — прим. перев.).
Kiali : наблюдаемость
Чтобы попасть в административный интерфейс 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/, залогинившись под admin/admin. Здесь вы найдете множество полезных возможностей, например, для проверки конфигурации компонентов Istio, визуализации сервисов по информации, собранной при перехвате сетевых запросов, получения ответов на вопросы «Кто к кому обращается?», «У какой версии сервиса возникают сбои?» и т.п. В общем, изучите возможности Kiali перед тем, как двигаться дальше — к визуализации метрик с Grafana.
Grafana: визуализация метрик
Собранные в Istio метрики попадают в Prometheus и визуализируются с 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 слева сверху и выбрав Istio Service Dashboard в левом верхнем углу, начните с сервиса sa-web-app, чтобы посмотреть на собранные метрики:
Здесь нас ждёт пустое и совершенно скучное представление — руководство никогда такое не одобрит. Давайте же создадим небольшую нагрузку следующей командой:
$ 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 : трассировка
Трассировка нам потребуется, потому что чем больше у нас сервисов, тем сложнее добраться до причины сбоя. Посмотрим на простой случай из картинки ниже:
Типовой пример случайного неудачного запроса
Запрос приходит, падает — в чём же причина? Первый сервис? Или второй? Исключения есть в обоих — давайте посмотрим на логи каждого. Как часто вы ловили себя за таким занятием? Наша работа больше похожа на детективов программного обеспечения, а не разработчиков…
Это широко распространённая проблема в микросервисах и решается она распределёнными системами трассировки, в которых сервисы передают друг другу уникальный заголовок, после чего эта информация перенаправляется в систему трассировки, где она сопоставляется с данными запроса. Вот иллюстрация:
Для идентификации запроса используется TraceId
В Istio используется Jaeger Tracer, который реализует независимый от вендоров фреймворк OpenTracing API. Получить доступ к пользовательского интерфейсу 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. Если сервис не показан в выпадающем меню — проявите/сгенерируйте активность на странице и обновите интерфейс. После этого нажмите на кнопку Find Traces, которая покажет самые последние трейсы — выберите любой — покажется детализированная информация по всем трейсам:
Этот трейс показывает:
Запрос приходит в istio-ingressgateway (это первое взаимодействие с одним из сервисов, и для запроса генерируется Trace ID), после чего шлюз направляет запрос в сервис sa-web-app.
В сервисе sa-web-app запрос подхватывается Envoy sidecar'ом, создаётся «ребёнок» в span'е (поэтому мы видим его в трейсах) и перенаправляется в контейнер sa-web-app. (Span — логическая единица работы в Jaeger, имеющая название, время начало операции и её продолжительность. Span'ы могут быть вложенными и упорядоченными. Ориентированный ациклический граф из span'ов образует trace. — прим. перев.)
Здесь запрос обрабатывается методом sentimentAnalysis. Эти трейсы уже сгенерированы приложением, т.е. для них потребовались изменения в коде.
С этого момента инициируется POST-запрос в sa-logic. Trace ID должен быть проброшен из sa-web-app.
…
Примечание: На 4 шаге приложение должно увидеть заголовки, сгенерированные Istio, и передать их в последующие запросы, как показано на изображении ниже:
(A) За проброс заголовков отвечает Istio; (B) За заголовки отвечают сервисы
Istio делает основную работу, т.к. генерирует заголовки для входящих запросов, создаёт новые span'ы в каждом sidecare'е и пробрасывает их. Однако без работы с заголовками внутри сервисов полный путь трассировки запроса будет утерян.
Необходимо учитывать (пробрасывать) следующие заголовки:
Это несложная задача, однако для упрощения её реализации уже существует множество библиотек — например, в сервисе sa-web-app клиент RestTemplate пробрасывает эти заголовки, если просто добавить библиотеки Jaeger и OpenTracing в его зависимости.
Заметьте, что приложение Sentiment Analysis демонстрирует реализации на Flask, Spring и ASP.NET Core.
Теперь, когда стало ясно, что мы получаем из коробки (или почти «из коробки»), рассмотрим вопросы тонко настраиваемой маршрутизации, управления сетевым трафиком, безопасности и т.п.!
Прим. перев.: об этом читайте в следующей части материалов по Istio от Rinor Maloku, переводы которых последуют в нашем блоге в ближайшее время. UPDATE (14 марта): Вторая часть уже опубликована.
Бұл VirtualService келіп түсетін сұрауларды білдіреді http-шлюз;
В destination Сұраулар жіберілетін қызмет анықталады.
ескерту: Жоғарыдағы конфигурация файлда сақталады sa-virtualservice-external.yaml, ол сонымен қатар SA-WebApp және SA-Кері байланысқа бағыттау параметрлерін қамтиды, бірақ қысқаша болу үшін осы жерде мақалада қысқартылған.
Қоңырау шалу арқылы VirtualService қолданбасын қолданайық:
ескерту: Istio ресурстарын пайдаланған кезде, Kubernetes API сервері Istio басқару жазықтығымен қабылданатын оқиғаны жасайды, содан кейін жаңа конфигурация әрбір подкасттың Envoy прокси-серверлеріне қолданылады. Ал Ingress Gateway контроллері Басқару жазықтығында конфигурацияланған басқа Елші болып көрінеді. Мұның бәрі диаграммада келесідей көрінеді:
Сұраныс бағыттау үшін Istio-IngressGateway конфигурациясы
Сезім талдауы енді қол жетімді http://{EXTERNAL-IP}/. Табылмады күйін алсаңыз, уайымдамаңыз: кейде конфигурацияның күшіне енуі және Envoy кэштерінің жаңартылуы үшін сәл ұзағырақ уақыт қажет.
Жалғастырмас бұрын, трафикті жасау үшін қолданбамен аздап ойнаңыз (оның болуы кейінгі әрекеттерде анық болу үшін қажет – шамамен аудар.).
Киали: бақылау мүмкіндігі
Kiali әкімші интерфейсіне өту үшін келесі пәрменді іске қосыңыз:
... және ашыңыз http://localhost:20001/әкімші/әкімші ретінде кіру арқылы. Мұнда сіз көптеген пайдалы мүмкіндіктерді таба аласыз, мысалы, Istio құрамдастарының конфигурациясын тексеру, желілік сұрауларды ұстау арқылы жиналған ақпараттан қызметтерді визуализациялау, «Кім кіммен байланысып жатыр?», «Қызметтің қай нұсқасын бастан кешіруде?» сұрақтарына жауап алу. сәтсіздіктер?» және т.б. Жалпы, Grafana көмегімен көрсеткіштерді визуализациялауға көшпес бұрын Kiali мүмкіндіктерін зерттеңіз.
Графана: метрикалық визуализация
Istio-да жиналған көрсеткіштер Prometheus ішіне кіреді және Grafana көмегімен бейнеленеді. Grafana әкімшілік интерфейсіне өту үшін төмендегі пәрменді іске қосыңыз, содан кейін ашыңыз http://localhost:3000/:
Мәзірді басу арқылы Home жоғарғы сол жақ түймесін басып, таңдаңыз Istio қызмет көрсету тақтасы жоғарғы сол жақ бұрышта қызмет көрсетуден бастаңыз sa-web-appжиналған көрсеткіштерді көру үшін:
Мұнда бізді бос және әбден жалықтыратын спектакль күтіп тұр – басшылық мұны ешқашан құптамайды. Келесі пәрменмен шағын жүктемені жасайық:
Қазір бізде әлдеқайда әдемі графиктер бар және оларға қосымша бақылауға арналған Prometheus және метрикаларды визуализациялауға арналған Grafana тамаша құралдары бар, бұл бізге өнімділік, денсаулық жағдайы, уақыт өте келе қызметтердің жақсаруы/деградациясы туралы білуге мүмкіндік береді.
Бізге іздестіру қажет, өйткені бізде неғұрлым көп қызметтер болса, сәтсіздіктің себебін анықтау қиынырақ болады. Төмендегі суреттен қарапайым жағдайды қарастырайық:
Кездейсоқ орындалмаған сұраудың әдеттегі мысалы
Өтініш келеді, түседі - себебі неде? Бірінші қызмет? Әлде екінші? Екеуінде де ерекшеліктер бар - әрқайсысының журналдарын қарастырайық. Сіз қаншалықты жиі өзіңізді осылай ұстадыңыз? Біздің жұмысымыз әзірлеушілерге қарағанда бағдарламалық қамтамасыз ету детективтеріне көбірек ұқсайды...
Бұл микросервистерде кең тараған мәселе және қызметтер бір-біріне бірегей тақырыпты беретін бөлінген бақылау жүйелері арқылы шешіледі, содан кейін бұл ақпарат іздеу жүйесіне қайта бағытталады, онда ол сұрау деректерімен салыстырылады. Міне, мысал:
TraceId сұрауды анықтау үшін пайдаланылады
Istio жеткізушіге тәуелсіз OpenTracing API құрылымын жүзеге асыратын Jaeger Tracer пайдаланады. Сіз Jaeger пайдаланушы интерфейсіне келесі пәрмен арқылы қол жеткізе аласыз:
Енді өтіңіз http://localhost:16686/ және қызметті таңдаңыз sa-web-app. Егер қызмет ашылмалы мәзірде көрсетілмесе, бетте әрекетті көрсетіңіз/жасыңыз және интерфейсті жаңартыңыз. Осыдан кейін түймені басыңыз Іздерді табыңыз, ол ең соңғы іздерді көрсетеді - кез келген таңдаңыз - барлық жолдар туралы толық ақпарат пайда болады:
Бұл із көрсетеді:
Өтініш келеді istio-ingressgateway (бұл қызметтердің бірімен бірінші өзара әрекеттесу және сұрау үшін Trace ID жасалады), содан кейін шлюз сұранысты қызметке жібереді sa-web-app.
Қызметте sa-web-app сұрауды Елші бүйір вагоны алады, аралықта «бала» жасалады (сондықтан біз оны іздерде көреміз) және контейнерге қайта бағытталады sa-web-app. (Span - аты, операцияның басталу уақыты және оның ұзақтығы бар Jaeger жұмысының логикалық бірлігі. Аралықтарды кірістіруге және тапсырыс беруге болады. Аралықтардың бағытталған ациклдік графигі ізді құрайды. — шамамен. аудар.)
Мұнда сұраныс әдіспен өңделеді сезімдік талдау. Бұл іздер қолданба арқылы жасалған, яғни. олар кодты өзгертуді талап етті.
Осы сәттен бастап POST сұрауы іске қосылады са-логика. Бақылау идентификаторын келесіден жіберу керек sa-web-app.
...
ескерту: 4-қадамда қолданба Istio жасаған тақырыптарды көріп, төмендегі суретте көрсетілгендей оларды келесі сұрауларға жіберуі керек:
(A) Тақырыпты қайта жіберу - Istio жауапкершілігі; (B) Қызметтер тақырыптарға жауап береді
Istio жұмыстың негізгі бөлігін жасайды, өйткені кіріс сұраулары үшін тақырыптарды жасайды, әр бүйірлік қызметте жаңа аралықтарды жасайды және оларды алға жібереді. Дегенмен, қызметтер ішіндегі тақырыптармен жұмыс істемей, толық сұрауды бақылау жолы жоғалады.
Келесі тақырыптарды қарастыру керек (жіберу):
Бұл қиын міндет емес, бірақ оны жүзеге асыруды жеңілдету қазірдің өзінде бар көптеген кітапханалар - мысалы, sa-web-app қызметінде Jaeger және OpenTracing кітапханаларын жай ғана қоссаңыз, RestTemplate клиенті осы тақырыптарды қайта жібереді. оның тәуелділіктері.
Сезім талдауы қолданбасы Flask, Spring және ASP.NET Core жүйесінде іске асыруды көрсететінін ескеріңіз.
Енді қораптан не алатынымыз (немесе қораптан шыққаны дерлік) түсінікті болғандықтан, маршруттауды дәл баптауды, желілік трафикті басқаруды, қауіпсіздікті және т.б. қарастырайық!
Ескерту. аударма: Бұл туралы Rinor Maloku ұсынған Istio материалдарының келесі бөлігінде оқыңыз, олардың аудармалары жақын арада біздің блогта жарияланады. UPDATE (14 наурыз): Екінші бөлім қазірдің өзінде жарияланған.