Giter VIP home page Giter VIP logo

otus-demo-istio's Introduction

Практика к занятию по теме "Service mesh на примере Istio"

Зависимости

Для выполнения задания вам потребуется установить зависимости:

После установки нужно запустить Kubernetes. При необходимости можно изменить используемый драйвер с помощью флага --driver.

minikube start \
--cpus=4 --memory=8g \
--cni=flannel \
--kubernetes-version="v1.19.0" \
--extra-config=apiserver.enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,\
DefaultTolerationSeconds,NodeRestriction,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,PodPreset \
--extra-config=apiserver.authorization-mode=Node,RBAC

Операции будут совершаться с помощью утилиты kubectl

Содержание

Устройство Istio

Создать неймспейсы для операторов:

kubectl apply -f namespaces.yaml

Разворачиваем Jaeger

Jaeger - решение трассировки. Компоненты Istio, такие как: sidecar-контейнер, gateway, отправляют данные запросов в систему. Таким образом получается полная трассировка запроса.

Добавить репозиторий в Helm:

helm repo add jaegertracing https://jaegertracing.github.io/helm-charts
helm repo update

Установить оператор, разворачивающий Jaeger:

helm install --version "2.19.0" -n jaeger-operator -f jaeger/operator-values.yaml \
jaeger-operator jaegertracing/jaeger-operator

Развернуть Jaeger:

kubectl apply -f jaeger/jaeger.yaml

Проверить состояние Jaeger:

kubectl get po -n jaeger -l app.kubernetes.io/instance=jaeger

Открыть web-интерфейс Jaeger:

minikube service -n jaeger jaeger-query-nodeport

Разворачиваем Prometheus

Prometheus - система мониторинга. С помощью неё собираются метрики Service mesh.

Добавить репозиторий в Helm:

helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo add stable https://kubernetes-charts.storage.googleapis.com/
helm repo update

Развернуть решение по мониторингу на основе Prometheus:

helm install --version "13.7.2" -n monitoring -f prometheus/operator-values.yaml prometheus \
prometheus-community/kube-prometheus-stack

Проверить состояние компонентов мониторинга:

kubectl get po -n monitoring

Добавить сервис типа NodePort для прямого доступа к Prometheus и Grafana:

kubectl apply -f prometheus/monitoring-nodeport.yaml

Открыть web-интерфейс Grafana:

minikube service -n monitoring prometheus-grafana-nodeport

Открыть web-интерфейс Prometheus:

minikube service -n monitoring prom-prometheus-nodeport

Разворачиваем Istio

Istio - Service mesh решение для облачных платформ, использующее Envoy.

Установить оператор, разворачивающий Istio:

istioctl operator init --watchedNamespaces istio-system --operatorNamespace istio-operator

Развернуть Istio c помощью оператора:

kubectl apply -f istio/istio.yaml

Проверить состояние Istio:

kubectl get all -n istio-system -l istio.io/rev=default

Устанавливаем Kiali

Kiali - доска управления Service mesh

Добавить репозиторий в Helm:

helm repo add kiali https://kiali.org/helm-charts
helm repo update

Установить Kiali Operator, разворачивающий Kiali

helm install --version "1.33.1" -n kiali-operator kiali-operator kiali/kiali-operator

Развернуть Kiali:

kubectl apply -f kiali/kiali.yaml

Проверить состояние Kiali:

kubectl get po -n kiali -l app.kubernetes.io/name=kiali

Открыть web-интерфейс Kiali:

minikube service -n kiali kiali-nodeport

Устанавливаем echoserver

Echoserver - сервис, отдающий в виде текста параметры входящего HTTP запроса.

Собрать Docker-образ:

eval $(minikube docker-env) && docker build -t proxy-app:latest -f app/src/Dockerfile app/src

Развернуть приложение echoserver в кластере:

kubectl apply -f app/echoserver.yaml

Проверить статус echoserver:

kubectl get po -l "app=echoserver"

Выполнить запрос к сервису:

curl $(minikube service echoserver --url)

Устанавливаем proxy-app

Proxy-app - сервис, умеющий запрашивать другие запросы по query-параметру url.

Развернуть приложение proxy-app в кластере:

kubectl apply -f app/proxy-app.yaml

Проверить статус приложения:

kubectl get po -l "app=proxy-app"

Выполнить запрос к сервису:

curl $(minikube service proxy-app --url)

Посмотреть логи приложения:

kubectl logs -l app=proxy-app -c proxy-app

Нагружаем приложения

Собрать нагрузочный образ:

eval $(minikube docker-env) && docker build -t load-otus-demo:latest -f app/load/Dockerfile app/load

Запустить нагрузочный образ:

kubectl apply -f app/load.yaml

Посмотреть логи нагрузки:

kubectl logs -l app=load

Настраиваем взаимодействие между сервисами

Сервис proxy-app позволяет запросить другие сервисы с помощью параметра url, сделаем это.

Выполнить запрос к сервису echoserver:

curl "$(minikube service proxy-app --url)?url=http://echoserver"

В результате исполнения команды видно, что запрос на echoserver проходит.

Ограничим доступ proxy-app ко всем сервисам:

kubectl apply -f manage-traffic/proxy-app-sidecar-disable.yaml

Выполнить запрос к сервису echoserver:

curl "$(minikube service proxy-app --url)?url=http://echoserver"

В результате исполнения команды получается ошибка, так как правила для исходящего трафика proxy-app настроены таким образом, что ему запрещены любые исходящие сетевые соединения.

Применим настройки, в которых сказано, что proxy-app может осуществлять запросы к echoserver:

kubectl apply -f manage-traffic/proxy-app-sidecar-enable.yaml

Выполнить запрос к сервису echoserver:

curl "$(minikube service proxy-app --url)?url=http://echoserver"

В результате исполнения команды видно, что запрос на echoserver проходит.

Настраиваем безопасности

В качестве примера настройки безопасности будем использовать настройку межсервисной аутентификации.

Включить аутентификацию для echoserver:

kubectl apply -f auth/echoserver-auth.yaml

Выполнить запрос к сервису echoserver:

curl "$(minikube service proxy-app --url)?url=http://echoserver"

Выполнить запрос к сервису с указанием токена:

curl -H "X-AUTH-TOKEN: token" "$(minikube service proxy-app --url)?url=http://echoserver"

Добавить автоматическую подстановку токена при вызове сервиса echoserver:

kubectl apply -f auth/proxy-app-auth.yaml

Выполнить запрос к сервису echoserver без указания токена:

curl "$(minikube service proxy-app --url)?url=http://echoserver"

Настраиваем отказоустойчивость

Рассмотрим настройку отказоустойчивости для метода http://echoserver/error?times=3. При его вызове последовательно возвращается 500 ошибка в количестве, указанном в параметре times. В этом случае, метод вернёт ошибку 3 раза, а на 4 вернет код 200.

curl "$(minikube service proxy-app --url)?url=http://echoserver/error?times=3"

Применим правило, которое позволяет автоматически делать повтор запроса при возникновении ошибок с кодом 500 или ошибок соединения.

Применить политику повторов:

kubectl apply -f retries/echoserver-retries.yaml

Выполнить запрос:

curl "$(minikube service proxy-app --url)?url=http://echoserver/error?times=3"

otus-demo-istio's People

Contributors

izhigalko avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.