Активация Istio для приложений возможна, если в кластере включен и настроен модуль istio. За это отвечает администратор кластера.

Суть активации — добавить сайдкар-контейнер к подам приложения, после чего Istio сможет управлять трафиком.

Рекомендованный способ добавления сайдкаров — использовать сайдкар-injector. Istio умеет «подселять» к подам приложения сайдкар-контейнер с помощью механизма Admission Webhook. Для добавления сайдкаров используются лейблы и аннотации:

  • Лейбл к namespace — обозначает ваше пространство имён для компонента сайдкар-injector. После применения лейбла к новым подам будут добавлены сайдкар-контейнеры:
    • istio-injection=enabled — использует глобальную версию Istio (spec.settings.globalVersion в ресурсе ModuleConfig);
    • istio.io/rev=v1x16 — использует конкретную версию Istio для этого пространства имён.
  • Аннотация к поду sidecar.istio.io/inject ("true" или "false") позволяет локально переопределить политику sidecarInjectorPolicy. Эти аннотации работают только в пространствах имён, обозначенных лейблами из списка выше.

Также существует возможность добавить сайдкар к определенному поду в пространстве имён без установленных лейблов istio-injection=enabled или istio.io/rev=vXxYZ путем установки лейбла sidecar.istio.io/inject=true.

Istio-proxy, который работает в качестве сайдкар-контейнера, тоже потребляет ресурсы и добавляет накладные расходы:

  • Каждый запрос DNAT’ится в Envoy, который обрабатывает это запрос и создает еще один. На принимающей стороне — аналогично.
  • Каждый Envoy хранит информацию обо всех сервисах в кластере, что требует памяти. Больше кластер — больше памяти потребляет Envoy. Решение — кастомный ресурс Sidecar.

Также важно подготовить Ingress-контроллер и Ingress-ресурсы приложения:

  • Включите enableIstioSidecar у ресурса IngressNginxController.
  • Добавьте аннотации на Ingress-ресурсы приложения:
    • nginx.ingress.kubernetes.io/service-upstream: "true" — Ingress-контроллер в качестве upstream использует ClusterIP сервиса вместо адресов подов. Балансировкой трафика между подами теперь занимается сайдкар-proxy. Используйте эту опцию, только если у вашего сервиса есть ClusterIP;
    • nginx.ingress.kubernetes.io/upstream-vhost: "myservice.myns.svc" — сайдкар-proxy Ingress-контроллера принимает решения о маршрутизации на основе заголовка Host. Без этой аннотации контроллер оставит заголовок с адресом сайта, например Host: example.com.