istio.io/content/uk/docs/setup/additional-setup/getting-started-istio-apis/index.md

22 KiB
Raw Blame History

title description weight keywords owner test
Початок роботи без API Gateway Спробуйте можливості Istio за допомогою застарілих API Istio. 80
getting-started
install
bookinfo
quick-start
kubernetes
istio/wg-environments-maintainers yes

Цей посібник дозволить вам швидко оцінити Istio, використовуючи лише його застарілі API. Якщо ви хочете використовувати Kubernetes Gateway API, будь ласка, перегляньте цей приклад. Якщо ви вже знайомі з Istio або зацікавлені в установці інших профілів конфігурації чи розширених моделей розгортання, зверніться до нашої сторінки ЧАстих питань — який метод установки Istio мені слід використовувати?.

Ці кроки вимагають, щоб у вас був {{< gloss "кластер" >}}кластер{{< /gloss >}}, який запускає підтримувану версію Kubernetes ({{< supported_kubernetes_versions >}}). Ви можете використовувати будь-яку підтримувану платформу, наприклад Minikube або інші, зазначені в інструкціях з налаштування платформи.

Виконайте ці кроки, щоб розпочати роботу з Istio:

  1. Завантажте та встановіть Istio
  2. Розгорніть приклад застосунку
  3. Надайте доступ до застосунку ззовні
  4. Перегляньте інфопанель (дашборд)

Завантаження Istio

  1. Перейдіть на сторінку [релізу Istio]({{< istio_release_url >}}), щоб завантажити файл встановлення для вашої ОС, або завантажте та розпакуйте останній реліз автоматично (Linux або macOS):

    {{< text bash >}} $ curl -L https://istio.io/downloadIstio | sh - {{< /text >}}

    {{< tip >}} Наведена вище команда завантажує останній (у числовому порядку) реліз Istio. Ви можете передати змінні через командний рядок, щоб завантажити конкретну версію або змінити архітектуру процесора. Наприклад, щоб завантажити Istio {{< istio_full_version >}} для архітектури x86_64, виконайте:

    {{< text bash >}} $ curl -L https://istio.io/downloadIstio | ISTIO_VERSION={{< istio_full_version >}} TARGET_ARCH=x86_64 sh - {{< /text >}}

    {{< /tip >}}

  2. Перейдіть до теки з пакетом Istio. Наприклад, якщо пакет називається istio-{{< istio_full_version >}}:

    {{< text syntax=bash snip_id=none >}} $ cd istio-{{< istio_full_version >}} {{< /text >}}

    Тека встановлення містить:

    • Прикладні застосунки у samples/
    • Клієнтський бінарний файл istioctl у теці bin/.
  3. Додайте файл istioctl до вашого шляху (Linux або macOS):

    {{< text bash >}} $ export PATH=$PWD/bin:$PATH {{< /text >}}

Встановлення Istio

  1. Для цього встановлення ми використовуємо профіль конфігурації demo. Його обрано через наявність хорошого набору стандартних параметрів для тестування, але є інші профілі для операційного використання або тестування продуктивності.

    {{< warning >}} Якщо ваша платформа має специфічний для постачальника профіль конфігурації, наприклад Openshift, використовуйте його в наступній команді замість профілю demo. Зверніться до інструкцій для вашої платформи для деталей. {{< /warning >}}

    {{< text bash >}} $ istioctl install --set profile=demo -y ✔ Istio core installed ✔ Istiod installed ✔ Egress gateways installed ✔ Ingress gateways installed ✔ Installation complete {{< /text >}}

  2. Додайте мітку до простору імен, щоб вказати Istio автоматично вставляти проксі Envoy при подальшому розгортанні вашого застосунку:

    {{< text bash >}} $ kubectl label namespace default istio-injection=enabled namespace/default позначено {{< /text >}}

Розгортання застосунку прикладу

  1. Розгорніть застосунок приклад Bookinfo:

    {{< text bash >}} $ 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 створено {{< /text >}}

  2. Застосунок буде запущено. Як тільки кожен pod стане готовим, разом з ним буде розгорнуто Istio sidecar.

    {{< text bash >}} $ kubectl get services NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE details ClusterIP 10.0.0.212 9080/TCP 29s kubernetes ClusterIP 10.0.0.1 443/TCP 25m productpage ClusterIP 10.0.0.57 9080/TCP 28s ratings ClusterIP 10.0.0.33 9080/TCP 29s reviews ClusterIP 10.0.0.28 9080/TCP 29s {{< /text >}}

    та

    {{< text bash >}} $ 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 {{< /text >}}

    {{< tip >}} Повторно виконайте попередню команду та дочекайтеся, поки всі podʼи не будуть у статусі READY 2/2, а STATUS Running, перш ніж переходити до наступного кроку. Це може зайняти кілька хвилин залежно від вашої платформи. {{< /tip >}}

  3. Переконайтеся, що все працює правильно на даному етапі. Виконайте цю команду, щоб перевірити, чи працює застосунок всередині кластера та чи він обслуговує HTML-сторінки, перевіривши заголовок сторінки у відповіді:

    {{< text bash >}} kubectl exec "(kubectl get pod -l app=ratings -o jsonpath='{.items[0].metadata.name}')" -c ratings -- curl -sS productpage:9080/productpage | grep -o ""

    {{< /text >}}

