Для программирования service mesh управляющая плоскость Istio (Istiod) считывает различные конфигурации, включая основные типы Kubernetes, такие как Service
и Node
, а также собственные типы Istio, например Gateway
. Эти данные затем отправляются в плоскость данных (подробнее см. в разделе Architecture).
По умолчанию управляющая плоскость считывает всю конфигурацию во всех пространствах имён. Каждый экземпляр прокси также получает конфигурацию для всех пространств имён. Это включает информацию о рабочих нагрузках, которые не зарегистрированы в mesh.
Такое поведение по умолчанию обеспечивает корректную работу из коробки, но сопровождается затратами на масштабируемость. Каждая конфигурация требует ресурсов (в первую очередь CPU и памяти) для поддержки и актуализации. При больших масштабах критически важно ограничить область действия конфигурации, чтобы избежать чрезмерного потребления ресурсов.
Istio предлагает несколько инструментов для управления областью действия конфигурации в зависимости от различных сценариев использования. В зависимости от ваших требований их можно использовать по отдельности или в комбинации.
Sidecar
предоставляет механизм для конкретных рабочих нагрузок, чтобы импортировать набор конфигурацийexportTo
предоставляет механизм для экспорта конфигурации к набору рабочих нагрузокdiscoverySelectors
предоставляет механизм, позволяющий Istio полностью игнорировать набор конфигурацийПри подключении к сервису, который был исключён с помощью одного из механизмов ограничения области действия, плоскость данных не будет иметь информации о назначении, поэтому такой трафик будет рассматриваться как Unmatched traffic.
Хотя Gateways учитывают exportTo
и discoverySelectors
, объекты Sidecar
не влияют на Gateways. Однако, в отличие от sidecar, gateways по умолчанию не имеют конфигурации для всего кластера. Вместо этого каждая конфигурация явно прикрепляется к gateway, что в основном избегает этой проблемы.
Тем не менее, в настоящее время часть конфигурации плоскости данных (так называемый «cluster» в терминах Envoy) всегда отправляется для всего кластера, даже если она не указана явно.