Модуль не включен по умолчанию в каком-либо наборе модулей.
Чтобы настроить модуль используйте custom resource ModuleConfig
с именем istio
(подробнее о настройке Deckhouse…).
Пример ресурса ModuleConfig/istio
для настройки модуля:
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
name: istio
spec:
version: 2
enabled: true
settings: # <-- Параметры модуля из раздела "Параметры" ниже.
Параметры
Версия схемы: 2
- additionalVersionsмассив строк
Дополнительные версии control-plane Istio, которые будут установлены. Они будут обслуживать Namespace-ы, где явно указана версия с помощью лейбла
istio.io/rev=
.По умолчанию:
[]
- allianceобъект
Общие настройки для федерации и мультикластера.
Доступно только в enterprise edition.
- alliance.ingressGatewayобъект
Параметры для ingressgateway.
Доступно только в enterprise edition.
- alliance.ingressGateway.inletстрока
Способ публикации ingressgateway.
LoadBalancer
— рекомендуется в случае, если площадка облачная и поддерживает LB.NodePort
— для площадок без LB.
По умолчанию:
"LoadBalancer"
Доступно только в enterprise edition.
Допустимые значения:
LoadBalancer
,NodePort
Пример:
inlet: LoadBalancer
- alliance.ingressGateway.nodePortобъект
Специальные настройки для ingressgateway с инлетом
NodePort
.Доступно только в enterprise edition.
Примеры:
nodePort: {}
nodePort: port: 30001
- alliance.ingressGateway.nodePort.portцелочисленный
Статичный порт для сервиса с типом NodePort. Должен быть из диапазона, заданного аргументом kube-apiserver –service-node-port-range (по умолчанию 30000-32767).
Допустимые значения:
1024 <= X <= 65535
- alliance.ingressGateway.nodePort.portцелочисленный
- alliance.ingressGateway.nodeSelectorобъект
Селектор для DaemonSet’а ingressgateway.
Структура, аналогичная
spec.nodeSelector
Kubernetes pod.Доступно только в enterprise edition.
Пример:
nodeSelector: type: ingress
- alliance.ingressGateway.serviceAnnotationsобъект
Дополнительные аннотации для сервиса ingressgateway.
Полезно, например, для настройки локального LB в Yandex Cloud (аннотация
yandex.cpi.flant.com/listener-subnet-id
).Доступно только в enterprise edition.
Пример:
serviceAnnotations: yandex.cpi.flant.com/listener-subnet-id: xyz-123
- alliance.ingressGateway.tolerationsмассив объектов
tolerations для DaemonSet’а ingressgateway.
Структура, аналогичная
spec.tolerations
Kubernetes pod.Доступно только в enterprise edition.
Пример:
tolerations: - operator: Exists
- alliance.ingressGateway.tolerations.effectстрока
- alliance.ingressGateway.tolerations.keyстрока
- alliance.ingressGateway.tolerations.operatorстрока
- alliance.ingressGateway.tolerations.tolerationSecondsцелочисленный
- alliance.ingressGateway.tolerations.valueстрока
- alliance.ingressGateway.inletстрока
- alliance.ingressGatewayобъект
- authобъект
Опции, связанные с аутентификацией или авторизацией в приложении.
Пример:
auth: externalAuthentication: authURL: https://dex.d8.svc.cluster.local/dex/auth authSignInURL: https://example.com/dex/sign_in allowedUserGroups: - admins
- auth.allowedUserGroupsмассив строк
Массив групп, пользователям которых позволен доступ в публичные веб-интерфейсы модуля.
Используется, если включен модуль user-authn или параметр
externalAuthentication
.Внимание! При использовании совместно с модулем user-authn необходимо также добавить разрешенные группы в соответствующее поле в настройках DexProvider.
- auth.externalAuthenticationобъект
Параметры для подключения внешней аутентификации (используется механизм Nginx Ingress external-auth, работающий на основе модуля Nginx auth_request.
Внешняя аутентификация включается автоматически, если включен модуль user-authn.
- auth.externalAuthentication.authSignInURLстрока
URL, куда будет перенаправлен пользователь для прохождения аутентификации (если сервис аутентификации вернул код ответа HTTP отличный от 200).
Пример:
authSignInURL: https://example.com/dex/sign_in
- auth.externalAuthentication.authURLстрока
URL сервиса аутентификации. Если пользователь прошел аутентификацию, сервис должен возвращать код ответа HTTP 200.
Пример:
authURL: https://example.com/dex/auth
- auth.externalAuthentication.authSignInURLстрока
- auth.satisfyAnyбулевый
Разрешает пройти только одну из аутентификаций.
В комбинации с опцией
whitelistSourceRanges
позволяет считать авторизованными всех пользователей из указанных сетей без ввода логина и пароля.По умолчанию:
false
Пример:
satisfyAny: true
- auth.whitelistSourceRangesмассив строк
Массив CIDR, которым разрешено проходить авторизацию в публичные веб-интерфейсы модуля.
Пример:
whitelistSourceRanges: - 1.1.1.1/32
- auth.allowedUserGroupsмассив строк
- caобъект
Явно заданный корневой сертификат, который будет использован для подписывания индивидуальных сертификатов сервисов в случае включения MTLS.
- ca.certстрока
Корневой или промежуточный сертификат в формате PEM.
- ca.chainстрока
Цепочка сертификатов в формате PEM на случай если
cert
— промежуточный сертификат. - ca.keyстрока
Ключ корневого сертификата в формате PEM.
- ca.rootстрока
Корневой сертификат в формате PEM на случай если
cert
— промежуточный сертификат.
- ca.certстрока
- controlPlaneобъект
Настройки для компонента istiod.
- controlPlane.nodeSelectorобъект
Опциональный селектор для компонентa istiod. Структура, аналогичная
spec.nodeSelector
Kubernetes pod.Если ничего не указано или указано
false
— будет использоваться автоматика. - controlPlane.resourcesManagement
Настройки управления ресурсами istiod.
Примеры:
resourcesManagement: mode: VPA vpa: mode: Auto cpu: min: 50m max: 2 limitRatio: 1.5 memory: min: 256Mi max: 2Gi limitRatio: 1.5
resourcesManagement: mode: Static static: requests: cpu: 55m memory: 256Mi limits: cpu: 2 memory: 2Gi
- controlPlane.resourcesManagement.modeстрока
The mode for managing resource requests. Classical
Static
requests/limit orVPA
.По умолчанию:
"VPA"
Допустимые значения:
VPA
,Static
- controlPlane.resourcesManagement.staticобъект
Настройки управления ресурсами в статическом режиме.
- controlPlane.resourcesManagement.static.limitsобъект
Limits configuration.
- controlPlane.resourcesManagement.static.limits.cpu
Лимиты CPU.
- controlPlane.resourcesManagement.static.limits.memory
Лимиты памяти.
- controlPlane.resourcesManagement.static.limits.cpu
- controlPlane.resourcesManagement.static.requestsобъект
Requests configuration.
- controlPlane.resourcesManagement.static.requests.cpu
Реквесты CPU.
- controlPlane.resourcesManagement.static.requests.memory
Реквесты памяти.
- controlPlane.resourcesManagement.static.requests.cpu
- controlPlane.resourcesManagement.static.limitsобъект
- controlPlane.resourcesManagement.vpaобъект
Параметры для режима VPA.
- controlPlane.resourcesManagement.vpa.cpuобъект
CPU-related parameters.
- controlPlane.resourcesManagement.vpa.cpu.limitRatioчисло
The coefficient to calculate cpu limits. It is optionally used to calculate initial limits for Pod. VPA for its part keeps the initial limits/requests ratio during further resource tunings.
- controlPlane.resourcesManagement.vpa.cpu.max
Maximum allowed CPU requests.
По умолчанию:
2
- controlPlane.resourcesManagement.vpa.cpu.min
Minimum allowed CPU requests.
По умолчанию:
50m
- controlPlane.resourcesManagement.vpa.cpu.limitRatioчисло
- controlPlane.resourcesManagement.vpa.memoryобъект
The amount of memory requested.
- controlPlane.resourcesManagement.vpa.memory.limitRatioчисло
The coefficient to calculate memory limits. It is optionally used to calculate initial limits for Pod. VPA for its part keeps the initial limits/requests ratio during further resource tunings.
- controlPlane.resourcesManagement.vpa.memory.max
Maximum allowed memory requests.
По умолчанию:
2Gi
- controlPlane.resourcesManagement.vpa.memory.min
Minimum allowed memory requests.
По умолчанию:
256Mi
- controlPlane.resourcesManagement.vpa.memory.limitRatioчисло
- controlPlane.resourcesManagement.vpa.modeстрока
Режим работы VPA.
По умолчанию:
"Auto"
Допустимые значения:
Initial
,Auto
- controlPlane.resourcesManagement.vpa.cpuобъект
- controlPlane.resourcesManagement.modeстрока
- controlPlane.tolerationsмассив объектов
Опциональные tolerations для компонента istiod. Структура, аналогичная
spec.tolerations
в Kubernetes Pod.Если ничего не указано или указано
false
— будет использоваться автоматика.- controlPlane.tolerations.effectстрока
- controlPlane.tolerations.keyстрока
- controlPlane.tolerations.operatorстрока
- controlPlane.tolerations.tolerationSecondsцелочисленный
- controlPlane.tolerations.valueстрока
- controlPlane.nodeSelectorобъект
- enableHTTP10булевый
Обрабатывать ли HTTP/1.0 запросы в sidecar-контейнерах или отвергать их с кодом ответа
426 Upgrade Required
.По умолчанию:
false
Пример:
enableHTTP10: true
- federationобъект
Параметры федерации с другими кластерами.
Доступно только в enterprise edition.
- federation.enabledбулевый
Обозначить данный кластер как участник федерации (см. Включение федерации).
По умолчанию:
false
Пример:
enabled: true
- federation.enabledбулевый
- globalVersionстрока
Явно заданная версия control-plane Istio, который обслуживает data-plane с неявной версией (Namespace с лейблом
istio-injection=enabled
, но неistio.io/rev=
). Должна быть из списка поддерживаемых версий (kubectl -n d8-system exec deploy/deckhouse -- deckhouse-controller module values istio -o json | jq '.istio.internal.supportedVersions'
). По умолчанию — последняя версия из списка поддерживаемых версий.По умолчанию:
"1.16"
- highAvailabilityбулевый
Ручное управление режимом отказоустойчивости.
По умолчанию режим отказоустойчивости определяется автоматически. Подробнее про режим отказоустойчивости.
Пример:
highAvailability: true
- httpsобъект
Тип сертификата используемого для публичных веб-интерфейсов модуля.
При использовании этого параметра полностью переопределяются глобальные настройки
global.modules.https
.Примеры:
https: mode: CustomCertificate customCertificate: secretName: foobar
https: mode: CertManager certManager: clusterIssuerName: letsencrypt
- https.certManagerобъект
- https.certManager.clusterIssuerNameстрока
ClusterIssuer, используемый для Kiali/metadata-exporter (including SPIFFE endpoint)/api-proxy.
Доступны
letsencrypt
,letsencrypt-staging
,selfsigned
, но вы можете определить свои.По умолчанию:
"letsencrypt"
- https.certManager.clusterIssuerNameстрока
- https.customCertificateобъект
- https.customCertificate.secretNameстрока
Имя secret’а в namespace
d8-system
, который будет использоваться для Kiali/metadata-exporter (including SPIFFE endpoint)/api-proxy.Секрет должен быть в формате kubernetes.io/tls.
По умолчанию:
"false"
- https.customCertificate.secretNameстрока
- https.modeстрока
Режим работы HTTPS:
CertManager
— Kiali/metadata-exporter (including SPIFFE endpoint)/api-proxy будут работать по https и заказывать сертификат с помощью clusterissuer заданном в параметреcertManager.clusterIssuerName
.CustomCertificate
— Kiali/metadata-exporter (including SPIFFE endpoint)/api-proxy будут работать по https используя сертификат из namespaced8-system
.OnlyInURI
— Kiali/metadata-exporter (including SPIFFE endpoint)/api-proxy будут работать по HTTP (подразумевая, что перед ними стоит внешний балансер, который терминирует HTTPS) и все ссылки в user-authn будут генерироваться с HTTPS-схемой.
Важно! В отличие от остальных модулей, Istio не поддерживает работу без использования HTTPS (
mode: Disabled
).По умолчанию:
"CertManager"
Допустимые значения:
CertManager
,CustomCertificate
,OnlyInURI
- https.certManagerобъект
- multiclusterобъект
Параметры мультикластерной инсталляции.
Доступно только в enterprise edition.
- multicluster.enabledбулевый
Обозначить данный кластер как участник мультикластера (см. Включение мультикластера).
По умолчанию:
false
Пример:
enabled: true
- multicluster.enabledбулевый
- nodeSelectorобъект
Опциональный селектор для компонентов istio-operator, metadata-exporter и kiali. Структура, аналогичная
spec.nodeSelector
Kubernetes pod.Если ничего не указано или указано
false
— будет использоваться автоматика. - outboundTrafficPolicyModeстрока
Как поступать с запросами в сторону внешних, то есть, не учтённых в mesh’е сервисов.
AllowAny
— пропускать.RegistryOnly
— запрещать. В данном случае для работы с внешними сервисами потребуется регистрировать их с помощью ресурса ServiceEntry или организовывать egressgateway.
По умолчанию:
"AllowAny"
Допустимые значения:
AllowAny
,RegistryOnly
Пример:
outboundTrafficPolicyMode: AllowAny
- proxyConfigобъект
Централизованная настройка ProxyConfig.
- proxyConfig.holdApplicationUntilProxyStartsбулевый
Этот параметр заставляет sidecar-injector вставлять sidecar-контейнер на первое место в списке контейнеров Pod’а. Также он добавляет postStart-хук для того, чтобы убедиться, что Envoy инициализировался раньше самого приложения. Это позволит избежать сетевых ошибок при старте Pod’а.
Этот глобальный параметр может быть переопределён на уровне Pod’а аннотацией
proxy.istio.io/config: '{ "holdApplicationUntilProxyStarts": true }'
.По умолчанию:
false
Пример:
holdApplicationUntilProxyStarts: true
- proxyConfig.holdApplicationUntilProxyStartsбулевый
- sidecarобъект
Настройки для перехвата сетевого трафика в istio-sidecar.
- sidecar.excludeInboundPortsмассив строк
Диапазоны входящих портов, чей трафик гарантированно не заворачивается через Istio.
Можно переопределить этот параметр для отдельного Pod’а с помощью аннотации
traffic.sidecar.istio.io/excludeInboundPorts
.По умолчанию:
[]
Пример:
excludeInboundPorts: - '8080' - '8443'
- Элемент массивастрока
Шаблон:
^[0-9]{1,5}$
- Элемент массивастрока
- sidecar.excludeOutboundIPRangesмассив строк
Трафик в сторону этих диапазонов IP гарантированно не заворачивается через Istio.
Можно переопределить этот параметр для отдельного Pod’а с помощью аннотации
traffic.sidecar.istio.io/excludeOutboundIPRanges
.По умолчанию:
[]
Пример:
excludeOutboundIPRanges: - 10.1.1.0/24
- Элемент массивастрока
Шаблон:
^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/[0-9]{1,2}$
- Элемент массивастрока
- sidecar.excludeOutboundPortsмассив строк
Диапазоны исходящих портов, чей трафик гарантированно не заворачивается через Istio.
Можно переопределить этот параметр для отдельного Pod’а с помощью аннотации
traffic.sidecar.istio.io/excludeOutboundPorts
.По умолчанию:
[]
Пример:
excludeOutboundPorts: - '8080' - '8443'
- Элемент массивастрока
Шаблон:
^[0-9]{1,5}$
- Элемент массивастрока
- sidecar.includeOutboundIPRangesмассив строк
Трафик в сторону этих диапазонов IP безоговорочно заворачивается через Istio.
Можно переопределить этот параметр для отдельного Pod’а с помощью аннотации
traffic.sidecar.istio.io/includeOutboundIPRanges
.По умолчанию:
["0.0.0.0/0"]
Пример:
includeOutboundIPRanges: - 10.1.1.0/24
- Элемент массивастрока
Шаблон:
^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/[0-9]{1,2}$
- Элемент массивастрока
- sidecar.resourcesManagement
Управляет ресурсами sidecar-контейнера Istio.
Внимание! Настройка применяется только для новых Pod’ов с
istio-proxy
.Пример:
resourcesManagement: static: requests: cpu: 100m memory: 128Mi limits: memory: 1Gi
- sidecar.resourcesManagement.modeстрока
The mode for managing resource requests. Classical
Static
requests/limit.По умолчанию:
"Static"
Допустимые значения:
Static
- sidecar.resourcesManagement.staticобъект
Настройки управления ресурсами в статическом режиме.
- sidecar.resourcesManagement.static.limitsобъект
Limits configuration.
- sidecar.resourcesManagement.static.limits.cpu
Лимиты CPU.
- sidecar.resourcesManagement.static.limits.memory
Лимиты памяти.
По умолчанию:
1Gi
- sidecar.resourcesManagement.static.limits.cpu
- sidecar.resourcesManagement.static.requestsобъект
Requests configuration.
- sidecar.resourcesManagement.static.requests.cpu
Реквесты CPU.
По умолчанию:
100m
- sidecar.resourcesManagement.static.requests.memory
Реквесты памяти.
По умолчанию:
128Mi
- sidecar.resourcesManagement.static.requests.cpu
- sidecar.resourcesManagement.static.limitsобъект
- sidecar.resourcesManagement.modeстрока
- sidecar.excludeInboundPortsмассив строк
- tolerationsмассив объектов
Опциональные tolerations для компонентов istio-operator, metadata-exporter и kiali. Структура, аналогичная
spec.tolerations
в Kubernetes Pod.Если ничего не указано или указано
false
— будет использоваться автоматика.- tolerations.effectстрока
- tolerations.keyстрока
- tolerations.operatorстрока
- tolerations.tolerationSecondsцелочисленный
- tolerations.valueстрока
- tracingобъект
Параметры трассировки.
- tracing.collectorобъект
Параметры отправки трейсов в коллектор.
- tracing.collector.zipkinобъект
Параметры протокола zipkin, который использует Istio для отправки трейсов.
Jaeger поддерживает этот протокол.
- tracing.collector.zipkin.addressстрока
Сетевой адрес в формате
<IP of FQDN>:<port>
, по которому доступен zipkin-коллектор.Шаблон:
[0-9a-zA-Z\.-]+
Пример:
address: zipkin.myjaeger.svc:9411
- tracing.collector.zipkin.addressстрока
- tracing.collector.zipkinобъект
- tracing.enabledбулевый
Включить отправку трейсов в коллектор и интегрировать их отображение в kiali.
По умолчанию:
false
Пример:
enabled: true
- tracing.kialiобъект
Настройки отображения span-ов в Kiali.
Если настройки не предоставлены, kiali не будет отображать трассировку.
Примеры:
kiali: {}
kiali: jaegerURLForUsers: https://tracing-service:4443/jaeger jaegerGRPCEndpoint: http://tracing.myjaeger.svc:16685/
- tracing.kiali.jaegerGRPCEndpointстрока
Адрес GRPC-интерфейса jaeger’а в формате
<proto>://<fqdn>[:port]/
, доступный сервису kiali изнутри кластера для служебных запросов.Если не указать, то kiali не будет интерпретировать трейсы самостоятельно и ограничится генерацией ссылок на
jaegerURLForUsers
.Пример:
jaegerGRPCEndpoint: http://tracing.myjaeger.svc:16685/
- tracing.kiali.jaegerURLForUsersстрока
Адрес UI jaeger, доступный пользователю в формате
<proto>://<fqdn>[:port]/<base path>
.Обязательный параметр.
Пример:
jaegerURLForUsers: https://tracing-service:4443/jaeger
- tracing.kiali.jaegerGRPCEndpointстрока
- tracing.samplingчисло
Параметр sampling используется для определения процента запросов, которые передаются в систему трассировки.
Этот параметр должен быть настроен в зависимости от трафика в сети и количества данных трассировки, которые необходимо собрать.
Параметр можно переопределить для каждого Pod’а индивидуально при помощи следующей аннотации:
proxy.istio.io/config: | tracing: sampling: 100.0
По умолчанию:
1.0
Допустимые значения:
0.01 <= X <= 100.0
Пример:
sampling: 50.05
- tracing.collectorобъект
Аутентификация
По умолчанию используется модуль user-authn. Также можно настроить аутентификацию через externalAuthentication
(см. ниже).
Если эти варианты отключены, то модуль включит basic auth со сгенерированным паролем.
Посмотреть сгенерированный пароль можно командой:
kubectl -n d8-system exec deploy/deckhouse -- deckhouse-controller module values istio -o json | jq '.istio.internal.auth.password'
Чтобы сгенерировать новый пароль, нужно удалить Secret:
kubectl -n d8-istio delete secret/kiali-basic-auth
Внимание! Параметр
auth.password
больше не поддерживается.