Відкриття доступу до застосунку ззовні

Застосунок Bookinfo розгорнуто, але він недоступний ззовні. Щоб зробити його доступним, вам потрібно створити Istio Ingress Gateway, який зіставляє шлях з маршрутом на межі вашої мережі mesh.

  1. Звʼяжіть цей застосунок з Istio gateway:

    {{< text bash >}} $ kubectl apply -f @samples/bookinfo/networking/bookinfo-gateway.yaml@ gateway.networking.istio.io/bookinfo-gateway створено virtualservice.networking.istio.io/bookinfo створено {{< /text >}}

  2. Переконайтеся, що конфігурація не має проблем:

    {{< text bash >}} $ istioctl analyze ✔ No validation issues found when analyzing namespace: default. {{< /text >}}

Визначення IP-адреси та портів для Ingress

Дотримуйтесь цих інструкцій, щоб встановити змінні INGRESS_HOST та INGRESS_PORT для доступу до шлюзу. Використовуйте вкладки для вибору інструкцій для вашої платформи:

{{< tabset category-name="gateway-ip" >}}

{{< tab name="Minikube" category-value="external-lb" >}}

Виконайте цю команду в новому вікні термінала, щоб запустити тунель Minikube, який спрямовує трафік до вашого Istio Ingress Gateway. Це забезпечить зовнішній балансувальник навантаження, EXTERNAL-IP, для service/istio-ingressgateway.

{{< text bash >}} $ minikube tunnel {{< /text >}}

Встановіть хост і порти для ingress:

{{< text bash >}} 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}') {{< /text >}}

Переконайтеся, що IP-адреса і порти були успішно призначені кожній змінній середовища:

{{< text bash >}} $ echo "$INGRESS_HOST" 127.0.0.1 {{< /text >}}

{{< text bash >}} $ echo "$INGRESS_PORT" 80 {{< /text >}}

{{< text bash >}} $ echo "$SECURE_INGRESS_PORT" 443 {{< /text >}}

{{< /tab >}}

{{< tab name="Інші платформи" category-value="node-port" >}}

Виконайте наступну команду, щоб визначити, чи ваш кластер Kubernetes працює в середовищі, яке підтримує зовнішні балансувальники навантаження:

{{< text bash >}} $ 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 {{< /text >}}

Якщо значення EXTERNAL-IP встановлено, ваше середовище має зовнішній балансувальник навантаження, який можна використовувати для шлюзу ingress. Якщо значення EXTERNAL-IP є <none> (або постійно <pending>), ваше середовище не надає зовнішній балансувальник навантаження для шлюзу ingress. У цьому випадку ви можете отримати доступ до шлюзу, використовуючи node port сервісу.

Виберіть інструкції, які відповідають вашому середовищу:

Дотримуйтесь цих інструкцій, якщо ви визначили, що ваше середовище має зовнішній балансувальник навантаження.

Встановіть IP-адресу та порти для ingress:

{{< text bash >}} 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}') {{< /text >}}

{{< warning >}} У певних середовищах балансувальник навантаження може бути відкритий за допомогою імені хосту, а не IP-адреси. У цьому випадку значення EXTERNAL-IP шлюзу ingress буде не IP-адресою, а імʼям хосту, і попередня команда не зможе встановити змінну середовища INGRESS_HOST. Використовуйте наступну команду, щоб виправити значення INGRESS_HOST:

{{< text bash >}} export INGRESS_HOST=(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].hostname}') {{< /text >}}

{{< /warning >}}

Дотримуйтесь цих інструкцій, якщо ваше середовище не має зовнішнього балансувальника навантаження і виберіть node port.

Встановіть порти для ingress:

{{< text bash >}} 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}') {{< /text >}}

GKE:

{{< text bash >}} $ export INGRESS_HOST=worker-node-address {{< /text >}}

