Застосунок Bookinfo

Цей приклад розгортає демонстраційний застосунок, що складається з чотирьох окремих мікросервісів, які використовуються для демонстрації різних можливостей Istio.

Застосунок показує інформацію про книги, схожу на один каталожний запис інтернет-магазину книг. На сторінці показується опис книги, деталі книги (ISBN, кількість сторінок і т.д.) та кілька відгуків про книгу.

Застосунок Bookinfo розбито на чотири окремі мікросервіси:

  • productpage. Мікросервіс productpage викликає мікросервіси details та reviews, щоб заповнити сторінку.
  • details. Мікросервіс details містить інформацію про книги.
  • reviews. Мікросервіс reviews містить огляди книг і також викликає мікросервіс ratings.
  • ratings. Мікросервіс ratings містить інформацію про рейтинги книг, яка супроводжує огляди.

Існує 3 версії мікросервісу reviews:

  • Версія v1 не викликає сервіс ratings.
  • Версія v2 викликає сервіс ratings і показує кожну оцінку у вигляді від 1 до 5 чорних зірок.
  • Версія v3 викликає сервіс ratings і показує кожну оцінку у вигляді від 1 до 5 червоних зірок.

Архітектуру цього застосунку показано нижче.

Застосунок Bookinfo без Istio
Застосунок Bookinfo без Istio

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

Перед тим, як почати

Якщо ви ще цього не зробили, налаштуйте Istio, дотримуючись інструкцій з керівництва з встановлення.

Розгортання застосунку

Щоб запустити приклад з Istio, не потрібно вносити жодних змін до самого застосунку. Замість цього потрібно просто налаштувати та запустити служби в середовищі, де активовано Istio, з інʼєкцією sidecar Envoy для кожної служби. Результат розгортання виглядатиме так:

Застосунок Bookinfo
Застосунок Bookinfo

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

Запуск сервісів застосунку

  1. Перейдіть до кореневої теки встановлення Istio.

  2. Стандартно встановлення Istio використовує автоматичну інʼєкцію sidecar. Додайте мітку до простору імен, де буде розміщено застосунок, з istio-injection=enabled:

    $ kubectl label namespace default istio-injection=enabled
  3. Розгорніть ваш застосунок за допомогою команди kubectl:

    Zip
    $ kubectl apply -f @samples/bookinfo/platform/kube/bookinfo.yaml@

    Ця команда запускає всі чотири сервіси, показані на схемі архітектури застосунку bookinfo. Усі 3 версії сервісу reviews, v1, v2 та v3 будуть запущені.

  4. Переконайтеся, що всі сервіси та podʼи правильно визначені та працюють:

    $ kubectl get services
    NAME          TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)    AGE
    details       ClusterIP   10.0.0.31    <none>        9080/TCP   6m
    kubernetes    ClusterIP   10.0.0.1     <none>        443/TCP    7d
    productpage   ClusterIP   10.0.0.120   <none>        9080/TCP   6m
    ratings       ClusterIP   10.0.0.15    <none>        9080/TCP   6m
    reviews       ClusterIP   10.0.0.170   <none>        9080/TCP   6m

    та

    $ kubectl get pods
    NAME                             READY     STATUS    RESTARTS   AGE
    details-v1-1520924117-48z17      2/2       Running   0          6m
    productpage-v1-560495357-jk1lz   2/2       Running   0          6m
    ratings-v1-734492171-rnr5l       2/2       Running   0          6m
    reviews-v1-874083890-f0qf0       2/2       Running   0          6m
    reviews-v2-1343845940-b34q5      2/2       Running   0          6m
    reviews-v3-1813607990-8ch52      2/2       Running   0          6m
  5. Щоб переконатися, що застосунок Bookinfo працює, надішліть запит до нього за допомогою команди curl з якогось podʼа, наприклад з ratings:

    $ 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>

Визначення IP та порту для ingress

Тепер, коли сервіси Bookinfo запущені, вам потрібно зробити застосунок доступним ззовні вашого кластера Kubernetes, наприклад, в оглядачі. Для цього використовується шлюз.

  1. Створіть шлюз для застосунку Bookinfo:

    Створіть Istio Gateway за допомогою наступної команди:

    Zip
    $ kubectl apply -f @samples/bookinfo/networking/bookinfo-gateway.yaml@
    gateway.networking.istio.io/bookinfo-gateway created
    virtualservice.networking.istio.io/bookinfo created

    Переконайтеся, що шлюз створено:

    $ kubectl get gateway
    NAME               AGE
    bookinfo-gateway   32s

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

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

    $ export GATEWAY_URL=$INGRESS_HOST:$INGRESS_PORT

Переконайтеся, що застосунок доступний ззовні кластера

Щоб підтвердити, що застосунок Bookinfo доступний ззовні кластера, виконайте наступну команду curl:

$ curl -s "http://${GATEWAY_URL}/productpage" | grep -o "<title>.*</title>"
<title>Simple Bookstore App</title>

Ви також можете відкрити оглядач і перейти за посиланням http://$GATEWAY_URL/productpage, щоб переглянути вебсторінку Bookinfo. Якщо кілька разів оновити сторінку, ви побачите різні версії відгуків, що показуються на сторінці productpage, подані у стилі обходу по кругу (червоні зірки, чорні зірки, без зірок), оскільки ми ще не використовували Istio для контролю маршрутизації версій.

Визначення версій сервісів

Перед тим як використовувати Istio для контролю маршрутизації версій Bookinfo, необхідно визначити доступні версії.

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

Zip
$ kubectl apply -f @samples/bookinfo/networking/destination-rule-all.yaml@

Зачекайте кілька секунд, поки правила призначення поширяться.

Ви можете переглянути правила призначення за допомогою наступної команди:

$ kubectl get destinationrules -o yaml

Що далі

Тепер ви можете використовувати цей приклад для експериментів з можливостями Istio, такими як маршрутизація трафіку, інʼєкція збоїв, обмеження швидкості тощо. Щоб продовжити, зверніться до одного або кількох Завдань Istio, залежно від ваших інтересів. Налаштування маршрутизації запитів є хорошим місцем для початку для новачків.

Очищення

Коли закінчите експериментувати з прикладом Bookinfo, видаліть його та виконайте очищення, використовуючи наступну команду:

Zip
$ @samples/bookinfo/platform/kube/cleanup.sh@
Чи була ця інформація корисною?
Чи є у вас пропозиції щодо покращення?

Дякуємо за ваш відгук!