Установка узлового агента Istio CNI
Узловой агент Istio CNI используется для настройки перенаправления трафика для pod'ов в mesh. Он запускается как DaemonSet на каждом узле с повышенными правами. Узловой агент Istio CNI можно использовать в двух режимах data plane Istio.
В режиме data plane с sidecar узловой агент Istio CNI необязателен. Он устраняет необходимость запуска привилегированных init-контейнеров в каждом pod'е в mesh, заменяя эту модель одним привилегированным pod'ом узлового агента на каждом узле Kubernetes.
Узловой агент Istio CNI обязателен в режиме data plane ambient.
Этот документ посвящен использованию узлового агента Istio CNI как необязательной части режима data plane с sidecar.
Если вы создаете service mesh в кластере OpenShift, Istio CNI включен по умолчанию, поэтому вам не нужно выполнять шаги из этого документа.
Содержание
Предварительные требованияСреды, в которых Istio CNI должен использоватьсяСреды, в которых Istio CNI можно использоватьСреды, в которых Istio CNI нельзя использоватьУстановка узлового агента Istio CNIУстановка компонента ServiceMesh Istio CNIДополнительная настройкаПроверкаОбработка внедрения init containerИспользование и проверкаСостояние гонки и смягчениеСм. такжеПредварительные требования
Среды, в которых Istio CNI должен использоваться
- Huawei Cloud CCE
- Среды с высокими требованиями к безопасности. (Например, среды, в которых запрещено использование разрешений
NET_ADMINиNET_RAWв прикладных workloads)
Среды, в которых Istio CNI можно использовать
- Любой кластер Kubernetes, в котором включена поддержка CNI
Среды, в которых Istio CNI нельзя использовать
- Кластеры с отключенной поддержкой CNI в Kubernetes (только среды разработки, например
KIND)
Установка узлового агента Istio CNI
Сначала установите service mesh обычным способом. После установки пока не добавляйте никаких сервисов (то есть не внедряйте Sidecar). Затем выполните следующие шаги для установки и настройки Istio CNI.
Установка компонента ServiceMesh Istio CNI
В большинстве сред базовый кластер Istio с включенным компонентом istioCni можно установить с помощью следующих команд:
- istioCni требуется для установки узлового агента Istio CNI.
- Обычно устанавливается в namespace
kube-system.
Дополнительная настройка
При использовании OpenShift или Multus CNI:
- cni.values.chained должно быть
false. - cnivalues.provider должно быть
multus.
- Уровень логирования. (По умолчанию:
info) - Каталог бинарных файлов CNI. (По умолчанию:
/opt/cni/bin) - Каталог конфигурации CNI. (По умолчанию:
/etc/cni/net.d) - Файл конфигурации, в который будет вставлена конфигурация плагина istioCni; по умолчанию это будет первый найденный файл в cniConfiDir.
- Этот каталог должен существовать на узле; если это не так, обратитесь к документации вашего контейнерного runtime за подходящим путем. (По умолчанию:
/var/run/netns, в minikube/docker/others может быть/var/run/docker/netns) - Развернуть конфигурационные файлы как цепочку плагинов (значение
true) или как автономные файлы в каталоге conf (значениеfalse). - Пользовательская настройка выполняется в зависимости от провайдера CNI, возможные значения:
defaultиmultus. (По умолчанию:default)
Проверка
Убедитесь, что все pod'ы узлового агента CNI находятся в состоянии Running, прежде чем переходить к следующему шагу.
Обработка внедрения init container
По умолчанию Istio использует webhook для внедрения контейнера istio-init для прозрачного перехвата трафика.
Чтобы использовать Istio CNI вместо контейнера istio-init, необходимо изменить ресурс ServiceMesh следующим образом:
- Следует ли включать Istio CNI вместо контейнера
istio-init. (По умолчанию:false) - Провайдер CNI. Должен быть
multus, если используется Multus CNI. (По умолчанию:default)
Использование и проверка
После установки и настройки используйте обычный процесс внедрения сервиса без дополнительных изменений.
После установки и корректной настройки компонента Istio CNI в pod'ах будут выполнены следующие изменения:
- Контейнер
istio-initбольше не будет присутствовать (прозрачный перехват трафика будет обрабатываться узловым агентом Istio CNI). - Вместо него Istio внедрит контейнер
istio-validation, который проверяет, успешно ли заданы правила iptables для прозрачного перехвата трафика.
Состояние гонки и смягчение
DaemonSet Istio CNI устанавливает сетевой плагин CNI на каждом узле. Однако существует временной промежуток между тем,
когда pod DaemonSet запланирован на узел, и когда плагин CNI установлен и готов к использованию.
Есть вероятность, что в этот промежуток времени запустится pod приложения, а kubelet ничего не будет знать
о плагине Istio CNI.
В результате pod приложения поднимется без перенаправления трафика Istio и обойдет sidecar Istio.
Чтобы смягчить гонку между pod'ом приложения и DaemonSet Istio CNI, в рамках внедрения sidecar
добавляется init container istio-validation, который определяет, правильно ли настроено перенаправление трафика, и
блокирует запуск pod'а, если это не так.
DaemonSet CNI обнаружит и обработает любой pod, застрявший в таком состоянии; способ обработки pod'а зависит от
описанной ниже конфигурации.
Это смягчение включено по умолчанию и может быть отключено путем установки cni.values.repair.enabled в false.
- Следует ли включать смягчение. (По умолчанию:
true) - Если включено, pod'ы динамически перенастраиваются так, чтобы иметь корректную конфигурацию. При перезапуске контейнера pod продолжит нормальное выполнение. (По умолчанию:
true) - Если включено, pod'ы удаляются; при повторном планировании они будут иметь корректную конфигурацию. (По умолчанию:
false) - Если включено, pod'ы только помечаются меткой
cni.istio.io/uninitialized=true. Пользователю потребуется выполнить ручные действия для устранения проблемы. (По умолчанию:false)
Приоритет конфигурации: repairPods > deletePods > labelPods. Поэтому будет использовано первое поле со значением true и более высоким приоритетом.
Например, чтобы сработал deletePods, недостаточно установить для deletePods значение true; также необходимо установить для repairPods значение false.