Вам потрібно створити правила фаєрволу, щоб дозволити TCP-трафік на порти сервісу ingressgateway. Виконайте наступні команди, щоб дозволити трафік для HTTP-порту, захищеного порту (HTTPS) або обох:

{{< text bash >}} $ 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" {{< /text >}}

IBM Cloud Kubernetes Service:

{{< text bash >}} $ ibmcloud ks workers --cluster cluster-name-or-id $ export INGRESS_HOST=public-IP-of-one-of-the-worker-nodes {{< /text >}}

Docker For Desktop:

{{< text bash >}} $ export INGRESS_HOST=127.0.0.1 {{< /text >}}

Інші середовища:

{{< text bash >}} export INGRESS_HOST=(kubectl get po -l istio=ingressgateway -n istio-system -o jsonpath='{.items[0].status.hostIP}') {{< /text >}}

{{< /tab >}}

{{< /tabset >}}

  1. Встановіть GATEWAY_URL:

    {{< text bash >}} $ export GATEWAY_URL=$INGRESS_HOST:$INGRESS_PORT {{< /text >}}

  2. Переконайтеся, що IP-адреса і порт були успішно призначені змінній середовища:

    {{< text bash >}} $ echo "$GATEWAY_URL" 127.0.0.1:80 {{< /text >}}

Перевірте зовнішній доступ

Підтвердьте, що застосунок Bookinfo доступний зовні, переглянувши сторінку продукту Bookinfo за допомогою браузера.

  1. Виконайте наступну команду, щоб отримати зовнішню адресу застосунку Bookinfo.

    {{< text bash >}} $ echo "http://$GATEWAY_URL/productpage" {{< /text >}}

  2. Вставте результат попередньої команди у свій вебоглядач та підтвердіть, що сторінка продукту Bookinfo відображається.

Перегляд панелі керування (дашборд)

Istio інтегрується з декількома різними телеметричними застосунками. Вони допоможуть вам зрозуміти структуру вашої сервісної мережі, відобразити топологію мережі та проаналізувати її стан.

Використайте наступні інструкції для розгортання дашборду Kiali разом з Prometheus, Grafana та Jaeger.

  1. Встановіть [Kiali та інші надбудови]({{< github_tree >}}/samples/addons) та дочекайтеся їх розгортання.

    {{< text bash >}} $ 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 {{< /text >}}

    {{< tip >}} Якщо виникають помилки під час встановлення надбудов, спробуйте повторно виконати команду. Можливо, є деякі проблеми з часом, які вирішаться при повторному запуску команди. {{< /tip >}}

  2. Доступ до дашборду Kiali.

    {{< text bash >}} $ istioctl dashboard kiali {{< /text >}}

  3. У меню навігації ліворуч оберіть Graph і в списку Namespace оберіть default.

    {{< tip >}} {{< boilerplate trace-generation >}} {{< /tip >}}

    Kiali показує огляд вашої мережі зі звʼязками між сервісами у демонстраційному застосунку Bookinfo. Вона також надає фільтри для візуалізації потоку трафіку.

    {{< image link="./kiali-example2.png" caption="Дашборд Kiali" >}}

Наступні кроки

Вітаємо з завершенням цього демонстраційного встановлення!

Ці завдання є чудовим початком для новачків, щоб продовжити оцінку можливостей Istio, використовуючи цю інсталяцію demo:

Перед тим як налаштувати Istio для використання в операційній діяльності, ознайомтеся з наступними ресурсами:

Приєднуйтесь до спільноти Istio

Ми запрошуємо вас ставити питання та залишати відгуки, приєднавшись до спільноти Istio.

Видалення

Щоб видалити демонстраційний застосунок Bookinfo та його конфігурацію, перегляньте очищення Bookinfo.

Видалення Istio знищує дозволи RBAC і всі ресурси в просторі імен istio-system. Безпечно ігнорувати помилки для відсутніх ресурсів, оскільки вони могли бути видалені ієрархічно.

{{< text bash >}} $ kubectl delete -f @samples/addons@ $ istioctl uninstall -y --purge {{< /text >}}

Простір імен istio-system стандартно не видаляється. Якщо він більше не потрібен, використайте наступну команду, щоб видалити його:

{{< text bash >}} $ kubectl delete namespace istio-system {{< /text >}}

Мітка, яка вказує Istio автоматично виконувати інʼєкцію sidecar проксі Envoy, стандартно не видаляється. Якщо вона більше не потрібна, використайте наступну команду, щоб видалити її:

{{< text bash >}} $ kubectl label namespace default istio-injection- {{< /text >}}