Модуль не включен по умолчанию в каком-либо наборе модулей.

Как явно включить или отключить модуль…

Чтобы явно включить или выключить модуль istio, установите spec.enabled в true или false в ModuleConfig/istio (создайте, при необходимости), или воспользуйтесь командой deckhouse-controller module в поде d8-system/deckhouse.

Пример включения модуля:

  • с помощью ресурса ModuleConfig:

    apiVersion: deckhouse.io/v1alpha1
    kind: ModuleConfig
    metadata:
      name: istio
    spec:
      enabled: true
    
  • с помощью команды deckhouse-controller (требуется kubectl, настроенный на работу с кластером):

    kubectl -ti -n d8-system exec deploy/deckhouse -c deckhouse -- deckhouse-controller module enable istio
    

Пример выключения модуля:

  • с помощью ресурса ModuleConfig:

    apiVersion: deckhouse.io/v1alpha1
    kind: ModuleConfig
    metadata:
      name: istio
    spec:
      enabled: false
    
  • с помощью команды deckhouse-controller (требуется kubectl, настроенный на работу с кластером):

    kubectl -ti -n d8-system exec deploy/deckhouse -c deckhouse -- deckhouse-controller module disable istio
    

Чтобы настроить модуль, используйте 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.nodeSelectorобъект

        Селектор для DaemonSet’а ingressgateway.

        Структура, аналогичная spec.nodeSelector пода Kubernetes.

        Доступно только в 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.

        Доступно только в 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строка
  • 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.satisfyAnyбулевый

      Разрешает пройти только одну из аутентификаций.

      В комбинации с опцией whitelistSourceRanges позволяет считать авторизованными всех пользователей из указанных сетей без ввода логина и пароля.

      По умолчанию: false

      Пример:

      satisfyAny: true
      
    • auth.whitelistSourceRangesмассив строк

      Массив адресов в формате CIDR, которым разрешено проходить авторизацию в публичные веб-интерфейсы модуля.

      Пример:

      whitelistSourceRanges:
      - 1.1.1.1/32
      
  • caобъект

    Явно заданный корневой сертификат, который будет использован для подписывания индивидуальных сертификатов сервисов в случае включения MTLS.

    • ca.certстрока

      Корневой или промежуточный сертификат в формате PEM.

    • ca.chainстрока

      Цепочка сертификатов в формате PEM на случай, если cert — промежуточный сертификат.

    • ca.keyстрока

      Ключ корневого сертификата в формате PEM.

    • ca.rootстрока

      Корневой сертификат в формате PEM на случай, если cert — промежуточный сертификат.

  • controlPlaneобъект

    Настройки для компонента istiod.

    • controlPlane.nodeSelectorобъект

      Опциональный селектор для компонентa istiod. Структура, аналогичная spec.nodeSelector пода Kubernetes.

      Если ничего не указано или указано 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 or VPA.

        По умолчанию: "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.requestsобъект

          Requests configuration.

          • controlPlane.resourcesManagement.static.requests.cpu

            Реквесты к CPU.

          • controlPlane.resourcesManagement.static.requests.memory

            Реквесты к памяти.

      • 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.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.modeстрока

          Режим работы VPA.

          По умолчанию: "Auto"

          Допустимые значения: Initial, Auto

    • controlPlane.tolerationsмассив объектов

      Опциональные tolerations для компонента istiod.

      Структура, аналогичная spec.tolerations пода Kubernetes.

      Если ничего не указано или указано false, будет использоваться автоматика.

      • controlPlane.tolerations.effectстрока
      • controlPlane.tolerations.keyстрока
      • controlPlane.tolerations.operatorстрока
      • controlPlane.tolerations.tolerationSecondsцелочисленный
      • controlPlane.tolerations.valueстрока
  • enableHTTP10булевый

    Обрабатывать ли HTTP/1.0-запросы в sidecar-контейнерах или отвергать их с кодом ответа 426 Upgrade Required.

    По умолчанию: false

    Пример:

    enableHTTP10: true
    
  • federationобъект

    Параметры федерации с другими кластерами.

    Доступно только в enterprise edition.

    • federation.enabledбулевый

      Обозначить данный кластер как участник федерации (см. Включение федерации).

      По умолчанию: false

      Пример:

      enabled: true
      
  • globalVersionстрока

    Явно заданная версия control plane Istio, который обслуживает data plane по умолчанию (namespace с лейблом istio-injection=enabled, но не istio.io/rev=).

    По умолчанию: "1.19"

  • 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.customCertificateобъект
      • https.customCertificate.secretNameстрока

        Имя Secret’а в namespace d8-system, который будет использоваться для Kiali/metadata-exporter (including SPIFFE endpoint)/api-proxy.

        Secret должен быть в формате kubernetes.io/tls.

        По умолчанию: "false"

    • 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, используя сертификат из namespace d8-system.
      • OnlyInURI — Kiali/metadata-exporter (including SPIFFE endpoint)/api-proxy будут работать по HTTP (подразумевая, что перед ними стоит внешний балансировщик, который терминирует HTTPS) и все ссылки в user-authn будут генерироваться с HTTPS-схемой. Балансировщик должен обеспечивать перенаправление с HTTP на HTTPS.

      Важно! В отличие от остальных модулей, istio не поддерживает работу без использования HTTPS (mode: Disabled).

      По умолчанию: "CertManager"

      Допустимые значения: CertManager, CustomCertificate, OnlyInURI

  • ingressClassстрока

    Класс Ingress-контроллера, который используется для Kiali, metadata-exporter и api-proxy.

    Опциональный параметр, по умолчанию используется глобальное значение modules.ingressClass.

    Шаблон: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$

  • multiclusterобъект

    Параметры мультикластерной инсталляции.

    Доступно только в enterprise edition.

    • multicluster.enabledбулевый

      Обозначить данный кластер как участник мультикластера (см. Включение мультикластера).

      По умолчанию: false

      Пример:

      enabled: true
      
  • nodeSelectorобъект

    Опциональный селектор для компонентов istio-operator, metadata-exporter и Kiali.

    Структура, аналогичная spec.nodeSelector пода Kubernetes.

    Если ничего не указано или указано false, будет использоваться автоматика.

  • outboundTrafficPolicyModeстрока

    Как поступать с запросами в сторону внешних, то есть не учтенных в mesh’е сервисов:

    • AllowAny — пропускать;
    • RegistryOnly — запрещать. В данном случае для работы с внешними сервисами потребуется регистрировать их с помощью ресурса ServiceEntry или организовывать egressgateway.

    По умолчанию: "AllowAny"

    Допустимые значения: AllowAny, RegistryOnly

    Пример:

    outboundTrafficPolicyMode: AllowAny
    
  • proxyConfigобъект

    Централизованная настройка ProxyConfig.

    • proxyConfig.holdApplicationUntilProxyStartsбулевый

      Этот параметр заставляет sidecar-injector вставлять sidecar-контейнер на первое место в списке контейнеров пода. Также он добавляет postStart-хук для того, чтобы убедиться, что Envoy инициализировался раньше самого приложения. Это позволит избежать сетевых ошибок при старте пода.

      Этот глобальный параметр может быть переопределен на уровне пода аннотацией proxy.istio.io/config: '{ "holdApplicationUntilProxyStarts": true }'.

      По умолчанию: false

      Пример:

      holdApplicationUntilProxyStarts: true
      
    • proxyConfig.idleTimeoutстрока

      Тайм-аут для соединений без прикладной активности, которые установлены между istio-сайдкаром клиента и сервисом. По истечении тайм-аута, соединение между сайдкаром и сервисом закрывается, но между приложением и сайдкаром — не закрывается. Если установить значение 0s, то тайм-аут будет отключен. Этот глобальный параметр может быть переопределен на уровне пода аннотацией:

          proxy.istio.io/config: |-
            proxyMetadata:
              ISTIO_META_IDLE_TIMEOUT: "12h"
      

      Внимание! Отключение этого таймаута (значение 0s) с большой вероятностью может привести к утечке соединений из-за потери пакетов TCP FIN и т.п. Внимание! После изменения настройки необходим рестарт клиентских подов.

      По умолчанию: "1h"

      Шаблон: ^[0-9]+(s|m|h)$

      Пример:

      idleTimeout: 24h
      
  • sidecarобъект

    Настройки для перехвата сетевого трафика в istio-sidecar.

    • sidecar.excludeInboundPortsмассив строк

      Диапазоны входящих портов, чей трафик гарантированно не заворачивается через Istio.

      Можно переопределить этот параметр для отдельного пода с помощью аннотации traffic.sidecar.istio.io/excludeInboundPorts.

      По умолчанию: []

      Пример:

      excludeInboundPorts:
      - '8080'
      - '8443'
      
      • Элемент массивастрока

        Шаблон: ^[0-9]{1,5}$

    • sidecar.excludeOutboundIPRangesмассив строк

      Трафик в сторону этих диапазонов IP гарантированно не заворачивается через Istio.

      Можно переопределить этот параметр для отдельного пода с помощью аннотации 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.

      Можно переопределить этот параметр для отдельного пода с помощью аннотации traffic.sidecar.istio.io/excludeOutboundPorts.

      По умолчанию: []

      Пример:

      excludeOutboundPorts:
      - '8080'
      - '8443'
      
      • Элемент массивастрока

        Шаблон: ^[0-9]{1,5}$

    • sidecar.includeOutboundIPRangesмассив строк

      Трафик в сторону этих диапазонов IP безоговорочно заворачивается через Istio.

      Можно переопределить этот параметр для отдельного пода с помощью аннотации 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.

      Внимание! Настройка применяется только для новых подов с 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.requestsобъект

          Requests configuration.

          • sidecar.resourcesManagement.static.requests.cpu

            Реквесты к CPU.

            По умолчанию: 100m

          • sidecar.resourcesManagement.static.requests.memory

            Реквесты к памяти.

            По умолчанию: 128Mi

  • tolerationsмассив объектов

    Опциональные tolerations для компонентов istio-operator, metadata-exporter и Kiali.

    Структура, аналогичная spec.tolerations пода Kubernetes.

    Если ничего не указано или указано 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.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.samplingчисло

      Параметр sampling используется для определения процента запросов, которые передаются в систему трассировки.

      Этот параметр должен быть настроен в зависимости от трафика в сети и количества данных трассировки, которые необходимо собрать.

      Параметр можно переопределить для каждого пода индивидуально с помощью следующей аннотации:

      proxy.istio.io/config: |
        tracing:
          sampling: 100.0
      

      По умолчанию: 1.0

      Допустимые значения: 0.01 <= X <= 100.0

      Пример:

      sampling: 50.05
      

Аутентификация

По умолчанию используется модуль 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 больше не поддерживается.