> For the complete documentation index, see [llms.txt](https://utm-1.gitbook.io/utm-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://utm-1.gitbook.io/utm-docs/dokumentaciya/utm-it/resheniya/organizaciya-dostupov/spravochnaya-informaciya/istio.md).

# Istio

Istio — это платформа Service Mesh, предназначенная для управления сетевым взаимодействием микросервисов в распределённых системах, таких как Kubernetes. Она обеспечивает централизованное управление трафиком, безопасность, наблюдаемость и политику доступа без изменения кода приложений. Ключевым компонентом Istio является Envoy — высокопроизводительный прокси-сервер, который работает как sidecar-контейнер рядом с каждым микросервисом.

#### Связь Istio и Envoy

Istio использует Envoy в качестве прокси-серверов, развёрнутых по шаблону sidecar. Эти прокси перехватывают весь входящий и исходящий трафик микросервисов, управляя им согласно конфигурациям, полученным от control plane Istio. Envoy выполняет следующие функции в Data Plane:

* Перехват и управление трафиком.
* Балансировка нагрузки.
* Динамическая маршрутизация запросов (для канареечных развёртываний, A/B-тестирования).
* Сбор телеметрии (метрики, трассировки, логи).
* Применение политик безопасности (шифрование, правила доступа).&#x20;

Control plane Istio (компонент istiod) преобразует высокоуровневые политики, заданные через API Istio, в низкоуровневые настройки для Envoy. Это позволяет централизованно управлять поведением прокси-серверов.

#### Архитектура Istio

Istio логически разделена на два основных компонента:

1. **Data Plane** — состоит из прокси-серверов Envoy, развёрнутых как sidecar-контейнеры в подах Kubernetes.
2. **Control Plane** — управляет конфигурацией прокси. В современных версиях платформы его функции выполняет единый компонент istiod. Он отвечает за:
   * Конфигурацию сервисов и прокси.
   * Распространение политик маршрутизации, безопасности и телеметрии.
   * Генерацию и ротацию сертификатов для mTLS.&#x20;

#### Установка Istio в Kubernetes

Для установки Istio в Kubernetes можно использовать Helm или оператор Istio. Вот основные шаги с использованием Helm:

1. **Подготовка**:
   * Установите Helm, если он ещё не установлен, и добавьте репозиторий Istio:

     ```bash
     bashcurl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bashhelm repo add istio https://istio-release.storage.googleapis.com/chartshelm repo update
     ```
2. **Создание пространства имён для Istio**:

   ```bash
   bashkubectl create namespace istio-system
   ```
3. **Установка Istio**:

   ```bash
   bashhelm install istio-base istio/base -n istio-systemhelm install istiod istio/istiod -n istio-system --waithelm install istio-ingress istio/gateway -n istio-system --wait
   ```
4. **Включение автоматического инъектора sidecar**:

   ```bash
   bashkubectl label namespace default istio-injection=enabled
   ```

После этого при развёртывании приложений в пространстве имён `default` Istio автоматически добавит sidecar-прокси Envoy в поды.&#x20;

#### Дополнительные шаги

* **Настройка маршрутизации**: используйте ресурсы VirtualService и DestinationRule для определения правил маршрутизации трафика.&#x20;
* **Безопасность**: включите mTLS для шифрования трафика между сервисами, настроив политику PeerAuthentication.&#x20;
* **Наблюдаемость**: используйте инструменты, такие как Kiali, Prometheus, Grafana и Jaeger, для мониторинга и трассировки.

#### Важные замечания

* **Накладные расходы**: sidecar-прокси добавляют нагрузку на CPU и память, а также вносят задержку в обработку запросов.&#x20;
* **Сложность**: Istio — сложная система, требующая времени на изучение и настройку.&#x20;
* **Совместимость**: убедитесь, что ваши приложения и инфраструктура совместимы с Istio, так как промежуточный слой может вызвать проблемы в некоторых случаях.&#x20;

Istio особенно полезен для крупных и сложных систем, где требуется глубокий контроль над трафиком, безопасность и наблюдаемость. Для небольших проектов его использование может быть избыточным.
