Початок роботи без API Gateway
Цей посібник дозволить вам швидко оцінити Istio, використовуючи лише його застарілі API. Якщо ви хочете використовувати Kubernetes Gateway API, будь ласка, перегляньте цей приклад. Якщо ви вже знайомі з Istio або зацікавлені в установці інших профілів конфігурації чи розширених моделей розгортання, зверніться до нашої сторінки ЧАстих питань — який метод установки Istio мені слід використовувати?.
Ці кроки вимагають, щоб у вас був кластер, який запускає підтримувану версію Kubernetes (1.28, 1.29, 1.30, 1.31). Ви можете використовувати будь-яку підтримувану платформу, наприклад Minikube або інші, зазначені в інструкціях з налаштування платформи.
Виконайте ці кроки, щоб розпочати роботу з Istio:
- Завантажте та встановіть Istio
- Розгорніть приклад застосунку
- Надайте доступ до застосунку ззовні
- Перегляньте інфопанель (дашборд)
Завантаження 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
. Його обрано через наявність хорошого набору стандартних параметрів для тестування, але є інші профілі для операційного використання або тестування продуктивності.$ istioctl install --set profile=demo -y ✔ Istio core installed ✔ Istiod installed ✔ Egress gateways installed ✔ Ingress gateways installed ✔ Installation complete
Додайте мітку до простору імен, щоб вказати Istio автоматично вставляти проксі Envoy при подальшому розгортанні вашого застосунку:
$ kubectl label namespace default istio-injection=enabled namespace/default позначено
Розгортання застосунку прикладу
Розгорніть застосунок приклад
Bookinfo
:$ kubectl apply -f @samples/bookinfo/platform/kube/bookinfo.yaml@ service/details створено serviceaccount/bookinfo-details створено deployment.apps/details-v1 створено service/ratings створено serviceaccount/bookinfo-ratings створено deployment.apps/ratings-v1 створено service/reviews створено serviceaccount/bookinfo-reviews створено deployment.apps/reviews-v1 створено deployment.apps/reviews-v2 створено deployment.apps/reviews-v3 створено service/productpage створено serviceaccount/bookinfo-productpage створено deployment.apps/productpage-v1 створено
Застосунок буде запущено. Як тільки кожен pod стане готовим, разом з ним буде розгорнуто Istio sidecar.
$ 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
Переконайтеся, що все працює правильно на даному етапі. Виконайте цю команду, щоб перевірити, чи працює застосунок всередині кластера та чи він обслуговує HTML-сторінки, перевіривши заголовок сторінки у відповіді:
$ 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 розгорнуто, але він недоступний ззовні. Щоб зробити його доступним, вам потрібно створити Istio Ingress Gateway, який зіставляє шлях з маршрутом на межі вашої мережі mesh.
Звʼяжіть цей застосунок з Istio gateway:
$ kubectl apply -f @samples/bookinfo/networking/bookinfo-gateway.yaml@ gateway.networking.istio.io/bookinfo-gateway створено virtualservice.networking.istio.io/bookinfo створено
Переконайтеся, що конфігурація не має проблем:
$ istioctl analyze ✔ No validation issues found when analyzing namespace: default.
Визначення IP-адреси та портів для Ingress
Дотримуйтесь цих інструкцій, щоб встановити змінні INGRESS_HOST
та INGRESS_PORT
для доступу до шлюзу. Використовуйте вкладки для вибору інструкцій для вашої платформи:
Виконайте цю команду в новому вікні термінала, щоб запустити тунель Minikube, який спрямовує трафік до вашого Istio Ingress Gateway. Це забезпечить зовнішній балансувальник навантаження, EXTERNAL-IP
, для service/istio-ingressgateway
.
$ minikube tunnel
Встановіть хост і порти для ingress:
$ export INGRESS_HOST=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
$ export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].port}')
$ export SECURE_INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="https")].port}')
Переконайтеся, що IP-адреса і порти були успішно призначені кожній змінній середовища:
$ echo "$INGRESS_HOST"
127.0.0.1
$ echo "$INGRESS_PORT"
80
$ echo "$SECURE_INGRESS_PORT"
443
Виконайте наступну команду, щоб визначити, чи ваш кластер Kubernetes працює в середовищі, яке підтримує зовнішні балансувальники навантаження:
$ kubectl get svc istio-ingressgateway -n istio-system
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
istio-ingressgateway LoadBalancer 172.21.109.129 130.211.10.121 80:31380/TCP,443:31390/TCP,31400:31400/TCP 17h
Якщо значення EXTERNAL-IP
встановлено, ваше середовище має зовнішній балансувальник навантаження, який можна використовувати для шлюзу ingress. Якщо значення EXTERNAL-IP
є <none>
(або постійно <pending>
), ваше середовище не надає зовнішній балансувальник навантаження для шлюзу ingress. У цьому випадку ви можете отримати доступ до шлюзу, використовуючи node port сервісу.
Виберіть інструкції, які відповідають вашому середовищу:
Дотримуйтесь цих інструкцій, якщо ви визначили, що ваше середовище має зовнішній балансувальник навантаження.
Встановіть IP-адресу та порти для ingress:
$ export INGRESS_HOST=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
$ export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].port}')
$ export SECURE_INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="https")].port}')
Дотримуйтесь цих інструкцій, якщо ваше середовище не має зовнішнього балансувальника навантаження і виберіть node port.
Встановіть порти для ingress:
$ export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].nodePort}')
$ export SECURE_INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="https")].nodePort}')
GKE:
$ export INGRESS_HOST=worker-node-address
Вам потрібно створити правила фаєрволу, щоб дозволити TCP-трафік на порти сервісу ingressgateway
. Виконайте наступні команди, щоб дозволити трафік для HTTP-порту, захищеного порту (HTTPS) або обох:
$ gcloud compute firewall-rules create allow-gateway-http --allow "tcp:$INGRESS_PORT"
$ gcloud compute firewall-rules create allow-gateway-https --allow "tcp:$SECURE_INGRESS_PORT"
IBM Cloud Kubernetes Service:
$ ibmcloud ks workers --cluster cluster-name-or-id
$ export INGRESS_HOST=public-IP-of-one-of-the-worker-nodes
Docker For Desktop:
$ export INGRESS_HOST=127.0.0.1
Інші середовища:
$ export INGRESS_HOST=$(kubectl get po -l istio=ingressgateway -n istio-system -o jsonpath='{.items[0].status.hostIP}')
Встановіть
GATEWAY_URL
:$ export GATEWAY_URL=$INGRESS_HOST:$INGRESS_PORT
Переконайтеся, що IP-адреса і порт були успішно призначені змінній середовища:
$ echo "$GATEWAY_URL" 127.0.0.1:80
Перевірте зовнішній доступ
Підтвердьте, що застосунок Bookinfo доступний зовні, переглянувши сторінку продукту Bookinfo за допомогою браузера.
Виконайте наступну команду, щоб отримати зовнішню адресу застосунку Bookinfo.
$ echo "http://$GATEWAY_URL/productpage"
Вставте результат попередньої команди у свій вебоглядач та підтвердіть, що сторінка продукту Bookinfo відображається.
Перегляд панелі керування (дашборд)
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
:
- Маршрутизація запитів
- Ін’єкція збоїв
- Зміна трафіку
- Запити метрик
- Візуалізація метрик
- Доступ до зовнішніх сервісів
- Візуалізація вашої мережі
Перед тим як налаштувати 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 автоматично виконувати інʼєкцію sidecar проксі Envoy, стандартно не видаляється. Якщо вона більше не потрібна, використайте наступну команду, щоб видалити її:
$ kubectl label namespace default istio-injection-