Як розпочати
Цей посібник дозволяє швидко оцінити Istio. Якщо ви вже знайомі з Istio або зацікавлені в установці інших конфігураційних профілів чи розширених моделей розгортання, зверніться до нашої сторінки Частих питань який метод встановлення Istio використовувати?.
Вам знадобиться кластер Kubernetes для продовження. Якщо у вас немає кластера, ви можете використовувати kind або будь-яку іншу підтримувану платформу Kubernetes.
Виконайте наступні кроки, щоб розпочати роботу з Istio:
- Завантажте та встановіть Istio
- Встановіть CRD для Kubernetes Gateway API
- Розгорніть демонстраційний застосунок
- Відкрийте застосунок для зовнішнього трафіку
- Перегляньте дашборд
Завантаження Istio
Перейдіть на сторінку релізів Istio, щоб завантажити файл установки для вашої ОС, або завантажте та розпакуйте останній реліз автоматично (Linux або macOS):
$ curl -L https://istio.io/downloadIstio | sh -
Перейдіть до теки пакета Istio. Наприклад, якщо пакет називається
istio-1.24.3
:$ cd istio-1.24.3
Тека установки містить:
- Демонстраційні застосунки в
samples/
- Бінарний файл клієнта
istioctl
у теціbin/
.
- Демонстраційні застосунки в
Додайте клієнт
istioctl
до вашого шляху (Linux або macOS):$ export PATH=$PWD/bin:$PATH
Встановлення Istio
Для цього посібника ми використовуємо профіль конфігурації demo
. Він обраний для забезпечення хорошого набору стандартних налаштувань для тестування, але є й інші профілі для продуктивності, тестування або OpenShift.
На відміну від Istio Gateways, створення Kubernetes Gateways стандартно також розгортає проксі-сервери шлюзів. Оскільки вони не будуть використовуватися, ми відключимо розгортання стандартних служб gateway в Istio, які зазвичай встановлюються як частина профілю demo
.
Встановіть Istio, використовуючи профіль
demo
, без будь-яких шлюзів:$ istioctl install -f @samples/bookinfo/demo-profile-no-gateways.yaml@ -y ✔ Istio core встановлено ✔ Istiod встановлено ✔ Встановлення завершено Зроблено цю установку стандартною для інʼєкції та валідації.
Додайте мітку до простору імен, щоб інструктувати Istio автоматично вбудовувати проксі-сервери Envoy при розгортанні вашого застосунку пізніше:
$ kubectl label namespace default istio-injection=enabled namespace/default labeled
Встановлення CRD Kubernetes Gateway API
CRD Kubernetes Gateway API не встановлені стандартно у більшості кластерів Kubernetes, тому переконайтеся, що вони встановлені перед використанням Gateway API.
Встановіть CRD Gateway API, якщо вони ще не присутні:
$ kubectl get crd gateways.gateway.networking.k8s.io &> /dev/null || \ { kubectl kustomize "github.com/kubernetes-sigs/gateway-api/config/crd?ref=v1.2.0" | kubectl apply -f -; }
Розгортання демонстраційного застосунку
Ви налаштували Istio для автоматичного додавання контейнерів sidecar в будь-який застосунок, який ви розгортаєте в своєму просторі імен default
.
Розгорніть демонстраційний застосунок
Bookinfo
:$ kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.24/samples/bookinfo/platform/kube/bookinfo.yaml service/details created serviceaccount/bookinfo-details created deployment.apps/details-v1 created service/ratings created serviceaccount/bookinfo-ratings created deployment.apps/ratings-v1 created service/reviews created serviceaccount/bookinfo-reviews created deployment.apps/reviews-v1 created deployment.apps/reviews-v2 created deployment.apps/reviews-v3 created service/productpage created serviceaccount/bookinfo-productpage created deployment.apps/productpage-v1 created
Застосунок почне запускатися. Як тільки кожен pod стане готовим, разом з ним буде розгорнуто і sidecar від Istio.
$ kubectl get services NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE details ClusterIP 10.0.0.212 <none> 9080/TCP 29s kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 25m productpage ClusterIP 10.0.0.57 <none> 9080/TCP 28s ratings ClusterIP 10.0.0.33 <none> 9080/TCP 29s reviews ClusterIP 10.0.0.28 <none> 9080/TCP 29s
та
$ kubectl get pods NAME READY STATUS RESTARTS AGE details-v1-558b8b4b76-2llld 2/2 Running 0 2m41s productpage-v1-6987489c74-lpkgl 2/2 Running 0 2m40s ratings-v1-7dc98c7588-vzftc 2/2 Running 0 2m41s reviews-v1-7f99cc4496-gdxfn 2/2 Running 0 2m41s reviews-v2-7d79d5bd5d-8zzqd 2/2 Running 0 2m41s reviews-v3-7dbcdcbc56-m8dph 2/2 Running 0 2m41s
Зверніть увагу, що podʼи показують
READY 2/2
, що підтверджує наявність контейнера застосунку та контейнера sidecar від 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>
Відкриття застосунку для зовнішнього трафіку
Застосунок Bookinfo розгорнуто, але не доступний ззовні. Щоб зробити його доступним, вам потрібно створити ingress gateway, який зіставляє шлях до маршруту на периметрі вашої мережі.
Створіть Kubernetes Gateway для застосунку Bookinfo:
$ kubectl apply -f @samples/bookinfo/gateway-api/bookinfo-gateway.yaml@ gateway.gateway.networking.k8s.io/bookinfo-gateway created httproute.gateway.networking.k8s.io/bookinfo created
Стандартно Istio створює сервіс типу
LoadBalancer
для gateway. Оскільки ми будемо отримувати доступ до цього gateway через тунель, нам не потрібен балансувальник навантаження. Якщо ви хочете дізнатися, як налаштовуються балансувальники навантаження для зовнішніх IP-адрес, прочитайте документацію про ingress gateways.Змініть тип сервісу на
ClusterIP
, додавши анотацію до gateway:$ kubectl annotate gateway bookinfo-gateway networking.istio.io/service-type=ClusterIP --namespace=default
Щоб перевірити статус gateway, виконайте:
$ kubectl get gateway NAME CLASS ADDRESS PROGRAMMED AGE bookinfo-gateway istio bookinfo-gateway-istio.default.svc.cluster.local True 42s
Доступ до застосунку
Ви приєднаєтесь до сервісу productpage
застосунку Bookinfo через gateway, який ви щойно створили. Щоб отримати доступ до gateway, скористайтеся командою kubectl port-forward
:
$ kubectl port-forward svc/bookinfo-gateway-istio 8080:80
Відкрийте вебоглядач та перейдіть за адресою http://localhost:8080/productpage
, щоб переглянути застосунок Bookinfo.
Якщо ви оновите сторінку, ви побачите, як відгуки та рейтинги книг змінюються, оскільки запити розподіляються між різними версіями сервісу reviews
.
Перегляд дашборда
Istio інтегрується з різними застосунками для телеметрії, які допомагають отримати уявлення про структуру вашої сервісної мережі, відобразити топологію та проаналізувати її справність.
Скористайтеся наведеними інструкціями, щоб встановити дашборд Kiali, разом з Prometheus, Grafana та Jaeger.
Встановіть Kiali та інші надбудови та дочекайтесь їх розгортання.
$ kubectl apply -f samples/addons $ kubectl rollout status deployment/kiali -n istio-system Waiting for deployment "kiali" rollout to finish: 0 of 1 updated replicas are available... deployment "kiali" successfully rolled out
Отримайте доступ до дашборда Kiali.
$ istioctl dashboard kiali
У лівому меню виберіть Graph, а в списку Namespace виберіть default.
Дашборд Kiali відображає огляд вашої сервісної мережі зі звʼязками між сервісами у демонстраційному застосунку
Bookinfo
. Вона також надає фільтри для візуалізації трафіку.Панель керування Kiali
Наступні кроки
Вітаємо з завершенням установки!
Ось кілька завдань, які допоможуть початківцям далі оцінити можливості Istio, використовуючи цю установку demo
:
- Маршрутизація запитів
- Інʼєкції збоїв
- Перемикання трафіку
- Запити до метрик
- Візуалізація метрик
- Доступ до зовнішніх сервісів
- Візуалізація вашого mesh
Перед тим, як налаштувати Istio для використання в операційній діяльності, ознайомтесь з наступними ресурсами:
Долучайтеся до спільноти Istio
Ми запрошуємо вас ставити питання та надати зворотний зв’язок, приєднавшись до спільноти Istio.
Видалення
Щоб видалити демонстраційний застосунок Bookinfo
та його конфігурацію, дивіться розділ очищення Bookinfo
.
Видалення Istio видаляє дозволи RBAC та всі ресурси, що знаходяться в просторі імен istio-system
. Можна ігнорувати помилки для неіснуючих ресурсів, оскільки вони могли бути видалені ієрархічно.
$ kubectl delete -f @samples/addons@
$ istioctl uninstall -y --purge
Простір імен istio-system
стандартно не видаляється. Якщо він більше не потрібен, використовуйте наступну команду для його видалення:
$ kubectl delete namespace istio-system
Мітка, що інструктує Istio автоматично вставляти проксі-контейнери Envoy, також стандартно не видаляється. Якщо вона більше не потрібна, використовуйте наступну команду для її видалення:
$ kubectl label namespace default istio-injection-
Якщо ви встановили CRD для Kubernetes Gateway API, а тепер хочете їх видалити, запустіть одну з наступних команд:
Якщо ви використовували експериментальну версію CRD:
$ kubectl kustomize "github.com/kubernetes-sigs/gateway-api/config/crd/experimental?ref=v1.2.0" | kubectl delete -f -
В іншому випадку:
$ kubectl kustomize "github.com/kubernetes-sigs/gateway-api/config/crd?ref=v1.2.0" | kubectl delete -f -