Архітектура віртуальних машин

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

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

Для робочих навантажень, які працюють на Kubernetes, сама платформа Kubernetes надає різні функції, такі як виявлення сервісів, DNS-резолюція та перевірка стану, яких часто бракує у середовищах віртуальних машин. Istio забезпечує ці функції для робочих навантажень, що працюють на віртуальних машинах, і дозволяє використовувати можливості Istio, такі як взаємний TLS (mTLS), докладна телеметрія та розширене керування трафіком.

Нижче наведено діаграму архітектури mesh з віртуальними машинами:

У цьому mesh є одна мережа, де podʼи та віртуальні машини можуть безпосередньо взаємодіяти між собою.

Трафік панелі управління, включаючи XDS-конфігурацію та підписання сертифікатів, передається через шлюз у кластері. Це забезпечує стабільну адресу для підключення віртуальних машин під час завантаження. Podʼи та віртуальні машини можуть взаємодіяти безпосередньо без необхідності використання проміжного шлюзу.

Сервісна мережа з одною мережею та віртуальними машинами
Сервісна мережа з одною мережею та віртуальними машинами

Асоціація сервісів

Istio надає два механізми для представлення робочих навантажень віртуальних машин:

  • WorkloadGroup представляє логічну групу робочих навантажень віртуальних машин, що мають спільні властивості. Це схоже на Deployment у Kubernetes.
  • WorkloadEntry представляє одну інстанцію робочого навантаження віртуальної машини. Це схоже на Pod у Kubernetes.

Створення цих ресурсів (WorkloadGroup та WorkloadEntry) не призводить до розгортання будь-яких ресурсів або запуску робочих навантажень на віртуальних машинах. Ці ресурси просто посилаються на ці навантаження та інформують Istio про те, як налаштувати mesh належним чином.

При додаванні робочого навантаження віртуальної машини до mesh потрібно створити WorkloadGroup, яка діятиме як шаблон для кожної інстанції WorkloadEntry:

apiVersion: networking.istio.io/v1
kind: WorkloadGroup
metadata:
  name: product-vm
spec:
  metadata:
    labels:
      app: product
  template:
    serviceAccount: default
  probe:
    httpGet:
      port: 8080

Після того як віртуальна машина буде налаштована та додана до mesh, відповідний WorkloadEntry буде автоматично створений панеллю управління Istio. Наприклад:

apiVersion: networking.istio.io/v1
kind: WorkloadEntry
metadata:
  annotations:
    istio.io/autoRegistrationGroup: product-vm
  labels:
    app: product
  name: product-vm-1.2.3.4
spec:
  address: 1.2.3.4
  labels:
    app: product
  serviceAccount: default

Цей ресурс WorkloadEntry описує одну інстанцію робочого навантаження, подібно до pod у Kubernetes. Коли навантаження буде вилучено з mesh, ресурс WorkloadEntry буде автоматично видалено. Крім того, якщо в ресурсі WorkloadGroup налаштовані перевірки стану, панель управління Istio автоматично оновлює стан справності відповідних інстанцій WorkloadEntry.

Щоб споживачі могли надійно звертатися до вашого навантаження, рекомендується оголосити асоціацію з Service. Це дозволяє клієнтам звертатися до стабільного імені хосту, наприклад, product.default.svc.cluster.local, а не до тимчасових IP-адрес. Це також дозволяє використовувати розширені можливості маршрутизації в Istio через API DestinationRule і VirtualService.

Будь-який сервіс Kubernetes може прозоро вибирати навантаження як із podʼів, так і з віртуальних машин через поля селектора, які відповідно збігаються з мітками podʼів і WorkloadEntry.

Наприклад, сервіс з назвою product складається з podʼа та WorkloadEntry:

Вибір сервісу

З цим налаштуванням запити до product будуть розподілятися між podʼом та інстанціями робочого навантаження віртуальної машини.

DNS

Kubernetes забезпечує DNS-резолюцію в podʼах для імен сервісів, що дозволяє podʼам легко взаємодіяти між собою через стабільні імена хостів.

Для розширення віртуальних машин Istio надає подібну функціональність через DNS Proxy. Ця функція перенаправляє всі DNS-запити від робочого навантаження віртуальної машини до проксі Istio, який підтримує відповідність між іменами хостів та IP-адресами.

Таким чином, робочі навантаження на віртуальних машинах можуть прозоро викликати сервіси (подібно до podʼів) без необхідності додаткового налаштування.

Чи була ця інформація корисною?
Чи є у вас пропозиції щодо покращення?

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