Архітектура віртуальних машин
Перш ніж читати цей документ, обовʼязково ознайомтеся з архітектурою Istio та моделями розгортання. Ця сторінка розширює вищезгадані документи та пояснює, як можна розширити Istio для підтримки приєднання віртуальних машин до mesh.
Підтримка віртуальних машин в Istio дозволяє підключати робочі навантаження за межами кластера Kubernetes до mesh. Це дає змогу підключати застарілі застосунки або застосунки, які не підходять для контейнеризованого середовища, щоб отримати всі переваги, які надає Istio для застосунків, що працюють у Kubernetes.
Для робочих навантажень, які працюють на Kubernetes, сама платформа Kubernetes надає різні функції, такі як виявлення сервісів, DNS-резолюція та перевірка стану, яких часто бракує у середовищах віртуальних машин. Istio забезпечує ці функції для робочих навантажень, що працюють на віртуальних машинах, і дозволяє використовувати можливості Istio, такі як взаємний TLS (mTLS), докладна телеметрія та розширене керування трафіком.
Нижче наведено діаграму архітектури mesh з віртуальними машинами:
У цьому mesh є одна мережа, де podʼи та віртуальні машини можуть безпосередньо взаємодіяти між собою.
Трафік панелі управління, включаючи XDS-конфігурацію та підписання сертифікатів, передається через шлюз у кластері. Це забезпечує стабільну адресу для підключення віртуальних машин під час завантаження. Podʼи та віртуальні машини можуть взаємодіяти безпосередньо без необхідності використання проміжного шлюзу.
У цьому 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ʼів) без необхідності додаткового налаштування.