Руководство по установке#
Термины и определения#
Термин/Аббревиатура |
Определение |
|---|---|
Платформа |
Платформа оркестрации приложений с средствами автоматизации и управления на основе политик, например Kubernetes |
Контрольная панель |
Проект, где запущены управляющие приложения |
Istio SE |
Настраиваемая сервисная сетка с открытым исходным кодом, служащая для взаимодействия, мониторинга и обеспечения безопасности контейнеров в кластере Kubernetes |
Управление политиками / POLM |
Компонент Управление политиками |
Граничный прокси / IGEG |
Компонент Граничный прокси |
Сервисный прокси / SVPX |
Компонент Сервисный прокси |
Request/Реквест |
Объем ресурсов, который необходим для запуска приложения |
Limit/Лимит |
Максимальный объем ресурсов, который выдается на работу сервиса |
Liveness-проба |
Программный зонд для определения живучести контейнера |
Node |
Единица Kubernetes, предоставляющая среду для работы контейнеров |
Pod |
Абстрактный объект Kubernetes, представляющий собой группу из одного или нескольких контейнеров приложения и совместно используемых ресурсов для этих контейнеров |
Системные требования#
Настройки безопасности окружения и перечень платформенных (дополнительных внешних) продуктов, используемых для установки, настройки и контроля в конечной информационной системе (далее — ИС), выбираются клиентом при разработке конечной ИС, исходя из характера обрабатываемой в ней информации и иных требований информационной безопасности (далее — ИБ), предъявляемых к ней.
Системное программное обеспечение#
Ниже представлены категории системного программного обеспечения (далее — ПО), которые обязательны или опциональны для установки, настройки, контроля и функционирования компонента. В каждой категории перечислены все поддерживаемые продукты сторонних правообладателей. Отдельно обозначены варианты, которые рекомендует АО «СберТех» (маркировка «Рекомендовано» в столбце «Продукт, функциональная совместимость с которым подтверждена»). Клиенту необходимо выбрать один из продуктов в каждой категории, исходя из условий использования конечной ИС.
Категория ПО |
Обязательность установки (да/нет)* |
Наименование ПО |
Версия |
Продукт, функциональная совместимость с которым подтверждена** |
Описание |
|---|---|---|---|---|---|
Операционная система |
Да |
10 |
Рекомендовано. Правообладателем АО «СберТех» также рекомендована ОС – Platform V SberLinux OS Server, см. раздел «Платформенные зависимости» |
ОС контейнеров для запуска модулей компонента |
|
8 и выше |
Опционально |
||||
Cреда контейнеризации |
Да |
1.19 и выше |
Рекомендовано. Правообладателем АО «СберТех» также рекомендована среда контейнеризации – Platform V DropApp, см. раздел «Платформенные зависимости» |
Платформа контейнеризации для запуска компонентов сервиса |
|
4.6 и выше |
Опционально |
||||
Средство контейнеризации |
Да |
19.03.14 |
Рекомендовано |
Инструмент для автоматизации работы с контейнерами |
|
Сервис централизованного хранения репозиториев артефактов (хранилище артефактов) |
Да |
3.42.0 |
Рекомендовано |
Интегрированная платформа для проксирования, хранения и управления зависимостями Java (Maven), образами, а также распространения ПО |
|
3.43.0 |
Опционально |
||||
Nexus Repository Manager OSS |
3.43.0 |
Опционально |
|||
Сервис централизованного хранения репозиториев исходного кода |
Да |
15.7 и выше |
Рекомендовано |
Хранение конфигураций при автоматизированной установке |
|
7.6.7 |
Опционально |
||||
Сервис интеграции и оркестрации микросервисов в облаке |
Нет |
1.6 и выше |
Опционально |
Сервис интеграции микросервисов в облаке |
|
Менеджер пакетов |
Нет |
3.8 и выше |
Опционально |
Инструмент для автоматизации создания, настройки и развертывания приложений и служб в k8s |
Примечание:
*
Да — категория ПО обязательна для функционирования сервиса (это означает, что сервис не может выполнять свои основные функции без установки данной категории ПО).
Нет — категория ПО необязательна для функционирования сервиса (это означает, что сервис может выполнять свои основные функции без установки данной категории ПО).
**
Рекомендовано — рекомендованный правообладателем АО «СберТех» продукт.
Опционально — альтернативный по отношению к рекомендованному правообладателем АО «СберТех» продукт.
(!)В случае использования какой-либо другой облачной платформы, основанной на Kubernetes, необходимо убедиться, что в ее основе используется Kubernetes версии не ниже 1.19.
Платформенные зависимости#
У компонента реализована интеграция со следующими компонентами из состава продукта:
Наименование компонента |
Код |
Описание |
|---|---|---|
Граничный прокси |
IGEG |
Обработанная конфигурация загружается в виде настроек в IGEG. Также IGEG подписывается на рассылку конфигураций от POLM |
Сервисный прокси |
SVPX |
Обработанная конфигурация загружается в виде настроек в SVPX. Также SVPX подписывается на рассылку конфигураций от POLM |
DevOps инструменты Service Mesh |
SMDL |
Сборка, установка и администрирование сервисов на Synapse |
Для настройки, контроля и функционирования компонента реализована интеграция с программным продуктом, правообладателем которого является АО «СберТех»:
Наименование продукта |
Код |
Версия продукта |
Код и наименование компонента |
Обязательность установки (да/нет) |
Описание |
Аналог других производителей |
|---|---|---|---|---|---|---|
Platform V DropApp |
K8S |
1.1 и выше |
K8SC K8S Core |
Нет |
Дистрибутив Kubernetes со встроенными механизмами мультитенантности и бессерверным исполнением |
Kubernetes, Red Hat OpenShift Container Platform |
Platform V SberLinux OS Server |
SLO |
8.7 и выше |
INST Операционная система |
Нет |
ОС контейнеров для запуска модулей компонента |
ОС Альт 8 СП |
Примечание:
***
Да — компонент или продукт необходим для функционирования сервиса (это означает, что сервис не может выполнять свои основные функции без установки данного компонента).
Нет — необязательный для функционирования сервиса компонент или продукт (это означает, что сервис может выполнять свои основные функции без установки данного компонента).
**** Рекомендуется установка программного продукта, правообладателем которого является АО «СберТех», при этом не исключена возможность (допускается правообладателем) использования аналога других производителей. Аналоги, в отношении которых продукт успешно прошел испытания и подтвердил свою работоспособность, указаны в разделе «Системное программное обеспечение».
Аппаратные требования#
Минимальные ресурсы, необходимые для компонента Управление политиками (зависит от количества конфигурационных файлов и проектов):
Контейнер |
CPU request |
Memory request |
CPU limit |
Memory limit |
|---|---|---|---|---|
istiod |
1000m |
2000Mi |
1000m |
2000Mi |
Минимальные ресурсы, необходимые для компонента Istio Operator (зависит от количества конфигурационных файлов и проектов):
Контейнер |
CPU request |
Memory request |
CPU limit |
Memory limit |
|---|---|---|---|---|
istio-operator |
50m |
128Mi |
200m |
256Mi |
Состав дистрибутива#
В состав дистрибутива POLM входит:
Элемент дистрибутива |
Описание |
|---|---|
./documentation |
Документация |
./istioctl |
Бинарные файлы istioctl для выполнения команд по установке |
./package/conf/helm |
Helm charts для установки и настройки Istio SE |
./package/bin |
Директория, содержащая в себе Dockerfile и бинарные файлы, необходимые для сборки образов компонент Istio SE * |
Состав дистрибутива может быть расширен дополнительными конфигурациями, учитывающими прикладные требования клиента. Конфигурация может представлять собой Helm Chart, применяемый следующей командой:
helm install <имя_релиза_helm> <путь_к_папке_с_конфигурацией>
Примечание:
*
Список компонент Istio SE в составе дистрибутива:
install-cni — Istio CNI Plugin (требуется для настройки сетевых правил маршрутизации (iptables) Сервисного прокси);
operator — приложение Istio Operator (сервис установки);
pilot — приложение istiod (POLM);
proxyv2 — приложение SVPX и IGEG.
Выбор способа установки#
Установку можно выполнить как с помощью Istio Operator (сервиса для установки Istio), так и с помощью Helm charts.
Подготовка окружения#
Перед установкой проверьте соблюдение следующих условий:
Развернут и настроен кластер Kubernetes версии 1.19 или выше, в соответствии с требованиями, предъявляемыми к Платформе.
Для доступа в Kubernetes c использованием консоли на рабочем месте должен быть установлен клиент Kubernetes (kubectl), совместимой с кластером Kubernetes версии.
Для установки сервиса Управления политиками необходимо иметь клиент Istio (istioctl), поставляется в дистрибутиве.
В случае выбора способа установки сервиса Управления политиками через Helm charts, на рабочем месте должен быть установлен helm, версии не ниже 3.6.
На один кластер может быть одновременно установлена только одна контрольная панель.
Каких-либо требований безопасности к рабочему окружению и к платформе Kubernetes со стороны POLM не предъявляется.
Установка#
Этот документ содержит названия переменных, которые применимы для различных сред контейнеризации, указанных в системных требованиях руководства по установке.
Сборка образов компонент Istio SE#
Базовый образ#
Для сборки образов компонент необходимо предварительно подготовить базовый образ, на основе которого должны собираться образы компонент Istio SE.
К базовому образу предъявляются следующие требования:
в базовом образе необходимо наличие утилиты iptables (при использовании istio-init контейнера вместо Istio CNI Plugin);
в базовом образе для SVPX, IGEG, POLM и Istio Operator необходимо наличие пользователя с ID 1337 (UID), принадлежащего группе с ID 1337 (GID), при условии, что значения UID и GID, задаваемые в Dockerfile компонента, не будут переопределяться платформой Kubernetes (директивы runAsUser и runAsGroup) во время исполнения;
в базовом образе для Istio CNI Plugin необходимо наличие пользователя с ID 0 (UID), принадлежащего группе с ID 0 (GID), при условии что значения UID и GID, задаваемые в Dockerfile компонента, не будут переопределяться платформой Kubernetes (директивы runAsUser и runAsGroup) во время исполнения.
Возможна сборка базового образа Istio на основе sberlinux.
Если необходимо закрыть возможность запуска исполняемой оболочки (shell или bash), можно удалить исполняемые файлы оболочек в Dockerfile для сборки базового образа:
FROM repo/sberlinux:latest
RUN rm /bin/bash
RUN rm /bin/sh
Способы администрирования компонент Istio, собранных без исполняемой оболочки, описаны в документации к IGEG и SVPX в Руководстве администратора.
Если базовый образ был предоставлен в виде архива, то загрузить его в ваш реестр образов можно следующими командами:
Загрузка образа из архива в локальный реестр образов:
docker load < <архив_с_образом>
Если требуется изменить tag загруженного из архива образа:
docker tag <старый_tag> <новый_tag>
Загрузка образа в реестр образов:
docker push <tag>
Компоненты Istio SE#
Каждый образ должен строго называться согласно названию компонента, так как далее эти названия могут быть автоматически использованы в процессе установки.
Также необходимо:
Проверить название образа перед push, чтобы был прописан полный путь.
Для каждого компонента перейти в папку package/bin/<название_компонента>.
Для сборки образа в качестве аргумента передать базовый образ:
docker build --build-arg BASE_IMAGE=<базовый_образ> -t <tag_компонента> .
Например:
docker build --build-arg BASE_IMAGE=sber-tech.com/istio-se/base:1.17 -t sber-tech.com/istio-se/pilot:1.17 .
Установка Istio#
Установить Istio можно с помощью Helm charts из дистрибутива, с помощью istioctl и с помощью Istio Operator. Использование Istio Operator является целевым способом установки и именно он будет рассмотрен далее по тексту документа. Установить istio-operator можно как с помощью istioctl, так и с помощью Helm charts.
Установка Istio Operator#
Предусловия:
В кластере создан проект, в котором будет развернута контрольная панель (обычно имя проекта задается как istio-system), далее проект контрольной панели.
В проекте контрольной панели создана учетная запись с правами на загрузку артефактов.
В проекте контрольной панели имеются свободные ресурсы по лимитам и requests не менее, чем зарезервировано в конфигурационных артефактах.
В кластере создан проект, в котором будет развернут Istio Operator для установки контрольной панели в проект контрольной панели (обычно имя проекта задается как istio-operator), далее проект Istio Operator.
В проекте Istio Operator создана учетная запись с правами на загрузку артефактов.
В проекте Istio Operator имеются свободные ресурсы по лимитам и requests не менее, чем зарезервировано в конфигурационных артефактах.
С помощью istioctl#
Для установки следует выполнить следующие действия:
Выполните установку с помощью istioctl.
Для установки оператора запустите istioctl со следующими аргументами:
operator
init
\--kubeconfig=<путь_к_файлу_kubeconfig>
\--operatorNamespace=<имя_проекта_для_установки_Istio_Operator>
\--hub=<ссылка_хранилище_с_артефактами_Istio>
\--imagePullSecrets=<имя_Secret_для_выкачки_артефактов>
\--watchedNamespaces=<имя_проекта_контрольной_панели>
\--tag=<docker_тэг_артефактов>
\--image=<ссылка_на_docker_образ_с_оператором>
\--resources=<json_объект_с_ресурсами_для_Istio_Operator>
Пример:
istioctl operator init --kubeconfig=./kubeconfig.json --operatorNamespace=istio-operator --hub=my.corp.cloud.ru/sber --imagePullSecrets=default-secret --watchedNamespaces=istio-system --tag=custom-1.11.2-alt
Если использовать аргумент image, то аргументы hub и tag будут проигнорированы. С помощью аргумента image можно задать образ с sha256, например: --image=my.company/repo@sha256:123456
Аргумент resources используется для проставления ресурсов для pod Istio Operator, например: --resources="{"resources": {"limits": {"cpu": "200m", "memory": "256Mi"}, "requests": {"cpu": "50m", "memory": "128Mi"}}}"
Значение ресурсов по умолчанию:
resources:
limits:
cpu: 200m
memory: 256Mi
requests:
cpu: 50m
memory: 128Mi
Аргумент может использоваться для переопределения значения ресурсов по умолчанию, например: --resources="{"resources": "requests": {"cpu": "150m", "memory": "256Mi"}}}"
В данном примере будут переопределены значения requests, а значения лимитов останутся значениями по умолчанию.
Если задать watchedNamespaces='', то Istio Operator будет обрабатывать конфигурации IstioOperator (конфигурация для установки Контрольной панели (Управления политиками)) со всего кластера. Иначе, при использовании watchedNamespaces со значениями, отличными от пустых, Istio Operator будет обрабатывать конфигурации IstioOperator только в перечисленных проектах.
Пример:
istioctl operator init --kubeconfig=./kubeconfig.json >--operatorNamespace=istio-operator --hub=my.corp.cloud.ru/sber >--imagePullSecrets=default-secret --watchedNamespaces='' >--tag=custom-1.11.2-alt
С помощью Helm charts#
Для установки Helm charts выполните следующую команду:
helm install <имя_шаблона> <путь_к_папке_с_Helm_charts> --namespace <имя_проекта_для_установки>
Пример:
helm install istio-base istio/base -n istio-system
Аргументы можно задать в файле values.yaml в той же папке или же через аргумент --set.
helm install <имя_шаблона> <путь_к_папке_с_Helm_charts> --namespace <имя_проекта_для_установки> --set <путь_к_ключ>=<значение>
Пример:
helm install <имя_шаблона> <путь_к_папке_с_Helm_charts> --namespace <имя_проекта_для_установки> --set watchedNamespaces=istio-system --set operator.resources.cpu=200m
Набор всех значений можно посмотреть в содержимом самого шаблона.
Установка компонента Управление политиками через консоль#
Установив оператор, можно устанавливать istiod. Для этого необходимо выполнить следующие действия:
Установку через консоль выполните с помощью kubectl.
Для установки контрольной панели в проекте контрольной панели создайте ресурс IstioOperator.
Пример шаблона конфигурационного файла:
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
metadata:
name: <название_ресурса_может_быть_любым>
spec:
profile: default
hub: <ссылка_хранилище_с_артефактами_Istio>
tag: <docker_тэг_артефактов>
meshConfig:
rootNamespace: <имя_проекта_контрольной_панели>
components:
egressGateways:
- name: istio-egressgateway
enabled: <флажок_включения_egress>
ingressGateways:
- name: istio-ingressgateway
enabled: <флажок_включения_ingress>
cni:
enabled: false
pilot:
enabled: true
values:
global:
imagePullSecrets:
- <имя_Secret_для_выкачки_артефактов>
istioNamespace: <имя_проекта_контрольной_панели>
imagePullPolicy: IfNotPresent
pilot:
resources:
limits:
cpu: <лимиты_CPU>
memory: <лимиты_Memory>
requests:
cpu: <реквесты_CPU>
memory: <реквесты_Memory>
Пример шаблона с заполненными параметрами:
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
metadata:
name: istiocontrolplane
spec:
profile: default
hub: my.corp.cloud.ru/sber
tag: custom-1.11.2-alt
meshConfig:
rootNamespace: istio-system
components:
egressGateways:
- name: istio-egressgateway
enabled: true
ingressGateways:
- name: istio-ingressgateway
enabled: true
cni:
enabled: false
pilot:
enabled: true
values:
global:
imagePullSecrets:
- default-secret
istioNamespace: istio-system
imagePullPolicy: IfNotPresent
pilot:
resources:
limits:
cpu: 1000m
memory: 2Gi
requests:
cpu: 1000m
memory: 2Gi
Создать ресурс через консоль можно следующими командами:
сохранив ресурс IstioOperator в файл, загрузить его в проект контрольной панели:
kubectl --kubeconfig=<путь_к_файлу_kubeconfig> apply -f <файл_с_ресурсом_IstioOperator>создать ресурс IstioOperator можно, передав его напрямую из потоков ввода данных консоли (stdin):
cat <<EOF | kubectl -n istio-system --kubeconfig=kubeconfig.json apply -f -
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
metadata:
name: <название_ресурса_может_быть_любым>
spec:
components:
cni:
enabled: false
egressGateways:
- enabled: <флажок_включения_egress>
name: istio-egressgateway
ingressGateways:
- enabled: <флажок_включения_ingress>
name: istio-ingressgateway
pilot:
enabled: true
hub: <ссылка_хранилище_с_артефактами_Istio>
meshConfig:
rootNamespace: <имя_проекта_контрольной_панели>
profile: default
tag: custom-1.11.2-alt
values:
global:
imagePullPolicy: IfNotPresent
imagePullSecrets:
- <имя_Secret_для_выкачки_артефактов>
istioNamespace: <имя_проекта_контрольной_панели>
pilot:
resources:
limits:
cpu: <лимиты_CPU>
memory: <лимиты_Memory>
requests:
cpu: <реквесты_CPU>
memory: <реквесты_Memory>
EOF
Установка компонента Управление политиками через пользовательский интерфейс#
Установив оператор, можно устанавливать istiod. Для этого необходимо выполнить следующие действия:
Установку через пользовательский интерфейс выполните с помощью веб-интерфейса Kubernetes.
Для установки контрольной панели в проекте контрольной панели создайте ресурс IstioOperator.
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
metadata:
name: <название_ресурса_может_быть_любым>
spec:
profile: default
hub: <ссылка_хранилище_с_артефактами_Istio>
tag: <docker_тэг_артефактов>
meshConfig:
rootNamespace: <имя_проекта_контрольной_панели>
components:
egressGateways:
- name: istio-egressgateway
enabled: <флажок_включения_egress>
ingressGateways:
- name: istio-ingressgateway
enabled: <флажок_включения_ingress>
cni:
enabled: false
pilot:
enabled: true
values:
global:
imagePullSecrets:
- <имя_Secret_для_выкачки_артефактов>
istioNamespace: <имя_проекта_контрольной_панели>
imagePullPolicy: IfNotPresent
pilot:
resources:
limits:
cpu: <лимиты_CPU>
memory: <лимиты_Memory>
requests:
cpu: <реквесты_CPU>
memory: <реквесты_Memory>
Пример:
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
metadata:
name: istiocontrolplane
spec:
profile: default
hub: my.corp.cloud.ru/sber
tag: custom-1.11.2-alt
meshConfig:
rootNamespace: istio-system
components:
egressGateways:
- name: istio-egressgateway
enabled: true
ingressGateways:
- name: istio-ingressgateway
enabled: true
cni:
enabled: false
pilot:
enabled: true
values:
global:
imagePullSecrets:
- default-secret
istioNamespace: istio-system
imagePullPolicy: IfNotPresent
pilot:
resources:
limits:
cpu: 1000m
memory: 2Gi
requests:
cpu: 1000m
memory: 2Gi
Создать ресурс IstioOperator в проекте контрольной панели через веб-интерфейс можно несколькими способами.
1 способ — предварительно сохранить ресурс IstioOperator в файл, загрузить его из файла:
В веб-интерфейсе выберите проект контрольной панели (1).
Нажмите на + для добавления нового ресурса в проект контрольной панели (2).
Нажмите Create from file .
Нажмите на ••• (3) для выбора файла, содержащего ресурс IstioOperator.
Нажмите Upload (4).

