Использование DiscoverySelectors

Рабочая нагрузка включается в Service Mesh, если она удовлетворяет двум условиям:

  • Она была обнаружена управляющей плоскостью.
  • В неё был внедрён прокси-сайдкар Envoy.

По умолчанию управляющая плоскость сканирует рабочие нагрузки во всех пространствах имён кластера. Такое поведение по умолчанию приводит к двум результатам:

  • Каждый экземпляр прокси настраивается для всех пространств имён, даже для рабочих нагрузок, не входящих в mesh.
  • Прокси-сайдкар внедряется в любую рабочую нагрузку, у которой на pod или namespace стоит правильная метка для инъекции.

Содержание

Понимание discovery selectors

Discovery selectors позволяют администратору mesh управлять тем, какие пространства имён управляющая плоскость может отслеживать. Администратор использует селектор меток Kubernetes для определения критериев пространств имён, которые должны быть видимы управляющей плоскости, эффективно скрывая все пространства имён, не соответствующие этим критериям.

WARNING

Istiod всегда будет открывать watch на Kubernetes для всех пространств имён. Однако discovery selectors игнорируют объекты, которые не выбраны, очень рано в процессе обработки, минимизируя затраты.

Поле discoverySelectors принимает массив селекторов Kubernetes, которые применяются к меткам пространств имён. Каждый селектор может быть настроен для различных сценариев:

  • Пользовательские имена и значения меток. Например, настройка всех релевантных пространств имён с меткой istio-discovery=enabled.
  • Список меток пространств имён. Это можно сделать с помощью селекторов на основе множеств, использующих логику OR. Например, настройка пространств имён, которые имеют либо istio-discovery=enabled, ЛИБО region=us-east1.
  • Включение и исключение пространств имён. Например, настройка пространств имён, которые обладают одновременно метками istio-discovery=enabled И app=helloworld.
WARNING

Важно отметить, что discovery selectors не являются границей безопасности. Даже при настройке поля discoverySelector Istiod сохраняет доступ ко всем пространствам имён.

Как ограничить область Service Mesh с помощью Discovery Selectors

Когда вы определили пространства имён, которые должны быть включены в Service Mesh, вы можете настроить discoverySelectors как во время установки, так и после неё. Это делается путём добавления необходимых селекторов в поле meshConfig.discoverySelectors внутри ресурса Istio. Например, можно настроить Istio так, чтобы оно обнаруживало только пространства имён с меткой istio-discovery=enabled.

Требования

  • Установлен оператор Alauda Service Mesh v2.
  • Развернут Istio CNI.
  • Развернута управляющая плоскость Istio.

Процедура

  1. Примените метку к пространству имён, в котором работает управляющая плоскость Istio, например, к пространству имён istio-system.

    kubectl label namespace istio-system istio-discovery=enabled
  2. Обновите ресурс управляющей плоскости Istio, добавив раздел discoverySelectors, использующий ту же метку.

    kind: Istio
    apiVersion: sailoperator.io/v1
    spec:
      namespace: istio-system
      # Applying the following contents to your Istio Custom Resource:
      values:
        meshConfig:
          discoverySelectors:
            - matchLabels:
                istio-discovery: enabled
  3. Убедитесь, что каждое пространство имён, предназначенное для размещения рабочих нагрузок Service Mesh, помечено как меткой discoverySelector, так и, при необходимости, соответствующей меткой для инъекции Istio.

Ссылки