Особенности архитектуры

  • Sidecar-proxy: Каждый под сервиса получает дополнительный контейнер — sidecar-proxy, содержащий два приложения:
    • Envoy — проксирует прикладной трафик и реализует весь функционал, который предоставляет Istio, включая маршрутизацию, аутентификацию, авторизацию и пр.
    • Pilot-agent — часть Istio, отвечает за поддержание конфигурации Envoy в актуальном состоянии, а также содержит в себе кэширующий DNS-сервер.
  • Настройки DNAT:
    • В каждом поде настраивается DNAT входящих и исходящих прикладных запросов в sidecar-proxy. Делается это с помощью дополнительного init-контейнера. Таким образом, трафик будет перехватываться прозрачно для приложений.
    • Поскольку входящий трафик перенаправляется в sidecar-proxy, это касается и readiness/liveness-проб. Так как подсистема Kubernetes не поддерживает пробы в формате Mutual TLS, все существующие пробы перенастраиваются на порт в sidecar-proxy, который передает их приложению без изменений.
  • Ingress-контроллер:
    • Каждый под Ingress-контроллера также включает sidecar-proxy, который обрабатывает трафик между контроллером и сервисами.
    • Входящий трафик от пользователей обрабатывается непосредственно контроллером.
  • Ресурсы типа Ingress: Эти ресурсы требуют минимальной доработки в виде добавления аннотаций:
    • nginx.ingress.kubernetes.io/service-upstream: "true" — Ingress-контроллер в качестве upstream будет использовать ClusterIP сервиса вместо адресов подов. Балансировкой трафика между подами теперь занимается sidecar-proxy. Используйте эту опцию, только если у вашего сервиса есть ClusterIP.
    • nginx.ingress.kubernetes.io/upstream-vhost: "myservice.myns.svc" — sidecar-proxy Ingress-контроллера принимает решения о маршрутизации на основе заголовка Host. Без данной аннотации контроллер оставит заголовок с адресом сайта, например Host: example.com.
  • Сервисы:
    • Ресурсы типа Service не требуют изменений и продолжают работать без адаптации. Приложениям все так же доступны адреса сервисов вида servicename, servicename.myns.svc и пр.
  • DNS-запросы:
    • Внутренние DNS-запросы подов прозрачно перенаправляются на обработку в sidecar-proxy для разрешения DNS-имен сервисов из соседних кластеров.

Жизненный цикл пользовательского запроса

Приложение с выключенным Istio

Приложение с включенным Istio