2 способ — вставить содержимое ресурса IstioOperator напрямую в веб-интерфейсе:
В веб-интерфейсе выберите проект контрольной панели (1).
Нажмите на + для добавления нового ресурса в проект контрольной панели (2).
По умолчанию уже будет открыта вкладка Create from input.
Вставьте в текстовую область (3) ресурс IstioOperator.
Нажмите Upload (4).

Примечание. Если использовать Istio CNI Plugin (выставить spec.components.cni.enabled = true), образ которого запускается не под root (директива USER в базовом Dockerfile использована с некоторым значением, отличным от root), то для запуска pods CNI Plugin необходимо выдать им root права. Сделать это можно с помощью следующих настроек в IstioOperator:
spec:
components:
cni:
enabled: true
k8s:
overlays:
- kind: DaemonSet
name: istio-cni-node
patches:
- path: spec.template.spec.securityContext
value: 'runAsUser: 0'
Или с помощью задания privileged. Можно также одновременно использовать обе настройки.
spec:
values:
cni:
privileged: true
Пример такой конфигурации:
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
metadata:
name: istiocontrolplane
spec:
profile: default
hub: my.corp.cloud.ru/sber
tag: custom-1.11.2-alt
meshConfig:
rootNamespace: istio-system
components:
egressGateways:
- name: istio-egressgateway
enabled: true
ingressGateways:
- name: istio-ingressgateway
enabled: true
pilot:
enabled: true
cni:
enabled: true
k8s:
overlays:
- kind: DaemonSet
name: istio-cni-node
patches:
- path: spec.template.spec.securityContext
value: 'runAsUser: 0'
values:
cni:
privileged: true
global:
imagePullSecrets:
- default-secret
istioNamespace: istio-system
imagePullPolicy: IfNotPresent
pilot:
resources:
limits:
cpu: 1000m
memory: 2Gi
requests:
cpu: 1000m
memory: 2Gi
Пример конфигурации IstioOperator для равномерного распределения pods istiod по nodes кластера#
Равномерное распределение istiods можно обеспечить, используя стандартные средства программного обеспечения оркестровки контейнеризированных приложений.
Наиболее подходящим инструментом, позволяющим управлять расположением pods, является affinity и anti-affinity.
Пример affinity для POLM#
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
...
spec:
...
components:
...
pilot:
enabled: true
k8s:
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 1
podAffinityTerm:
labelSelector:
matchExpressions:
- key: "app"
operator: In
values:
- "istiod"
topologyKey: "kubernetes.io/hostname"
...
До применения конфигурации список из десяти pods istiod выглядел следующим образом:
cab-wsm-0071416:charts $ kubectl get pod -o=custom-columns=NAME:.metadata.name,STATUS:.status.phase,NODE:.spec.nodeName -n crpv-13229-system
NAME STATUS NODE
istiod-system-75d9cb6cf4-5qsch Running worker-03.**.solution
istiod-system-75d9cb6cf4-8p8fg Running worker-03.**.solution
istiod-system-75d9cb6cf4-jf989 Running worker-03.**.solution
istiod-system-75d9cb6cf4-kr8c7 Running worker-03.**.solution
istiod-system-75d9cb6cf4-lgp4r Running worker-03.**.solution
istiod-system-75d9cb6cf4-m7xml Running worker-03.**.solution
istiod-system-75d9cb6cf4-pjgtp Running worker-03.**.solution
istiod-system-75d9cb6cf4-wmx95 Running worker-03.**.solution
istiod-system-75d9cb6cf4-wx5dq Running worker-03.**.solution
istiod-system-75d9cb6cf4-z6qr4 Running worker-03.**.solution
Можно заметить, что pods расположились на одной node.
После применения конфигурации видно равномерное распределение pods по nodes:
cab-wsm-0071416:charts $ kubectl get pod -o=custom-columns=NAME:.metadata.name,STATUS:.status.phase,NODE:.spec.nodeName -n crpv-13229-system
NAME STATUS NODE
istiod-system-84f847c7b8-2ddc6 Running worker-02.**.solution
istiod-system-84f847c7b8-595sw Running worker-02.**.solution
istiod-system-84f847c7b8-l949m Running worker-05.**.solution
istiod-system-84f847c7b8-nlxcz Running worker-04.**.solution
istiod-system-84f847c7b8-qvtpm Running worker-05.**.solution
istiod-system-84f847c7b8-qzgsw Running worker-01.**.solution
istiod-system-84f847c7b8-tv6wj Running worker-06.**.solution
istiod-system-84f847c7b8-wf2dq Running worker-04.**.solution
istiod-system-84f847c7b8-z8b47 Running worker-01.**.solution
istiod-system-84f847c7b8-zpxhk Running worker-03.**.solution
Настройка сетевых правил маршрутизации pod#
Для работы SVPX необходимо настроить сетевые правила таблицы маршрутизации. Эту настройку можно выполнить несколькими способами:
1 способ — использовать Istio CNI Plugin.
Istio CNI Plugin представляет из себя плагин настройки сети pod, устанавливающийся в кластер в виде DaemonSet. То есть на каждой node кластера есть специальный плагин, который настраивает сеть контейнера при необходимости.
2 способ — использовать istio-init контейнер.
istio-init контейнер — это контейнер, который запускается до старта основных контейнеров, в его задачи входит настройка сети pod.
Одним из основных отличий между этими подходами является то, что в случае использования Istio CNI Plugin необходимо выдавать права (настройки безопасности) только на DaemonSet, а в случае с istio-init эти права выдаются на все проекты, где будет производиться запуск Сервисного прокси.
По умолчанию будет использоваться istio-init контейнер. Если требуется использовать cni, то необходимо указать в конфигурационном файле IstioOperator spec.cni.enabled: true.
Особенности установки Istio CNI Plugin#
Важной особенностью является то, что Istio CNI Plugin устанавливается на nodes кластера с помощью DaemonSet, который, в свою очередь, использует hostPath (монтирование файловой системы node к контейнеру в виде volume) для установки (по факту копирования) на файловую систему исполняемого бинарного файла Istio CNI Plugin и необходимых для его работы дополнительных файлов.
DaemonSet использует следующие директории для установки Istio CNI Plugin:
mountPath- /host/opt/cni/bin,hostPath- задается в настройке cni.cniBinDir (значение по умолчанию /opt/cni/bin). Это директория для бинарных файлов CNI плагинов. В нее происходит копировании исполняемого бинарного файла Istio CNI Plugin, наименование файла -istio-cni;mountPath- /host/etc/cni/net.d,hostPath- задается в настройке cni.cniConfDir (значение по умолчанию /etc/cni/net.d). Это директория для конфигурационных файлов, которые используются при запуске CNI плагинов. В нее происходит копирование конфигурационного файла, используемого далее Istio CNI Plugin'ом, наименование файла -ZZZ-istio-cni-kubeconfig;mountPath- /var/run/istio-cni,hostPath- /var/run/istio-cni. Это директория для UDS сокета, для передачи логов из istio-cni (исполняемый бинарный файл Istio CNI Plugin) в install-cni (наименование контейнера DaemonSet).
Из особенностей установки стоит отметить:
Для установки Istio CNI Plugin у пользователя, под которым запущен процесс контейнера install-cni (контейнер из DaemonSet), должны быть соответствующие права на запись в директории, указанные в hostPath. Это связано с особенностями взаимодействия с файловой системой node.
В большинстве случаев права на данные директории имеют только root:root пользователи, именно поэтому UID:GID Istio CNI Plugin по умолчанию — root:root.
Если же на node используются некоторые реализации системы принудительного контроля доступа, к примеру, SELinux или AppArmor, то необходимо дополнительно настроить securityContext DaemonSet. Самый простой способ —
privileged(пример настройки есть далее по тексту). Немаловажным является тот факт, что такого рода настройка может создавать некоторую потенциальную уязвимость на кластере и, в большинстве случаев, стоит избегатьprivilegedу контейнеров. Также можно дополнительно обратиться за консультацией к поддержке продукта для помощи в адаптации securityContext под ваш конкретный кейс.Исполняемый бинарный файл
istio-cniимеет следующие права:755или же-rwxr-xr-x. Помимо владельца и группы, права на запуск нужны всем остальным для того, чтобы Container Runtime, используемый в кластере, мог запустить Istio CNI Plugin (Container Runtime может работать под UID и/или GID, отличным от процесса install-cni контейнера).
Дополнительные настройки Istio CNI Plugin#
WATCH_FULL_PATH#
DaemonSet Istio CNI при установке Istio CNI Plugin следит за изменениями в директориях, перечисленных выше в разделе Особенности установки Istio CNI Plugin. При каких-либо изменениях в данных директориях, DaemonSet Istio CNI переустанавливает все файлы, упомянутые в разделе Особенности установки Istio CNI Plugin.
В этих директориях могут быть какие-либо изменения, не связанные с самим Istio CNI Plugin, которые будут приводить к полной переустановке Istio CNI Plugin. Для того чтобы не переустанавливать при внесении в директории изменений, его не затрагивающих, можно выставить для DaemonSet env WATCH_FULL_PATH в значении true.
Благодаря этой настройке DaemonSet Istio CNI будет следить не просто за изменениями в директориях, а за изменениями самих файлов, которые он установил. К примеру, без этой настройки, DaemonSet следит за директорией /host/opt/cni/bin, с включенной настройкой - следит уже за файлом /host/opt/cni/bin/istio-cni, что, в свою очередь, сводит к минимуму количество лишних переустановок Istio CNI Plugin.
Пример настройки
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
metadata:
...
spec:
components:
cni:
enabled: true
k8s:
overlays:
- kind: DaemonSet
name: istio-cni-node
patches:
- path: 'spec.template.spec.containers[name:install-cni].env[-1]'
value: |-
name: WATCH_FULL_PATH
value: 'true'
...
REINSTALL_TOKEN_SEPARATELY#
DaemonSet Istio CNI при установке Istio CNI Plugin следит изменениями в директориях, перечисленных выше в разделе Особенности установки Istio CNI Plugin. При каких-либо изменениях в данных директориях, DaemonSet Istio CNI переустанавливает все файлы, упомянутые в разделе Особенности установки Istio CNI Plugin.
Так как token service account Istio CNI может ротироваться (это делается средствами платформы Kubernetes), то его ротация приводит к изменениям в директории, за которой наблюдает DaemonSet Istio CNI. Что, в свою очередь, приводит к переустановке всех файлов Istio CNI Plugin, а не только к обновлению ZZZ-istio-cni-kubeconfig, содержащего token service account Istio CNI.
Поменять это поведение можно с помощью env REINSTALL_TOKEN_SEPARATELY, выставленным в значении true. Эта настройка меняет поведение таким образом, что если был изменен token service account Istio CNI (к примеру, случилась ротация token), то DeamonSet обновит исключительно kubeconfig файл ZZZ-istio-cni-kubeconfig и не будет переустанавливать все остальные файлы Istio CNI Plugin.
Пример настройки
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
metadata:
...
spec:
components:
cni:
enabled: true
k8s:
overlays:
- kind: DaemonSet
name: istio-cni-node
patches:
- path: 'spec.template.spec.containers[name:install-cni].env[-1]'
value: |-
name: REINSTALL_TOKEN_SEPARATELY
value: 'true'
...
Same Validation Port для istio-validation контейнера#
При использованиии Istio CNI Plugin, в SVPX встраивается init контейнер istio-validation. istio-validation контейнер используется для проверки корректности настроенных правил маршрутизации (iptables) для SVPX. Для обратной соместимости с более старыми версиями продукта проверка считается успешной, если правила настроены хотя бы для одного из специально зарезервированных портов: 15006 или 15001.
При необходимости, можно скорректировать поведение istio-validation контейнера, выставив настройку .Values.global.proxy_init.sameValidationPort в true с целью провпроверки только одного порта - 15006. Такая настройка позволяет более точно определять, что правила настроились именно для порта 15006, используемого в последних версиях продукта. Или же выставить ее в false, чтобы проверка шла для портов 15001 и 15006. По умолчанию настройка выставлена в true.
Как настроить service account projected token#
Платформа Kubernetes по умолчанию сама настраивает монтирование token в файловую систему pod. Если платформа поддерживает projected token, то значение expirationSeconds по умолчанию составляет 3607, а defaultMode 420, что может не соответствовать требованиям безопасности, необходимым администратору АС.
Поменять эти параметры можно, выставив значение настройки automountServiceAccountToken как false. По умолчанию платформой Kubernetes значение выставляется в true. И прописав volume и volumeMount с projected token вручную.
Пример настройки:
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
metadata:
...
spec:
...
components:
cni:
enabled: true
k8s:
overlays:
- kind: DaemonSet
name: istio-cni-node
patches:
# Выставляем automountServiceAccountToken = false, чтобы выключить автоматическое монтирование token платформой Kubernetes
- path: spec.template.spec.automountServiceAccountToken
value: false
# Задаем вручную projected token (создаем volume)
- path: 'spec.template.spec.volumes[-1]'
value: |-
name: token
projected:
sources:
- serviceAccountToken:
# Время жизни
expirationSeconds: 600
path: token
- configMap:
name: kube-root-ca.crt
items:
- key: ca.crt
path: ca.crt
- downwardAPI:
items:
- path: namespace
fieldRef:
apiVersion: v1
fieldPath: metadata.namespace
# Mode на монтируемые файл
defaultMode: 256
# Монтируем projected token (создаем volumeMount)
- path: spec.template.spec.containers[name:install-cni].volumeMounts[-1]
value: |-
name: token
readOnly: true
mountPath: /var/run/secrets/kubernetes.io/serviceaccount
Tolerations#
Стоит отметить, что по умолчанию DaemonSet Istio CNI Plugin ставится и на master nodes кластера.
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
...
spec:
...
components:
cni:
enabled: true
k8s:
overlays:
- kind: DaemonSet
name: istio-cni-node
patches:
- path: 'spec.template.spec.tolerations'
Ресурсы#
Также для CNI Plugin можно задавать настройки по ресурсам.
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
...
spec:
...
values:
cni:
...
resources:
limits:
cpu: <лимиты_CPU>
memory: <лимиты_Memory>
requests:
cpu: <реквесты_CPU>
memory: <реквесты_Memory>
Multus#
Также стоит отметить, что если на платформе Kubernetes используется Multus, то в конфигурации установки Istio CNI необходимо задать следующие параметры:
Шаблон
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
metadata:
...
spec:
components:
cni:
enabled: true
...
...
values:
sidecarInjectorWebhook:
injectedAnnotations:
k8s.v1.cni.cncf.io/networks: istio-cni
global:
istioNamespace: <проект_cni>
cni:
chained: false
cniBinDir: <path_to_multus_bin>
cniConfDir: <path_to_cni_multus_net.d>
cniConfFileName: istio-cni.conf
logLevel: debug
privileged: true
resources:
limits:
cpu: <лимиты_CPU>
memory: <лимиты_Memory>
requests:
cpu: <реквесты_CPU>
memory: <реквесты_Memory>
А в конфигурации IstioOperator, с помощью которой производилась установка контрольной панели, задать:
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
metadata:
...
values:
sidecarInjectorWebhook:
injectedAnnotations:
k8s.v1.cni.cncf.io/networks: istio-cni
...
Пример
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
metadata:
...
spec:
components:
cni:
enabled: true
...
...
values:
sidecarInjectorWebhook:
injectedAnnotations:
k8s.v1.cni.cncf.io/networks: istio-cni
global:
istioNamespace: istio-cni
cni:
chained: false
cniBinDir: /opt/multus/bin
cniConfDir: /etc/cni/multus/net.d
cniConfFileName: istio-cni.conf
logLevel: debug
privileged: true
resources:
limits:
cpu: 300m
memory: 500Mi
requests:
cpu: 300m
memory: 500Mi
Установка CNI в отдельный проект отдельной конфигурацией#
Если на кластере предполагается установка одновременно более чем одной контрольной панели, то удобнее будет устанавливать Istio CNI Plugin в отдельный проект с использованием отдельной конфигурации IstioOperator.
Для этого достаточно создать отдельный ресурс IstioOperator c пустым профилем, который будет создавать только конфигурационные файлы для работы cni-plugin. Таким образом, если будем выключать (удалять) control-plane, то это никак не затронет cni-plugin, и мы сможем отдельно его обновлять.
Пример конфигурации cni-plugin
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
metadata:
name: istio-cni
namespace: istio-cni
spec:
components:
cni:
enabled: true
k8s:
overlays:
- kind: DaemonSet
name: istio-cni-node
patches:
- path: spec.template.spec.tolerations
namespace: istio-cni
hub: my.registry.ru
profile: empty
tag: 1.17
values:
global:
istioNamespace: istio-cni
cni:
resources:
limits:
cpu: 300m
memory: 500Mi
requests:
cpu: 300m
memory: 500Mi
После чего в конфигурации контрольных панелей необходимо удалить все упоминания cni и задать параметр spec.values.istio_cni.enabled=true
Пример
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
metadata:
name: istio-default
namespace: istio-system
spec:
components:
egressGateways:
- enabled: false
name: istio-egressgateway
ingressGateways:
- enabled: false
name: istio-ingressgateway
pilot:
enabled: true
hub: my.registry.ru
meshConfig:
defaultDestinationRuleExportTo:
- .
defaultServiceExportTo:
- .
defaultVirtualServiceExportTo:
- .
discoverySelectors:
- matchLabels:
istio.io/rev: istio-system
outboundTrafficPolicy:
mode: REGISTRY_ONLY
profile: default
revision: istio-system
tag: 1.17
values:
...
istio_cni:
enabled: true
pilot:
resources:
limits:
cpu: 500m
memory: 2Gi
requests:
cpu: 300m
memory: 500Mi
Настройка логирования SVPX и IGEG#
В зависимости от значения IstioOperator: spec.meshConfig.accessLogFile запись access-логов всех контейнеров istio-proxy в проектах, подключенных к текущей контрольной панели, может быть включена, выключена, направлена в stdout или перенаправлена в файл. По умолчанию все access-логи istio-proxy выводятся в stdout (т.е. отображаются в интерфейсе контейнера), это соответствует значению /dev/stdout:
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
metadata:
name: istio-demo
spec:
...
meshConfig:
accessLogFile: /dev/stdout
...
При этом в config_dump Envoy для каждого листенера будет указан параметр access_log со значением "path": "/dev/stdout":
"access_log": [
{
"name": "envoy.access_loggers.file",
"filter": {
"response_flag_filter": {
"flags": [
"NR"
]
}
},
"typed_config": {
"@type": "type.googleapis.com/envoy.extensions.access_loggers.file.v3.FileAccessLog",
"path": "/dev/stdout",
"log_format": {
"text_format_source": {
"inline_string": "[%START_TIME%] \"%REQ(:METHOD)% %REQ(X-ENVOY-ORIGINAL-PATH?:PATH)% %PROTOCOL%\" %RESPONSE_CODE% %RESPONSE_FLAGS% %RESPONSE_CODE_DETAILS% %CONNECTION_TERMINATION_DETAILS% \"%UPSTREAM_TRANSPORT_FAILURE_REASON%\" %BYTES_RECEIVED% %BYTES_SENT% %DURATION% %RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)% \"%REQ(X-FORWARDED-FOR)%\" \"%REQ(USER-AGENT)%\" \"%REQ(X-REQUEST-ID)%\" \"%REQ(:AUTHORITY)%\" \"%UPSTREAM_HOST%\" %UPSTREAM_CLUSTER% %UPSTREAM_LOCAL_ADDRESS% %DOWNSTREAM_LOCAL_ADDRESS% %DOWNSTREAM_REMOTE_ADDRESS% %REQUESTED_SERVER_NAME% %ROUTE_NAME%\n"
}
}
}
}
]
Если задать вывод access-лога в файл, то вывод access-логов в интерфейс контейнера будет прекращен, и запись будет осуществляться только в этот файл.
Также папка с этим файлом должна быть указана как volume и volumeMount в каждом контейнере istio-proxy подключенных проектов, чтобы у Envoy были права на создание файла и запись:
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
metadata:
name: istio-demo
spec:
...
meshConfig:
accessLogFile: /etc/istio/proxy/access.log
...
Чтобы иметь возможность одновременно отображать access-логи контейнеров istio-proxy в интерфейсе и направлять их в файлы, можно воспользоваться параметром extensionProviders.
Один из них должен быть настроен на /dev/stdout, в других можно определить пути к файлам, куда проекты, подключенные к данной контрольной панели, смогут записывать access-логи Envoy.
Пример настройки:
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
metadata:
name: istio-demo
namespace: istio-system
spec:
meshConfig:
extensionProviders:
- name: envoy_default
envoyFileAccessLog:
path: /dev/stdout
- name: envoy_file
envoyFileAccessLog:
path: /etc/istio/proxy/access.log
На уровне проектов и конкретных Deployment можно будет воспользоваться этими настройками, создав ресурс типа Telemetry.
Примеры настройки логирования в граничных прокси (ingress, egress) и на сайдкарах приложений находятся в документации на компоненты IGEG и SVPX в Руководстве по администрированию.
Подключение проекта#
Добавляем label на проект, чтобы MutatingWebhookConfiguration реагировал на создание pods в этом проекте и добавлял istio-proxy:
Шаблон
kubectl label namespace <проект> istio.io/rev=<лейбл_из_значения_revision>
Пример
kubectl label namespace dev-project istio.io/rev=istio-system
Проверить все проекты на наличие label можно с помощью команды:
kubectl get namespace- L istio.io/rev
Чтобы отключить проект от istio, удаляем label:
kubectl label namespace <проект> istio.io/rev-
Для работы CNI плагина необходимо в тестовом проекте создать ресурс NetworkAttachmentDefinition. Название соответствует параметру, указанному в injectedAnnotations.
apiVersion: "k8s.cni.cncf.io/v1"
kind: NetworkAttachmentDefinition
metadata:
name: istio-cni
Если в проектах есть NetworkPolicies, которые ограничивают трафик между проектами, то может быть так, что нет физического доступа у istio-proxy в тестовых проектах к istiod. В данном случае нужно создать дополнительный ресурс NetworkPolicy в проекте с Istio и прописать, по какому признаку разрешать трафик. Например:
Шаблон
kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
name: istio-mesh
namespace: istio-system
spec:
podSelector: {}
ingress:
- from:
- namespaceSelector:
matchLabels:
istio.io/rev: <лейбл_из_значения_revision>
policyTypes:
- Ingress
Пример
kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
name: istio-mesh
namespace: istio-system
spec:
podSelector: {}
ingress:
- from:
- namespaceSelector:
matchLabels:
istio.io/rev: istio-system
policyTypes:
- Ingress
Установка в OpenShift (опционально)#
Установка в OpenShift отличается от приведенной выше некоторыми аспектами, описанными ниже.
Установка Istio SE версии 1.17.x в кластер OpenShift#
Примечание#
Делаем установку Istio версии SberEdition, например, 1.2.1.3.
Установка оператора и выдача прав должна быть осуществлена пользователем, у которого есть права cluster-admin.
Отличие установки OpenShift от установки в Kubernetes заключается в выделении дополнительных прав, настройки правил маршрутизации pod и обеспечение доступа между kubeapi-server и POLM.
Выделение прав#
В OpenShift используется механизм SecurityContextConstrains (SCC), ограничивающий SecurityContext pods Istio SE, поэтому необходимо выделить дополнительные права в проекты Istio.
Для работы Istio CNI Plugin нужно выдать права privileged на service account istio-cni.
Шаблон
oc project <имя_проекта_cni>
oc adm policy add-scc-to-user privileged system:serviceaccount:<имя_проекта_cni>:istio-cni
Пример
oc project istio-cni
oc adm policy add-scc-to-user privileged system:serviceaccount:istio-cni:istio-cni
Также можно создать специальный SCC исключительно для Istio CNI Plugin ввиду того, что привилегии, выдаваемые privileged, являются излишними.
Минимально необходимые SCC:
apiVersion: security.openshift.io/v1
kind: SecurityContextConstraints
metadata:
annotations:
kubernetes.io/description: 'istio-cni SCC for istio CNI plugin.'
name: istio-cni
allowHostPorts: false
runAsUser:
type: RunAsAny
allowHostDirVolumePlugin: true # Необходим, чтобы install-cni смог скопировать файлы Istio CNI на node.
seLinuxContext:
type: RunAsAny
readOnlyRootFilesystem: false # Необходим, чтобы install-cni смог скопировать файлы Istio CNI на node.
fsGroup:
type: RunAsAny
groups: []
defaultAddCapabilities: null
supplementalGroups:
type: RunAsAny
volumes:
- configMap
- emptyDir
- hostPath
- secret
allowHostNetwork: true # Необходимо для того, чтобы на Istio CNI не действовали другие CNI плагины и он не пытался настроить сеть сам себе, так как этот флажок говорит использовать сеть node, а не pod.
allowPrivilegeEscalation: true # Необходим, чтобы бинарник Istio CNI плагина мог настраивать iptables
allowPrivilegedContainer: true # Необходим для поднятия UDS лисенера (для логирования работы Istio CNI плагина) и чтобы install-cni смог скопировать файлы Istio CNI на node
Выдать его можно следующей командой:
Шаблон
oc project <имя_проекта_cni>
oc adm policy add-scc-to-user istio-cni system:serviceaccount:<имя_проекта_cni>:istio-cni
Пример
oc project istio-cni
oc adm policy add-scc-to-user istio-cni system:serviceaccount:istio-cni:istio-cni
Настройка сетевых правил маршрутизации pod#
Использование Istio CNI Plugin#
В OpenShift используется CNI Plugin Multus. Это стоит учесть при использовании Istio CNI Plugin. Как настроить CNI для работы с Multus описано в одноименном разделе настоящего документа.
Использование istio-init#
Так как в OpenShift используется механизм SecurityContextConstrains, ограничивающий SecurityContext pods Istio SE, а istio-init контейнер требует для своей работы права, необходимые для настройки, то необходимо выделить дополнительные права в проекты Istio.
Обеспечение доступа между kubeapi-server и POLM#
В OpenShift по умолчанию используются политики, ограничивающие доступ между проектами напрямую. Поэтому при установке Istio необходимо получить подтверждение от сопровождения инфраструктуры, что между kubeapi-server и POLM нет ограничений на сетевой доступ. Убрать такие ограничение в рамках одного кластера можно с помощью конфигурации NetworkPolicies.
Пример:
kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
name: allow-default
spec:
podSelector: {}
ingress:
- from:
- namespaceSelector:
matchLabels:
name: default
policyTypes:
- Ingress
Обновление#
Обновление проводится администраторами кластеров. Для обновления версии в проекте требуется выполнить действия из пункта «Установка компонента Управление политиками» через пользовательский интерфейс или «Установка компонента Управление политиками» через консоль. При установке обновления происходит полное затирание установленных ранее компонент. Дополнительно предварительно удалять POLM нет необходимости.
В случае, если обновление происходит с версии 3.6 на версию 3.7, то необходимо выполнить следующие действия:
Обновите Istio Operator путем установки helm charts.
Обновите Istio CNI Plugin (нюансы см. ниже в текущем разделе).
Обновите CP Istio.
Проверьте работоспособность pods.
SVPX и IGEG версии 1.12 должны быть обратно совместимы с POLM 1.17.
Особенности обновление CNI: Так как у DaemonSet отсутствует livenessProbe, то при обновлении оператором возникают ошибки. Поэтому необходимо сначала удалить Istio CNI Plugin.
Если установка была произведена с помощью Istio Operator, то в ресурсе IstioOperator, с помощью которого была установлена контрольная панель, необходимо обновить значение image в следующих секциях:
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
metadata:
...
spec:
values:
global:
...
proxy:
image: <ссылка_на_образ_istio-proxy>
proxy_init:
image: <ссылка_на_образ_istio-proxy>
pilot:
image: <ссылка_на_образ_istiod>
...
или
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
metadata:
...
spec:
...
hub: <ссылка_хранилище_с_артефактами_Istio>
tag: <docker_тэг_артефактов>
Если же установка была произведена с помощью helm, то необходимо обновить значение image в values.yaml:
global:
...
proxy:
image: <ссылка_на_образ_istio-proxy>
proxy_init:
image: <ссылка_на_образ_istio-proxy>
pilot:
image: <ссылка_на_образ_istiod>
или
global:
hub: <ссылка_хранилище_с_артефактами_Istio>
tag: <docker_тэг_артефактов>
Если же используется Istio CNI Plugin, то его образ также необходимо обновить аналогично предыдущим шагам. В случае, если использовался Istio Operator:
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
metadata:
...
spec:
...
profile: empty
values:
cni:
image: <ссылка_на_образ_Istio_CNI_Plugin>
или
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
metadata:
...
spec:
...
hub: <ссылка_хранилище_с_артефактами_Istio>
tag: <docker_тэг_артефактов>
В случае, если установка Istio CNI Plugin производилась через helm:
cni:
image: <ссылка_на_образ_Istio_CNI_Plugin>
или
global:
hub: <ссылка_хранилище_с_артефактами_Istio>
tag: <docker_тэг_артефактов>
Приведенные сценарии соответствуют стратегии обновления компонента POLM в среде контейнеризации Rolling.
Удаление#
Удаление Istio#
Чтобы удалить Istio, достаточно удалить соответствующий ресурс IstioOperator, с помощью которого была развернута та или иная версия control-plane.
Важно, что перед удалением не должно быть ни одного поднятого приложения, запущенного с sidecar istio-proxy, в том числе и ingress и egress gateway, иначе оператор будет бесконечно пытаться удалить ресурс.
Удаление оператора#
В случае установки Istio Operator с помощью istioctl для удаления необходимо выполнить следующую команду:
istioctl operator remove -n <проект_istio-operator>
В случае установки Istio Operator с помощью helm для удаления необходимо выполнить команду аналогичную команде установки:
helm uninstall <имя_шаблона> --namespace <проект_istio-operator>
Проверка работоспособности#
Проверка работоспособности Istio Operator#
При установке оператора через istioctl в результате работы будет написан статус успешности установки.
Пример успешной установки:

