Установка агента узла Istio CNI
Агент узла Istio CNI используется для настройки перенаправления трафика для pod'ов в mesh. Он запускается как DaemonSet на каждом узле с повышенными привилегиями. Агент узла Istio CNI можно использовать в двух режимах data plane Istio.
В режиме data plane sidecar агент узла Istio CNI является необязательным. Он устраняет необходимость запуска привилегированных init containers в каждом pod'е в mesh, заменяя эту модель одним привилегированным pod'ом агента узла на каждом узле Kubernetes.
В режиме data plane ambient агент узла Istio CNI обязателен.
Этот документ посвящен использованию агента узла 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в рабочих нагрузках)
Окружения, в которых можно использовать Istio CNI
- Любой кластер Kubernetes с включенной поддержкой CNI
Окружения, в которых нельзя использовать Istio CNI
- Кластеры с отключенной поддержкой Kubernetes CNI (только среды разработки, такие как
KIND)
Установка агента узла Istio CNI
Сначала установите service mesh обычным способом. После установки пока не добавляйте никаких сервисов (то есть не внедряйте Sidecar). Затем выполните следующие шаги для установки и настройки Istio CNI.
Установка с помощью компонента ServiceMesh Istio CNI
В большинстве окружений базовый кластер Istio с включенным компонентом istioCni можно установить с помощью следующих команд:
- istioCni требуется для установки агента узла Istio CNI.
- Обычно устанавливается в пространстве имен
kube-system.
Дополнительная конфигурация
При использовании OpenShift или Multus CNI:
- cni.values.chained должно быть
false. - cnivalues.provider должно быть
multus.
- Уровень логирования. (По умолчанию:
info) - Каталог бинарных файлов CNI. (По умолчанию:
/opt/cni/bin) - Каталог конфигурации CNI. (По умолчанию:
/etc/cni/net.d) - Файл конфигурации, в который нужно вставить конфигурацию плагина istioCni; по умолчанию это будет первый найденный файл в cniConfiDir.
- Этот каталог должен существовать на узле; если его нет, обратитесь к документации вашего container runtime для определения подходящего пути. (По умолчанию:
/var/run/netns) - Развертывать файлы конфигурации как цепочку плагинов (значение
true) или как автономные файлы в каталоге conf (значениеfalse). - Пользовательская конфигурация выполняется в зависимости от CNI provider; возможные значения:
defaultиmultus. (По умолчанию:default)
Проверка
Убедитесь, что все pod'ы агента узла CNI находятся в состоянии Running, прежде чем переходить к следующему шагу.
Обработка внедрения init container
По умолчанию Istio использует webhook для внедрения контейнера istio-init для прозрачного перехвата трафика.
Чтобы использовать Istio CNI вместо контейнера istio-init, необходимо изменить ресурс ServiceMesh следующим образом:
- Следует ли включать Istio CNI вместо контейнера
istio-init. (По умолчанию:false) - CNI provider. Должно быть
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.