Це вступна перша стаття про Istio і основи його роботи. У ній також торкнемось основ Service Mesh, його призначення та бонусів, що він надає.
1. WHAT IS SERVICE MESH
Отже почнемо із Service Mesh. Однією із причин її появи стало збільшення кількості різноманітних мікросервісів в інфраструктурах великих компаній після ділення монолітних додатків. Як наслідок цього процесу зросла кількість внутрішнього мережевого трафіку, котрий потрібно було якось "приборкувати".
Разом із тим була необхідність в розмежуванні коду додатків та коду-обв'язки на кшталт балансування трафіку на рівні запитів (request-level load balancing), circuit-breaking (мережевий розрив інтеграції сервісів після досягнень певних показників запитів), дзеркалювання трафіку (mirroring, тобто повторення трафіку на декілька сервісів, наприклад, для тестування), трейсінгу тощо. Попередньо цей функціонал реалізовувався в окремих, іноді закритих, бібліотеках великих компаній (Hysterix в Netflix, Finagle в компанії Twitter тощо). У сучасному світі розгорнути додатковий проксі значно простіше ніж інтегрувати додаткову бібліотеку в кожне програмне рішення. До того ж вони можуть бути написані на різних мовах програмування, що ще більше підвищує вартість розробки.
Підсумовуючи все вищесказане, Service Mesh - це додатковий шар програмної інфраструктури для забезпечення більшого контролю внутрішньої взаємодії сервісів на мережевому рівні та їх моніторингу. Сама ідея досить молода, проте швидко набирає обертів та кількість її реалізацій стає дедалі більшою. В основі роботи Service Mesh, як правило, присутній додатковий сервіс-проксі, на котрий кожен додаток відправляє трафік, і власне вже потім проксі перенаправляє увесь трафік за необхідною адресою. Також він може реалізувати деякі вищезгадані патерни програмування, шифрування та моніторингу всього, що відбувається між мікросервісами, телеметрію тощо. Звісно все опціонально, тобто може вмикатись і вимикатись за потреби.
Найбільш популярні реалізації Service Mesh, що не прив'язані до cloud-платформ:
- Consul Connect. Продукт відомої HashiCorp. Розроблювався як рішення для власної платформи Nomad, проте наразі доступний і для Kubernetes. У його основі також Envoy.
- Linkerd. Проект входить до CNCF і фокусується більше на простоті ніж гнучкості.
- Traefik Mesh. Також основна ціль - простота інсталяції і підтримки. На відміну від більшості конкурентів, у якості проксі виступає Traefik
- Kuma. Platform-agnostic рішення, що може обслуговувати не лише Kubernetes сервіси, а також звичайні віртуальних машини. Основним мейтейнером Kuma є Kong, виробник популярного шлюзу Kong Gateway з відкритим кодом. Має статус CNCF Sandbox проєкту.
- OSM (Open Service Mesh). Імплементація від Microsoft, тож ймовірно це непогане рішення для Azure. Використовує всі ті ж популярні дизайн-принципи що і конкуренти: Data/Control plane, Envoy, а також реалізує SMI (Service Mesh Interface)
- Istio. Мабуть найбільш функціональний і як наслідок дещо складніший за інші рішення. Про нього, як я вже обіцяв надалі і піде мова.
2. ISTIO INTRO
Традиційно почнемо із історії проєкту. Istio був започаткований компаніями Google та IBM у партнерстві із командою Envoy, що є підрозділом Lyft. Із грецького Istio значить "вітрило", тож назва зовсім не випадкова. Вона була вигадана інженерами Varun Talwar (засновник Tetrate) та головним інженером Google Louis Ryan в 2017 році. Varun стверджував, що пошук влучного імені для проекту в грецькому словнику зайняла біля 3 годин.
На даний момент Istio не являється CNCF-проєктом і є досить молодим. У подальших yaml-описах буде видно, що версія ресурсів Istio - v1beta1, тож вже в недалекому майбутньому ця стаття може стати повністю або частково не актуальною.
Envoy в свою чергу існує як окремий проект і часто є складовим багатьох інших продуктів, наприклад, Cloud Foundry, Ambassador, Cilium та інші.
Базова схема роботи Istio виглядає наступним чином:
credits https://istio.io/latest/docs/ops/deployment/architecture/
Istio, як і багато інших Service Mesh систем, складається із 2-х основних частин - Control Plane та Data Plane. Перший представлений сервісом istiod, котрий раніше був поділений на Pilot, Citadel, Galley та Mixer.
Control Plane керує Envoy-проксі кожного сервісу і відповідальний за service discovery, конфігурацію та управління сертифікатами (виступає як Центр Сертифікації (CA)) задля забезпечення шифрування трафіку в Data Plane.
credits https://istio.io/latest/docs/concepts/security/
Процес випуску і продовження терміну дії сертифікатів повністю автоматичний. Після першого старту istio-agent, що працює поруч із Envoy-proxy в sidecar-контейнері поду, запитує підпис сертифікату (надсилає CSR) в istiod. Останній валідує запит на сертифікацію і у разі успіху підписує його та направляє сертифікат назад до istio-агента. Потім Envoy запитує необхідний для роботи сертифікат і, як наслідок, трафік прямує із Kubernetes-поду вже шифрованим. Istio-агент періодично перевіряє термін дії сертифікату і за необхідності запитую його перевипуск.
Зробимо перелік найбільш помітних можливостей, що реалізовані на рівні Istio/Envoy:
- Шифрування внутрішнього трафіку між подами
- Різні політики балансування трафіку в тому числі по логічним регіонам
- Можливість керувати політикою доступу до внутрішніх та зовнішніх сервісів
- Моніторинг (Prometheus, Grafana), трейсінг (Zipkin, Jaeger), що реалізовані на рівні сайдкару кожного поду
- Відображення мережевої взаємодії роботи сервісів за допомогою Kiali
- Забезпечення Canary deployments
- Можливість забезпечення Blue-Green deployments
- Внутрішня імплементація Ingress/Ingress Gateway
- Можливість реалізації A/B-тестування
- Реалізація патерну Circuit Breaking
- Можливість дзеркалювання, тобто повторення трафіку для потреб тестування та ін.
- Реалізація Rate Limiting
- Введення різноманітних затримок, відмов та повторних спроб для сервісів на рівні Envoy для тестування роботи додатків
- та інші можливості
3. ISTIO INSTALLATION
Цього разу не будемо надто вдаватись в подробиці реалізації Istio. Просто проінсталюємо його, запустимо тестовий додаток, що використовує його ресурси та пересвідчимось у його правильній роботі.
Для подальшої демонстрації звісно необхідний Kubernetes кластер. Його конфігурація не так важлива, я буду використовувати свою попередню kubeadm-інсталяцію із MetalLB для забезпечення LoadBalancer типу сервісу для bare-metal. Останнє не принципово, але дещо зручніше. Це два воркера і один майстер версії 1.23.4:
k8s-m-a 192.168.1.45
k8s-s-a 192.168.1.48
k8s-s-b 192.168.1.49
На даний момент рекомендований варіант інсталяції Istio - це архів із бінарним файлом istioctl. Helm-чарт поки перебуває в статусі альфа.
$ curl -s -L https://istio.io/downloadIstio | sh -
Downloading istio-1.13.2 from https://github.com/istio/istio/releases/download/1.13.2/istio-1.13.2-linux-amd64.tar.gz ...
Istio 1.13.2 Download Complete!
Istio has been successfully downloaded into the istio-1.13.2 folder on your system.
Next Steps:
See https://istio.io/latest/docs/setup/install/ to add Istio to your Kubernetes cluster.
To configure the istioctl client tool for your workstation,
add the /home/ipeacocks/istio-1.13.2/bin directory to your environment path variable with:
export PATH="$PATH:/home/ipeacocks/istio-1.13.2/bin"
Begin the Istio pre-installation check by running:
istioctl x precheck
Need more information? Visit https://istio.io/latest/docs/setup/install/
$ export PATH="$PATH:/home/ipeacocks/istio-1.13.2/bin"
$ istioctl version
client version: 1.13.2
control plane version: 1.13.2
data plane version: 1.13.2 (1 proxies)
$ istioctl install
This will install the Istio 1.13.2 default profile with ["Istio core" "Istiod" "Ingress gateways"] components into the cluster. Proceed? (y/N) y
✔ Istio core installed
✔ Istiod installed
✔ Ingress gateways installed
✔ Installation complete
Making this installation the default for injection and validation.
Thank you for installing Istio 1.13. Please take a few minutes to tell us about your install/upgrade experience! https://forms.gle/pzWZpAvMVBecaQ9h9
За замовчуванням використовується default профіль інсталяції, проте є і інші. Після установки має створитись новий неймспейс та інші Kubernetes ресурси:
$ kubectl get ns
NAME STATUS AGE
default Active 8d
istio-system Active 5m13s
kube-node-lease Active 8d
kube-public Active 8d
kube-system Active 8d
metallb-system Active 4d13h
$ kubectl get all -n istio-system
NAME READY STATUS RESTARTS AGE
pod/istio-ingressgateway-9c974f69d-x79rh 1/1 Running 0 4m37s
pod/istiod-dd696df84-wxb9t 1/1 Running 0 5m31s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/istio-ingressgateway LoadBalancer 10.99.81.106 192.168.1.70 15021:31339/TCP,80:30773/TCP,443:32045/TCP 4m37s
service/istiod ClusterIP 10.103.36.255 <none> 15010/TCP,15012/TCP,443/TCP,15014/TCP 5m31s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/istio-ingressgateway 1/1 1 1 4m37s
deployment.apps/istiod 1/1 1 1 5m31s
NAME DESIRED CURRENT READY AGE
replicaset.apps/istio-ingressgateway-9c974f69d 1 1 1 4m37s
replicaset.apps/istiod-dd696df84 1 1 1 5m31s
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
horizontalpodautoscaler.autoscaling/istio-ingressgateway Deployment/istio-ingressgateway 2%/80% 1 5 1 4m37s
horizontalpodautoscaler.autoscaling/istiod Deployment/istiod 0%/80% 1 5 1 5m31s
У неймспейсі, де будуть деплоїтись додатки в mesh-мережі, має стояти лейбл istio-injection=enabled, котрий вказує, що в кожний под автоматично під час початкового деплою буде інжектовано додатковий Envoy-контейнер (sidecar):
$ kubectl label namespace default istio-injection=enabled
namespace/default labeled
$ kubectl get ns default --show-labels
NAME STATUS AGE LABELS
default Active 8d istio-injection=enabled,kubernetes.io/metadata.name=default
Якщо ж треба активувати Istio для додатка, що вже працює, варто скористатись istioctl.
4. TEST APPLICATION FOR ISTIO
Щоб бути упевненим, що інсталяція Istio пройшла успішно, потрібно перевірити її в бойових умовах. Для цього задеплоїмо додаток Bookinfo, що розповсюджується разом із архівом Istio, котрий ми раніше скачали. Проте перед цим поговоримо про сам додаток.
Bookinfo показує інформацію про книжку, щось на зразок запису в книжковому онлайн-магазині. На сторінці також відображається опис книги, деякі деталі (ISBN, кількість сторінок і т.п.) та декілька її оглядів користувачами.
Функціонал додатку Bookinfo розбитий на такі складові частини/мікросервіси:
- productpage. Для наповнення своє сторінки цей мікросервіс робить запити на мікросервіси details та reviews.
- details. Цей мікросервіс містить інформацію про книгу.
- reviews. Cервіс reviews володіє інформацією про огляди книги. Також опитує ratings.
- ratings. Мікросервіс ratings містить інформацію про рейтинг книги, про яку написаний огляд.
Разом із тим, для подальших демонстрацій можливостей Istio (про них поговоримо в наступній статті), мікросервіс reviews буде вилито одразу в 3-х версіях:
- Версія v1 взагалі не викликає ratings сервіс.
- Версія v2 викликає сервіс ratings та показує рейтинг у вигляді від 1 до 5 чорних зірок
- Версія v3 викликає сервіс ratings та показує рейтинг у вигляді від 1 до 5 червоних зірок
Мікросервіси додатку навмисно написані на різних мовах програмування та не мають жодної прив'язки до Istio.
$ cd ~./istio-1.13.2
$ kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
details-v1-5498c86cf5-rvks4 2/2 Running 0 9m10s
productpage-v1-65b75f6885-zc6m9 2/2 Running 0 9m9s
ratings-v1-b477cf6cf-p85n6 2/2 Running 0 9m10s
reviews-v1-79d546878f-k2zmn 2/2 Running 0 9m10s
reviews-v2-548c57f459-zps65 2/2 Running 0 9m9s
reviews-v3-6dd79655b9-dtzxd 2/2 Running 0 9m9s
Як бачимо кожен под складається із двох контейнерів, другий серед яких - sidecar із Envoy.
$ kubectl describe pod details-v1-5498c86cf5-rvks4
Name: details-v1-5498c86cf5-rvks4
Namespace: default
Priority: 0
Node: k8s-s-b/192.168.1.49
Start Time: Sun, 13 Mar 2022 12:36:34 +0000
Labels: app=details
pod-template-hash=5498c86cf5
security.istio.io/tlsMode=istio
service.istio.io/canonical-name=details
service.istio.io/canonical-revision=v1
version=v1
Annotations: cni.projectcalico.org/containerID: 0af00...bfe71c865103c
cni.projectcalico.org/podIP: 10.30.0.237/32
cni.projectcalico.org/podIPs: 10.30.0.237/32
kubectl.kubernetes.io/default-container: details
kubectl.kubernetes.io/default-logs-container: details
prometheus.io/path: /stats/prometheus
prometheus.io/port: 15020
prometheus.io/scrape: true
sidecar.istio.io/status:
{"initContainers":["istio-init"],"containers":["istio-proxy"],
"volumes":["istio-envoy","istio-data","istio-podinfo","istio-token"...
Status: Running
IP: 10.30.0.237
IPs:
IP: 10.30.0.237
Controlled By: ReplicaSet/details-v1-5498c86cf5
Init Containers:
istio-init:
Container ID: docker://f0c618e0442d...b87c630b41d924b08f601be13809
Image: docker.io/istio/proxyv2:1.13.2
Image ID: docker-pullable://istio/proxyv2@sha256:f...
Port: <none>
Host Port: <none>
Args:
istio-iptables
-p
15001
-z
15006
-u
1337
-m
REDIRECT
-i
*
-x
-b
*
-d
15090,15021,15020
State: Terminated
Reason: Completed
Exit Code: 0
Started: Sun, 13 Mar 2022 12:36:40 +0000
Finished: Sun, 13 Mar 2022 12:36:40 +0000
Ready: True
Restart Count: 0
Limits:
cpu: 2
memory: 1Gi
Requests:
cpu: 100m
memory: 128Mi
Environment: <none>
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-vvbbp (ro)
Containers:
details:
Container ID: docker://580737...f3df8618753f0592c2ae
Image: docker.io/istio/examples-bookinfo-details-v1:1.16.2
Image ID: docker-pullable://istio/examples-bookinfo-details-v1@sha256:18e54f8...
Port: 9080/TCP
Host Port: 0/TCP
State: Running
Started: Sun, 13 Mar 2022 12:38:40 +0000
Ready: True
Restart Count: 0
Environment: <none>
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-vvbbp (ro)
istio-proxy:
Container ID: docker://f...20ad9d9d3be59e79e87de809341dd20
Image: docker.io/istio/proxyv2:1.13.2
Image ID: docker-pullable://istio/proxyv2@sha256:f...
Port: 15090/TCP
Host Port: 0/TCP
Args:
proxy
sidecar
--domain
$(POD_NAMESPACE).svc.cluster.local
--proxyLogLevel=warning
--proxyComponentLogLevel=misc:error
--log_output_level=default:info
--concurrency
2
State: Running
Started: Sun, 13 Mar 2022 12:38:40 +0000
Ready: True
Restart Count: 0
Limits:
cpu: 2
memory: 1Gi
Requests:
cpu: 100m
memory: 128Mi
Readiness: http-get http://:15021/healthz/ready delay=1s timeout=3s period=2s #success=1 #failure=30
Environment:
JWT_POLICY: third-party-jwt
PILOT_CERT_PROVIDER: istiod
CA_ADDR: istiod.istio-system.svc:15012
POD_NAME: details-v1-5498c86cf5-rvks4 (v1:metadata.name)
POD_NAMESPACE: default (v1:metadata.namespace)
INSTANCE_IP: (v1:status.podIP)
SERVICE_ACCOUNT: (v1:spec.serviceAccountName)
HOST_IP: (v1:status.hostIP)
PROXY_CONFIG: {}
ISTIO_META_POD_PORTS: [
{"containerPort":9080,"protocol":"TCP"}
]
ISTIO_META_APP_CONTAINERS: details
ISTIO_META_CLUSTER_ID: Kubernetes
ISTIO_META_INTERCEPTION_MODE: REDIRECT
ISTIO_META_WORKLOAD_NAME: details-v1
ISTIO_META_OWNER: kubernetes://apis/apps/v1/namespaces/default/deployments/details-v1
ISTIO_META_MESH_ID: cluster.local
TRUST_DOMAIN: cluster.local
Mounts:
/etc/istio/pod from istio-podinfo (rw)
/etc/istio/proxy from istio-envoy (rw)
/var/lib/istio/data from istio-data (rw)
/var/run/secrets/istio from istiod-ca-cert (rw)
/var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-vvbbp (ro)
/var/run/secrets/tokens from istio-token (rw)
Conditions:
Type Status
Initialized True
Ready True
ContainersReady True
PodScheduled True
Volumes:
istio-envoy:
Type: EmptyDir (a temporary directory that shares a pod's lifetime)
Medium: Memory
SizeLimit: <unset>
istio-data:
Type: EmptyDir (a temporary directory that shares a pod's lifetime)
Medium:
SizeLimit: <unset>
istio-podinfo:
Type: DownwardAPI (a volume populated by information about the pod)
Items:
metadata.labels -> labels
metadata.annotations -> annotations
istio-token:
Type: Projected (a volume that contains injected data from multiple sources)
TokenExpirationSeconds: 43200
istiod-ca-cert:
Type: ConfigMap (a volume populated by a ConfigMap)
Name: istio-ca-root-cert
Optional: false
kube-api-access-vvbbp:
Type: Projected (a volume that contains injected data from multiple sources)
TokenExpirationSeconds: 3607
ConfigMapName: kube-root-ca.crt
ConfigMapOptional: <nil>
DownwardAPI: true
QoS Class: Burstable
Node-Selectors: <none>
Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 11m default-scheduler Successfully assigned default/details-v1-5498c86cf5-rvks4 to k8s-s-b
Normal Pulled 11m kubelet Container image "docker.io/istio/proxyv2:1.13.2" already present on machine
Normal Created 11m kubelet Created container istio-init
Normal Started 11m kubelet Started container istio-init
Normal Pulling 11m kubelet Pulling image "docker.io/istio/examples-bookinfo-details-v1:1.16.2"
Normal Pulled 9m47s kubelet Successfully pulled image "docker.io/istio/examples-bookinfo-details-v1:1.16.2" in 1m57.602940134s
Normal Created 9m45s kubelet Created container details
Normal Started 9m45s kubelet Started container details
Normal Pulled 9m45s kubelet Container image "docker.io/istio/proxyv2:1.13.2" already present on machine
Normal Created 9m45s kubelet Created container istio-proxy
Normal Started 9m44s kubelet Started container istio-proxy
Вивід дещо задовгий, але корисний для розуміння. Дещо детальніше загальна схема Bookinfo із активним Istio буде виглядати так:
Перевіримо чи все в порядку і сервіс працює:
$ kubectl exec "$(kubectl get pod -l app=ratings -o jsonpath='{.items[0].metadata.name}')" -c ratings -- curl -sS productpage:9080/productpage | grep -o "<title>.*</title>"
<title>Simple Bookstore App</title>
Так як у моїй Kubeadm-інсталяції кластера присутній тип сервіса LoadBalancer, можна перевірити роботу сервісу і напряму із браузера. Для цього потрібно вилити додаткові istio-gateway та virtualservice ресурси (Istio реалізує свої нові ресурси Kubernetes через CRD):
$ kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml
Після чого знайдемо адресу балансувальника:
$ kubectl get svc -n istio-system | (read line; echo "$line"; grep istio-ingressgateway)
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
istio-ingressgateway LoadBalancer 10.99.81.106 192.168.1.70 15021:31339/TCP,80:30773/TCP,443:32045/TCP 5h56m
Та відкриємо сторінку (прив'язка до конктерного домену наразі відсутня):
Інакше можна скористуватись NodePort чи kubectl proxy.
Istioctl також має функціонал валідації сервісів в неймспейсі.
$ istioctl analyze
✔ No validation issues found when analyzing namespace: default.
Наприклад, може бути виведено попередження, якщо якийсь сервіс в неймспейсі без сайдкару чи щось типу того.
5. ISTIO ADDONS
Як я вже згадував, Istio пропонує інтеграції з Prometheus/Jaeger/Zipkin/Grafana та Kiali. Вони надають дещо більш наочну інформацію про роботу та справність компонентів Istio. Для їх установки (одразу всі інсталювати не обов'язково) скористаємось тим самим завантаженим архівом Istio:
$ cd ~./istio-1.13.2
$ kubectl apply -f samples/addons
serviceaccount/grafana created
configmap/grafana created
service/grafana created
deployment.apps/grafana created
configmap/istio-grafana-dashboards created
configmap/istio-services-grafana-dashboards created
deployment.apps/jaeger created
service/tracing created
service/zipkin created
service/jaeger-collector created
serviceaccount/kiali created
configmap/kiali created
clusterrole.rbac.authorization.k8s.io/kiali-viewer created
clusterrole.rbac.authorization.k8s.io/kiali created
clusterrolebinding.rbac.authorization.k8s.io/kiali created
role.rbac.authorization.k8s.io/kiali-controlplane created
rolebinding.rbac.authorization.k8s.io/kiali-controlplane created
service/kiali created
deployment.apps/kiali created
serviceaccount/prometheus created
configmap/prometheus created
clusterrole.rbac.authorization.k8s.io/prometheus created
clusterrolebinding.rbac.authorization.k8s.io/prometheus created
service/prometheus created
deployment.apps/prometheus created
Всі задеплоєні сервіси типово не мають зовнішнього доступу. Тут вже за бажанням і можливостями: можна його виставити як NodePort чи LoadBalancer, чи просто пеерглядати через kube proxy/istioctl.
$ kubectl get svc -n istio-system
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
grafana ClusterIP 10.107.216.227 <none> 3000/TCP 3m43s
...
jaeger-collector ClusterIP 10.102.83.218 <none> 14268/TCP,14250/TCP,9411/TCP 3m42s
kiali ClusterIP 10.106.125.211 <none> 20001/TCP,9090/TCP 3m42s
prometheus ClusterIP 10.106.10.224 <none> 9090/TCP 3m42s
tracing ClusterIP 10.107.43.68 <none> 80/TCP,16685/TCP 3m43s
zipkin ClusterIP 10.100.197.10 <none> 9411/TCP
На Kiali зупинимось трішки детальніше, бо це спеціальний компонет Istio для демонстрації зв'язків між мікросервісами в Mesh-мережі. Тому виставимо його як LoadBalancer сервіс:
$ kubectl --namespace istio-system patch svc kiali -p '{"spec": {"type": "LoadBalancer"}}'
service/kiali patched
Використовувати patch на продакшен-системах дуже не раджу - це погана практика.
$ kubectl get svc -n istio-system
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
...
kiali LoadBalancer 10.106.125.211 192.168.1.71 20001:31631/TCP,9090:31944/TCP 41m
Створимо невелике навантаження на Bookinfo сервіс задля перегляду статистики в Kiali:
$ for i in $(seq 1 100); do curl -s -o /dev/null "http://192.168.1.70/productpage"; done
Kiali демонструє всю "магію" Service Mesh. Мережева схема роботи мікросервісів "Bookinfo" виглядає так:
Статистика по кожному мікросервісу:
Трейси мікросервісу reviews:
Окрім цього прямо через Kiali можна управляти багатьма іншими параметрами вже вилитих сервісів. Але про це вже далі, у наступній частині.
Посилання:
https://istio.io/latest/docs/setup/getting-started/
https://istio.io/latest/docs/ops/deployment/architecture/
https://istio.io/latest/docs/examples/bookinfo/
https://youtu.be/voAyroDb6xk
https://platform9.com/blog/kubernetes-service-mesh-a-comparison-of-istio-linkerd-and-consul/
https://thenewstack.io/history-service-mesh/
https://istio.tetratelabs.io/blog/istio-traffic-management-walkthrough-p1/
Немає коментарів:
Дописати коментар