Для проверки работоспособности можно также проверить статус pod Istio Operator и его логи. Подробнее в пункте «Чек-лист валидации установки» настоящего документа.
Пример проверки статуса pod через консоль:

Пример проверки логов pod через консоль:

Если процесс установки завис и/или долгое время не выводятся успешные результаты установки, то необходимо зайти в проект Istio Operator и проверить наличие ошибок в Events и/или логах pod Istio Operator. Подробнее в пунктах «Часто встречающиеся проблемы и пути их устранения» и «Чек-лист валидации установки» настоящего документа.
Проверка работоспособности istiod (Управление политиками)
Для проверки необходимо выполнить следующие действия c использованием веб-интерфейса Kubernetes:
Зайдите в проект контрольной панели.
В меню выберите пункт Workload/Pods.
На странице найдите нужный pod.
Перейдите по ссылке в этот pod.
Перейдите на вкладку ≡ (Logs). В консоли не должно быть ошибок.
Также можно сделать это через консоль:
Проверьте статусы pods:
kubectl --kubeconfig=<путь_к_файлу_kubeconfig> get pods -n <проект_контрольной_панели>
Пример:

Проверьте лог pods на наличие ошибок:
kubectl --kubeconfig=<путь_к_файлу_kubeconfig> logs <имя_pod> -n <проект_контрольной_панели>
Пример:

Чек-лист проверки работоспособности интеграций#
Проверка интеграции с компонентом IGEG
Для проверки необходимо выполнить следующие действия c использованием веб-интерфейса Kubernetes:
Зайдите в проект, в котором установлен IGEG.
В меню выберите пункт Workload/Pods.
На странице найдите нужный pod.
Перейдите по ссылке в этот pod.
Перейдите на вкладку ≡ (Logs). В консоли не должно быть ошибок, также должна быть запись вида
Envoy proxy is ready.
Также можно сделать это через консоль:
Проверьте статусы pods:
kubectl --kubeconfig=<путь_к_файлу_kubeconfig> get pods -n <проект_в_котором_установлен_IGEG>
Проверьте лог pods на наличие ошибок:
kubectl --kubeconfig=<путь_к_файлу_kubeconfig> logs <имя_pod> -n <проект_в_котором_установлен_IGEG>
Проверка интеграции с компонентом SVPX
Для проверки необходимо выполнить следующие действия c использованием веб-интерфейса Kubernetes:
Зайдите в проект, в котором установлен SVPX.
В меню выберите пункт Workload/Pods.
На странице найдите нужный pod.
Перейдите по ссылке в этот pod.
Перейдите на вкладку ≡ (Logs). В консоли не должно быть ошибок, также должна быть запись вида
Envoy proxy is ready.
Также можно сделать это через консоль:
Проверьте статусы pods:
kubectl --kubeconfig=<путь_к_файлу_kubeconfig> get pods -n <проект_в_котором_установлен_SVPX>
Проверьте логи pods на наличие ошибок:
kubectl --kubeconfig=<путь_к_файлу_kubeconfig> logs <имя_pod> -n <проект_в_котором_установлен_SVPX>
Откат#
Откат компонента на одну из предыдущих версий (не позднее 3 по счету от текущей) происходит с помощью развертывания компонент из дистрибутива предыдущей версии, они затирают текущую инсталляцию.
Действия аналогичны описанным в подразделе «Установка», но в данном случае требуется дистрибутив предыдущей версии.
Часто встречающиеся проблемы и пути их устранения#
Проблема |
Причина |
Решения |
|---|---|---|
Не стартует pod приложения |
Недостаточно ресурсов |
Увеличить лимиты/реквесты для приложения |
Не стартует pod приложения |
Ресурсы pod не соответствуют ограничениям, заданным в LimitRanges |
Изменить ресурсы для приложения таким образом, чтобы они соответствовали ресурсу LimitRanges в проекте, либо удалить данный ресурс LimitRanges |
Не стартует pod приложения |
Нет доступной node для запуска |
Зарегистрировать обращение в поддержку инфраструктуры |
Не стартует pod приложения, не удается выкачать образ |
Ошибка в конфигурации imagePullSecret |
Выгрузить Event об ошибке загрузки образа через веб-интерфейс Kubernetes или kubectl, обратиться к поддержке инфраструктуры: либо ошибка в самом секрете, либо отсутствует физический доступ к репозиторию с образами |
Частый рестарт контейнера приложения |
Медленная загрузка приложения |
Увеличить задержку и/или интервал опроса Liveness/Readiness-пробы: увеличить в Deployment POLM параметр |
Чек-лист валидации установки#
Проверки |
Действия |
|---|---|
Компонент успешно развернут на среде контейнеризации |
Запустить pod Управления политиками POLM |
Pod Управления политиками POLM запущен |
Найти pod с названием istiod-* на вкладке Pods. Проверить, что статус всех контейнеров — Running |
Pod Istio Operator запущен (при использовании Istio Operator) |
Найти pod с названием istio-operator на вкладке Pods. Проверить, что статус всех контейнеров — Running |
Pod Istio CNI Plugin запущен (при использовании Istio CNI Plugin) |
Найти pod с названием install-cni на вкладке Pods. Проверить, что статус всех контейнеров — Running |
Отсутствие ошибок в логах контейнеров всех компонент POLM |
Для каждого pod проверить на вкладке ≡ (Logs), что в логе контейнеров pod отсутствуют ошибки |
Отсутствие ошибок запуска контейнеров всех компонент POLM |
На вкладке Events отсутствуют ошибки |
Подключение прикладного пользовательского проекта |
Убедиться, что выполнены все настройки, описанные в пункте «Подключение проекта» |