Руководство по установке#

В руководстве приведены инструкции по установке компонента VISL.

Термины и определения#

Термин/аббревиатура

Определение

URL

Uniform Resource Locator, унифицированный адрес ресурса

Platform V Synapse Service Mesh / SSM

Программный продукт на базе Istio SE, обеспечивающий возможность создания сервисной сети поверх Платформенной в Kubernetes

Istio SE

Настраиваемая сервисная сетка, служащая для взаимодействия, мониторинга и обеспечения безопасности контейнеров в кластере Kubernetes

Контрольная панель

Проект, где запущены управляющие приложения SSM

Платформа

Платформа оркестрации приложений с средствами автоматизации и управления на основе политик, например Kubernetes

Граничный прокси/IGEG

Компонент Граничный прокси продукта Platform V Synapse Service Mesh

Deployment

Набор инструкций для запуска приложения в Kubernetes

Pod

Набор контейнеров внутри узла кластера Kubernetes

Config Map

Объект API Kubernetes, который позволяет отделить конфигурационные файлы от содержимого образа

Панельная VISL

Версия VISL, которая запускается в контрольной панели и обслуживает проекты подключенные к этой панели

Централизованная VISL

Версия VISL, которая запускается в одном экземпляре на весь кластер и обслуживает все проекты кластера, подключенные к ней. Централизованная версия использует тот же образ, что и панельная VISL, но другую конфигурацию манифестов Kubernetes. Отличия будут указаны в документации

OpenShift (OSE)

Корпоративная платформа для разработки, развертывания и эксплуатации классических и контейнерных приложений в физических, виртуальных и общедоступных облачных средах

Kubernetes (k8s)

Портативная расширяемая платформа с открытым исходным кодом для управления контейнеризованными рабочими нагрузками и сервисами

GATM

Компонент «Сбор и анализ метрик» из состава программного продукта Platform V Synapse Service Mesh (SSM)

SMDL

Компонент для сборки, установки и администрирование сервисов на Synapse из состава программного продукта Platform V Synapse Service Mesh (SSM)

Secret Management System

Cистема управления секретами (пароли, ключи шифрования и т.п.) приложений

Системные требования#

Настройки безопасности окружения и перечень платформенных (дополнительных внешних) продуктов, используемых для установки, настройки и контроля в конечной информационной системе (далее — ИС), выбираются клиентом при разработке конечной ИС, исходя из характера обрабатываемой в ней информации и иных требований информационной безопасности (далее — ИБ), предъявляемых к ней.

Системное программное обеспечение#

Для функционирования программного компонента VISL предъявляются требования по наличию следующего программного обеспечения:

Категория ПО

Обязательность установки

Наименование ПО

Версия

Продукт, функциональная совместимость с которым подтверждена

Назначение категории ПО

Операционная система

Да

Alt Linux SP8

10

Рекомендовано. Правообладателем АО «СберТех» также рекомендована Операционная система (INST) – Platform V SberLinux OS Server, см. раздел «Платформенные зависимости»

ОС контейнеров для запуска модулей компонента

Red Hat Enterprise Linux

8

Опционально

Платформа для разработки, доставки и запуска контейнерных приложений

Да

Docker CE

4.6 и выше

Рекомендовано

Платформа контейнеризации с открытым исходным кодом

Среда оркестрации контейнеров

Да

Kubernetes

1.19 и выше

Рекомендовано. Правообладателем АО «СберТех» также рекомендована среда контейнеризации – Platform V DropApp, см. раздел «Платформенные зависимости»

Открытое программное обеспечение для оркестрации контейнеризированных приложений

Red Hat OpenShift

4.6 и выше

Опционально

Платформа контейнеризации для запуска компонентов сервиса

Система мониторинга (сбор и хранение метрик)

Нет

Prometheus

2.37 и выше

Рекомендовано. Правообладателем АО «СберТех» также рекомендован сервис для сбора прикладных и инфраструктурных метрик и отправки их в целевую систему хранения – Объединенный мониторинг Unimon Platform V Monitor, см. раздел «Платформенные зависимости»

Система для сбора и хранения численных метрик

Сервис для сбора метрик

Нет

Victoria metrics

1.5 и выше

Опционально

Инструмент для сбора метрик

Сервис централизованного хранения репозиториев артефактов (хранилище артефактов)

Да

Nexus-Public

3.42.0

Рекомендовано

Интегрированная платформа для проксирования, хранения и управления зависимостями Java (Maven), образами, а также распространения ПО

Nexus Repository Manager PRO

3.43.0

Опционально

Nexus Repository Manager OSS

3.43.0

Опционально

Сервис централизованного хранения репозиториев исходного кода

Да

GitLab Community Edition

15.7 и выше

Рекомендовано

Хранение конфигураций при автоматизированной установке

Bitbucket

7.6.7 и выше

Опционально

Сервис интеграции микросервисов в облаке

Сервис интеграции и оркестрации микросервисов в облаке

Нет

Istio

1.6 и выше

Опционально. Правообладателем АО «СберТех» также рекомендован сервис интеграции и оркестрации микросервисов в облаке, основанный на Istio – Platform V Synapse Service Mesh, см. раздел «Платформенные зависимости»

Панель управления с открытым исходным кодом, служащая для обеспечения безопасности контейнеров в среде контейнеризации Kubernetes

Менеджер пакетов

Нет

Helm

3 и выше

Опционально

Диспетчер пакетов для Kubernetes, упрощающий для разработчиков и операторов упаковку, настройку и развертывание приложений и служб в кластерах Kubernetes

Иное

Нет

kubectl CLI

1.20.5 и выше

Опционально

Интерфейс командной строки для взаимодействия с кластером

Иное

Да

NODE.JS

14-buster

Рекомендовано

Кроссплатформенная среда исполнения с открытым исходным кодом

Примечание:

*

  • Да — категория ПО обязательна для функционирования сервиса (это означает, что сервис не может выполнять свои основные функции без установки данной категории ПО).

  • Нет — категория ПО необязательна для функционирования сервиса (это означает, что сервис может выполнять свои основные функции без установки данной категории ПО).

**

  • Рекомендовано — рекомендованный правообладателем АО «СберТех» продукт.

  • Опционально — альтернативный по отношению к рекомендованному правообладателем АО «СберТех» продукт.

Каких-либо требований безопасности к рабочему окружению и к платформе K8S/OSE со стороны VISL не предъявляется.

Платформенные зависимости#

Для настройки, контроля и функционирования компонента реализована интеграция с программными продуктами, правообладателем которых является АО «СберТех»:

Наименование продукта

Код

Версия продукта

Код и наименование компонента

Обязательность установки (да/нет)

Описание

Аналог других производителей

Platform V Monitor

OPM

4.1

MONA Объединенный мониторинг Unimon

Нет

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

Prometheus 2.37.0 и выше, Victoria Metrics от 1.5 и выше

Platform V Synapse Service Mesh

SSM

3.9

GATM Сбор и анализ метрик

Нет

Сервис для сбора прикладных и инфраструктурных метрик и отправки их в целевую систему хранения

Prometheus 2.37.0 и выше, Victoria Metrics от 1.5 и выше

Platform V Synapse Service Mesh

SSM

3.9

POLM Управление политиками

Да

Панель управления с открытым исходным кодом, служащая для взаимодействия, мониторинга и обеспечения безопасности контейнеров в среде контейнеризации Kubernetes

Istio control plane 1.12

Platform V Synapse Service Mesh

SSM

3.9

IGEG Граничный прокси

Нет

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

Istio proxy 1.12

Platform V Synapse Service Mesh

SSM

3.9

SVPX Сервисный прокси

Нет

Прокси-сервер L7 и коммуникационная шина, разработанные для крупных современных сервис-ориентированных архитектур

Platform V Synapse Service Mesh

SSM

3.9

SMDL DevOps инструменты Service Mesh

Нет

Сборка, установка и администрирование сервисов на Synapse

Platform V SberLinux OS Server

SLO

8.7

INST Операционная система

Нет

ОС контейнеров для запуска модулей компонента

ОС Альт 8 СП

Platform V DropApp

K8S

1.1 и выше

K8SC K8S Core

Нет

Дистрибутив Kubernetes со встроенными механизмами мультитенантности и бессерверным исполнением

Kubernetes, Red Hat OpenShift Container Platform

Минимальные ресурсы#

Минимальные ресурсы, необходимые для панельной VISL:

Контейнер

Режим работы приложения

CPU Request, core

Memory Request, Mi

CPU Limit, core

Memory Limit, Mi

Приложение

Отдельный pod

1

4000

1

4000

Минимальные ресурсы, необходимые для централизованной VISL:

Контейнер

Режим работы приложения

CPU Request, core

Memory Request, Mi

CPU Limit, core

Memory Limit, Mi

Приложение

Отдельный pod

6

6000

6

6000

Аппаратные требования#

Перед установкой проверьте соблюдение следующих условий:

  1. Развернут и настроен кластер Kubernetes версии 1.19 и выше или OpenShift 4.6 и выше в соответствии с требованиями предъявляемыми к Платформе

  2. В кластере создан проект (namespace), в котором будет разворачиваться VISL

  3. При работе компонента VISL с IGEG требуется наличие развернутого компонента SSM - POLM и подключенный проект к контрольной панели (POLM)

  4. В проекте создана учетная запись с правами на загрузку артефактов (администратор проекта)

  5. Получена ссылка на целевой Docker-репозиторий

  6. В проект добавлен секрет для загрузки docker-образов из целевого Docker-репозитория

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

  8. При установке с использованием консоли, на рабочем месте должен быть установлен клиент Kubernetes (kubectl) или OpenShift CLI (oc)

  9. При установке с использованием консоли, на рабочем месте должен быть установлен клиент Helm

Специфические требования настройки безопасности окружения отсутствуют.

Для доступа к веб-интерфейсу VISL необходимо наличие установленного на компьютере браузера. Рекомендуются браузеры на основе Chromium.

Состав дистрибутива#

Дистрибутив содержит следующие конфигурации, в директории templates, объединенные в файлы шаблонов Helm:

Элемент дистрибутива

Описание

deployment.yaml

Содержит параметры связанные с развертыванием VISL и граничных прокси IGEG

configmap.yaml

Содержит параметры конфигурации VISL

service.yaml

Содержит конфигурации сервисов для VISL и IGEG

route.yaml

Позволяет получить доступ извне к VISL, кластер OpenShift

ingress.yaml

Позволяет получить доступ извне к VISL, кластер Kubernetes

serviceaccount.yaml

Содержит сервисы аккаунты для запуска VISL

destinationrule.yaml

Содержит настройки Destination Rule

virtualservice.yaml

Содержит настройки Virtual Service

serviceentry.yaml

Содержит настройки Service Entry

gateway.yaml

Содержит настройки Gateway

values.yaml

Содержит примеры заполнения стендозависимых параметров

За управление версией VISL (панельная / централизованная) отвечает набор параметров в файле values.yaml (см. пункт 3, раздела «Установка» текущего документа).

В данном дистрибутиве VISL работает через Граничные прокси (ingress-gateway и egress-gateway), на которых осуществляется терминация трафика. Также возможна конфигурация без Istio SE.

Изменяемые параметры в ConfigMap:

  • api.namespaces.label_selector - селектор меток Kubernetes (например, istio.io/rev=istio-system), по которому определяются доступные для VISL пространства имен; Не влияет на явный доступ к пространству имен.

  • auth.strategy - стратегия аутентификации (token, openshift, anonymous).

  • deployment.accessible_namespaces - список namespaces, к которым VISL должен иметь доступ. Если пропустить данный параметр, то по умолчанию: доступны все namespaces, за исключением указанных выше в блоке api.namespaces.exclude. Запись со специальным значением ** (две звездочки) используется чтобы VISL был предоставлен доступ ко всем namespaces через одну роль кластера (при использовании ** (две звездочки) требуется, чтобы оператору уже были предоставлены разрешения на создание ClusterRole и ClusterRoleBinding). Для централизованного VISL задается список namespaces.

  • external_services.prometheus.url - указать url сервиса для сбора метрик;

  • external_services.prometheus.component_status.app_label - указать app label из pod сервиса для сбора метрик.

  • external_services.prometheus.auth.insecure_skip_verify: false - установлено значение false, чтобы не пропускать проверку действительности сертификата, когда VISL связывается с Prometheus через HTTPs;

  • external_services.prometheus.auth.ca_file: /var/run/secrets/kubernetes.io/serviceaccount/service-ca.crt - сертификат используемый при доступе к сервису для сбора метрик по протоколу HTTPs, если его не указать будет ошибка - x509 certificate signed by unknown authority;

  • external_services.istio.config_map_name - указать имя config_map Istio SE. Для централизованного VISL оставить istio-basic;

  • external_services.istio.url_service_version - сервис Istio SE для определения версии Istio SE;

  • external_services.istio.istio_injection_annotation: sidecar.istio.io/inject - значение данной аннотации (true/false) отображается в веб-интерфейсе на вкладке workload (нужно кликнуть по любому workload и в открывшемся окне будет значение Istio Sidecar Inject Annotation);

  • installation_tag - тег для идентификации экземпляра VISL;

  • istio_labels.injection_label_name: istio-injection - метка по которой определяется вкл/выкл sidecar injection;

  • istio_namespace - пространство имен, в котором установлен Istio SE. Если оставить пустым, предполагается, что это тоже пространство имен, в котором установлен компонент VISL;

  • kiali_feature_flags.istio_injection_action: false - данный флаг включает функцию управления аннотацией sidecar.istio.io/inject (на вкладке workload нужно кликнуть по любому workload и в открывшемся окне в правом верхнем углу появится кнопка Acnions которая управляет данной аннотацией если у пользователя есть на это права);

  • kubernetes_config.cache_enabled - включить кеширование ресурсов;

  • kubernetes_config.cache_namespaces - список пространств имен, ресурсы в которых будут кешироваться;

  • kubernetes_config.excluded_workloads - список ресурсов, которые не будут кешироваться. Endpoints, ReplicationController, DeploymentConfig, StatefulSet, Job, CronJobs, и ReplicaSet будут исключены, если присутствуют в этом списке.

  • server.web_root - корневой путь контекста для API и проб;

Выбор способа установки#

Базовым способом установки является ручная установка с помощью Helm Charts, описанная ниже. Дополнительно поддерживается автоматическая установка с помощью jobs, входящих в компонент SMDL продукта Synapse Service Mesh (сценарий описан в разделе «Автоматизированная установка VISL»).

Подготовка окружения#

  1. VISL использует данные, хранящиеся в сервисе для сбора метрик (например MONA), для построения графа, отображения метрик и т.д. Сервис для сбора метрик получает их у pod istio-proxy. Включение этой функции осуществляется путем применения EnvoyFilter. В контрольных панелях с Istio SE свой набор EnvoyFilter и они создаются вместе контрольной панелью. Ручная установка не требуется. EnvoyFilter для контрольных панелей с RHSM приведены ниже.

    Если панельная версия VISL устанавливается в контрольную панель с RHSM, то нужно убедиться в наличии 2-х EnvoyFilter с именами начинающимися на - stats-filter и tcp-stats-filter, в случае отсутствия понадобиться их создать.

    Для централизованной VISL, при необходимости, нужно создавать EnvoyFilter в каждом проекте, который к ней подключается. Если в контрольной панели с RHSM, к которой подключен проект (доступный для VISL) уже есть EnvoyFilter с именами начинающимися на - stats-filter и tcp-stats-filter, то дополнительного создания EnvoyFilter в проекте не требуется.

    Манифесты EnvoyFilter для панельной и централизованной VISL приведены ниже:

apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
  name: stats-filter-1.6-basic
spec:
  configPatches:
    - applyTo: HTTP_FILTER
      match:
        context: SIDECAR_OUTBOUND
        listener:
          filterChain:
            filter:
              name: envoy.http_connection_manager
              subFilter:
                name: envoy.router
        proxy:
          proxyVersion: ^1\.6.*
      patch:
        operation: INSERT_BEFORE
        value:
          name: istio.stats
          typed_config:
            '@type': type.googleapis.com/udpa.type.v1.TypedStruct
            type_url: type.googleapis.com/envoy.extensions.filters.http.wasm.v3.Wasm
            value:
              config:
                configuration: |
                  {
                    "debug": "false",
                    "stat_prefix": "istio"
                  }
                root_id: stats_outbound
                vm_config:
                  code:
                    local:
                      inline_string: envoy.wasm.stats
                  runtime: envoy.wasm.runtime.null
                  vm_id: stats_outbound
    - applyTo: HTTP_FILTER
      match:
        context: SIDECAR_INBOUND
        listener:
          filterChain:
            filter:
              name: envoy.http_connection_manager
              subFilter:
                name: envoy.router
        proxy:
          proxyVersion: ^1\.6.*
      patch:
        operation: INSERT_BEFORE
        value:
          name: istio.stats
          typed_config:
            '@type': type.googleapis.com/udpa.type.v1.TypedStruct
            type_url: type.googleapis.com/envoy.extensions.filters.http.wasm.v3.Wasm
            value:
              config:
                configuration: |
                  {
                    "debug": "false",
                    "stat_prefix": "istio"
                  }
                root_id: stats_inbound
                vm_config:
                  code:
                    local:
                      inline_string: envoy.wasm.stats
                  runtime: envoy.wasm.runtime.null
                  vm_id: stats_inbound
    - applyTo: HTTP_FILTER
      match:
        context: GATEWAY
        listener:
          filterChain:
            filter:
              name: envoy.http_connection_manager
              subFilter:
                name: envoy.router
        proxy:
          proxyVersion: ^1\.6.*
      patch:
        operation: INSERT_BEFORE
        value:
          name: istio.stats
          typed_config:
            '@type': type.googleapis.com/udpa.type.v1.TypedStruct
            type_url: type.googleapis.com/envoy.extensions.filters.http.wasm.v3.Wasm
            value:
              config:
                configuration: |
                  {
                    "debug": "false",
                    "stat_prefix": "istio",
                    "disable_host_header_fallback": true
                  }
                root_id: stats_outbound
                vm_config:
                  code:
                    local:
                      inline_string: envoy.wasm.stats
                  runtime: envoy.wasm.runtime.null
                  vm_id: stats_outbound
#  Для централизованной VISL добавить блок
#  workloadSelector:
#    labels: {}
---
apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
  name: tcp-stats-filter-1.6-basic
spec:
  configPatches:
    - applyTo: NETWORK_FILTER
      match:
        context: SIDECAR_INBOUND
        listener:
          filterChain:
            filter:
              name: envoy.tcp_proxy
        proxy:
          proxyVersion: ^1\.6.*
      patch:
        operation: INSERT_BEFORE
        value:
          name: istio.stats
          typed_config:
            '@type': type.googleapis.com/udpa.type.v1.TypedStruct
            type_url: type.googleapis.com/envoy.extensions.filters.network.wasm.v3.Wasm
            value:
              config:
                configuration: |
                  {
                    "debug": "false",
                    "stat_prefix": "istio"
                  }
                root_id: stats_inbound
                vm_config:
                  code:
                    local:
                      inline_string: envoy.wasm.stats
                  runtime: envoy.wasm.runtime.null
                  vm_id: tcp_stats_inbound
    - applyTo: NETWORK_FILTER
      match:
        context: SIDECAR_OUTBOUND
        listener:
          filterChain:
            filter:
              name: envoy.tcp_proxy
        proxy:
          proxyVersion: ^1\.6.*
      patch:
        operation: INSERT_BEFORE
        value:
          name: istio.stats
          typed_config:
            '@type': type.googleapis.com/udpa.type.v1.TypedStruct
            type_url: type.googleapis.com/envoy.extensions.filters.network.wasm.v3.Wasm
            value:
              config:
                configuration: |
                  {
                    "debug": "false",
                    "stat_prefix": "istio"
                  }
                root_id: stats_outbound
                vm_config:
                  code:
                    local:
                      inline_string: envoy.wasm.stats
                  runtime: envoy.wasm.runtime.null
                  vm_id: tcp_stats_outbound
    - applyTo: NETWORK_FILTER
      match:
        context: GATEWAY
        listener:
          filterChain:
            filter:
              name: envoy.tcp_proxy
        proxy:
          proxyVersion: ^1\.6.*
      patch:
        operation: INSERT_BEFORE
        value:
          name: istio.stats
          typed_config:
            '@type': type.googleapis.com/udpa.type.v1.TypedStruct
            type_url: type.googleapis.com/envoy.extensions.filters.network.wasm.v3.Wasm
            value:
              config:
                configuration: |
                  {
                    "debug": "false",
                    "stat_prefix": "istio"
                  }
                root_id: stats_outbound
                vm_config:
                  code:
                    local:
                      inline_string: envoy.wasm.stats
                  runtime: envoy.wasm.runtime.null
                  vm_id: tcp_stats_outbound
#  Для централизованной VISL добавить блок
#  workloadSelector:
#    labels: {}
  1. Необходимо выпустить сертификаты. Инструкция по выпуску сертификатов находится в документе в разделе «Генерация сертификатов».

  2. В случае необходимости произвести интеграцию граничного прокси IGEG и VISL с Secret Management System (Хранилище секретов). Для этого требуется добавить аннотации в deployment компонентов IGEG и VISL.

    Инструкция для IGEG находится в разделе «Руководство по установке» документации по компоненте IGEG.

    Пример аннотаций для VISL представлен в разделе «Установка» текущего документа. Перед проведением интеграции с Secret Management System сертификаты должны быть в него загружены.

    Если интеграция с Secret Management System не производится, необходимо создать хранилище типа secret с сертификатами, пример находится в разделе «Генерация сертификатов».

Установка#

Ручная установка сервиса VISL#

Перед началом установки убедитесь, что выполнена подготовка окружения.

Для ручной установки сервиса выполните следующие действия:

  1. Создайте директорию установки.

Шаг

Действия

Описание

Создайте директорию для установки.

Создайте папку. Пример: visl.

Разархивируйте файлы.

Распакуйте в созданную папку архив с конфигурационными артефактами visl-bin-<версия>.zip.

Соберите докер образ для установки приложения

Выполните команду находясь в директории package распакованного архива: docker build . -t <путь>:<версия> -f docker/visl/Dockerfile

Загрузите полученный докер образ в реджестри

Выполните команду: docker push <путь>:<версия>

<путь> - путь к образу в registry например: test.ru/ssm-VISL/VISL
<версия> - версия образа например: 0.1.0.39

  1. Подключитесь к проекту.

Для подключения через консоль Платформы:

Шаг

Действия

Описание

Установка в Kubernetes: запустите консольного клиента платформы оркестрации контейнеров (kubectl)

Введите в командную строку команды, используя клиента: kubectl login <api-uri кластера> (затем внесите свои учетные данные для входа в Kubernetes)

Установка в Kubernetes: установка проекта по умолчанию

Введите команду: kubectl config set-context --current --namespace=<имя неймспейса установки>

Установка в OpenShift: запустите консольного клиента платформы оркестрации контейнеров

Введите в командную строку команды, используя клиента : oc login <api-uri кластера> (затем внесите свои учетные данные для входа в openshift). Введите команду oc project <имя проекта куда будет производиться установка>

  1. Настройка стендозависимых параметров.

Пример конфигурационного файла package/conf/k8s/base/helm/values.yaml:

# kubernetes or openshift
containerOrchestrationSystem: kubernetes

# for manual installation, ex. image: example.registry/visl/visl:latest
image:

# for SMDL installation
common:
  registry: example.registry
  registry_path: registry_path

imagePullSecrets:
  - name: image-pull
nameOverride: ""
fullnameOverride: visl

# "true" or "false"
automountServiceAccountToken: "false"

serviceAccount:
  # Specifies whether a service account should be created
  create: true
  # Annotations to add to the service account
  annotations: {}
  # The name of the service account to use.
  # If not set and create is true, a name is generated using the fullname template
  name: "visl"

podAnnotations:
  prometheus.io/port: "9090"
  prometheus.io/scrape: "true"

ingress:
  # true or false
  enabled: false
  className: nginx
  annotations:
    nginx.ingress.kubernetes.io/ssl-passthrough: 'true'
  host: visl.example.host
  path: /
  pathType: Prefix
  tls: {}
  #  - secretName: chart-example-tls

resources:
  requests:
    cpu: 200m
    memory: 200Mi
  limits:
    cpu: 200m
    memory: 200Mi

config:
  api:
    namespaces:
      # panel version
      # used when fetching the list of available namespaces
      label_selector:
        # true or false
        enabled: false
        value: istio.io/rev=istio-system
  auth:
    # authentication strategy to use when users log into VISL
    # strategy: anonymous
    # strategy: token
    strategy: openshift
    openshift:
      # config.auth.openshift.client_id_prefix = fullnameOverride
      # <Route manifest metadata.name> = config.auth.openshift.client_id_prefix
      # <OAuthClient manifest metadata.name> = <Route manifest metadata.name>-<Route manifest metadata.namespace>
      # To use openshift strategy need to provide Role/visl for the VISL service account in VISL namespace
      client_id_prefix: visl
  deployment:
    # VISL namespace
    namespace: visl-namespace
    # list of namespaces to which VISL is to be given permissions
    accessible_namespaces:
      # true or false
      enabled: true
      value: [metrics, visl-namespace, new-project]
  external_services:
    istio:
      istiod:

    # prometheus configuration to get Istio SE telemetry
    prometheus:
      # auth:
      #   ca_file: /var/run/secrets/kubernetes.io/serviceaccount/service-ca.crt
      #   insecure_skip_verify: false
      #   password: ''
      #   token: ''
      #   type: basic
      #   use_kiali_token: false
      #   username: internal
      # component_status:
      #   app_label: prometheus-sbt
      #   is_core: true
      #   namespace: visl-test3
      url: http://prometheus-tls.metrics.svc.cluster.local:9080

  installation_tag: VISL [visl-namespace]
  istio_component_namespaces:
    # Istio SE namespace
    istiod: visl-namespace
    prometheus: metrics
  istio_labels:
    # used to define what application a workload belongs to
    app_label_name: app
    # used to define what version of the application a workload belongs to
    version_label_name: version
  # Istio SE namespace
  istio_namespace: visl-namespace
  # Istiod service name
  istio_serviceIstiod: istiod-istio-system

  kubernetes_config:
    # true or false
    # for caching need to provide ClusterRole/kiali-se-central-cluster-role for the VISL service account in each cache_namespaces
    cache_enabled: true
    # panel version [".*"]
    # cluster version [visl-namespace, new-project]
    cache_namespaces:
      - metrics
      - visl-namespace
      - new-project
  server: {}
  # server:
    # path for the VISL console and API endpoints and readiness probes
    # web_root: /kiali

openshift:
  route:
    # true or false
    enabled: true
    host: visl.example.host
    tls:
      enabled: true
      termination: passthrough

igeg:
  # add IstioSE configuration(ingress/egress gateway, sidecar)?
  # true or false
  enabled: true
  # IGEG version
  version: 1.17.3-1_sberlinux
  imagePullSecrets:
    - name: image-pull
  image: example.registry/polm/proxyv2:latest
  # Control plane configuration to which VISL is connected
  controlPlane:
    # Istio SE namespace
    namespace: istio-system
    # Istiod service name
    serviceIstiod: istiod-istio-system
  # add secman-injector?
  secman:
    # true or false
    enabled: true
  proxyConfig:
    # IGEG tracing configuration
    tracing:
      enable: true
      custom_tags:
        enabled: true
      zipkin:
        address: synapse-tracer-svc.istio-system.svc.cluster.local:8788
      tlsSettings:
        enabled: true
        caCertificates: /var/run/secrets/istio/root-cert.pem
        mode: SIMPLE
        subjectAltNames:
          - spiffe://cluster.local/ns/istio-system.svc/sa/default
  vaultAnnotations:
    vault.hashicorp.com/role: synapse
    vault.hashicorp.com/namespace: ""
    vault.hashicorp.com/auth-path: auth/synapse
    vault.hashicorp.com/log-level: info
    vault.hashicorp.com/agent-inject: 'true'
    vault.hashicorp.com/agent-init-first: 'true'
    vault.hashicorp.com/agent-requests-cpu: 125m
    vault.hashicorp.com/agent-requests-mem: 32Mi
    vault.hashicorp.com/agent-limits-cpu: 250m
    vault.hashicorp.com/agent-limits-mem: 64Mi
    vault.hashicorp.com/agent-pre-populate: 'true'
    vault.hashicorp.com/agent-pre-populate-only: 'true'
    vault.hashicorp.com/agent-inject-secret-tls.key: 'true'
    vault.hashicorp.com/agent-inject-secret-ca.crt: 'true'
    vault.hashicorp.com/agent-inject-secret-tls.crt: 'true'
    vault.hashicorp.com/agent-run-as-group: '10011001'
    vault.hashicorp.com/agent-run-as-user: '10011001'
    vault.hashicorp.com/agent-run-as-same-user: 'true'
  ingress:
    # plain http - igeg.ingress.port.protocol = HTTP  & igeg.ingress.tls.enabled = false
    # tls        - igeg.ingress.port.protocol = HTTPS & igeg.ingress.tls.enabled = true & igeg.ingress.tls.mode = SIMPLE
    # mtls       - igeg.ingress.port.protocol = HTTPS & igeg.ingress.tls.enabled = true & igeg.ingress.tls.mode = MUTUAL
    dns: visl.example.host
    port:
      # HTTPS, HTTP
      protocol: HTTPS
    tls:
      enabled: true
      # MUTUAL, SIMPLE
      mode: SIMPLE
    fullnameOverride: ingressgateway-visl
    jwt_policy: third-party-jwt
    resources:
      limits:
        cpu: 300m
        memory: 500Mi
      requests:
        cpu: 300m
        memory: 500Mi
    podAnnotations:
      vault.hashicorp.com/secret-volume-path: '/visl-cert'
      vault.hashicorp.com/agent-inject-template-ca.crt: |
        {{- with secret "SYNAPSE/KV/VISL3" -}}
          {{ .Data.data.rootcer }}
        {{- end }}
      vault.hashicorp.com/agent-inject-template-tls.crt: |
        {{- with secret "SYNAPSE/KV/VISL3" -}}
          {{ .Data.data.publishedcer }}
        {{- end }}
      vault.hashicorp.com/agent-inject-template-tls.key: |
        {{- with secret "SYNAPSE/KV/VISL3" -}}
          {{ .Data.data.mtlskey }}
        {{- end }}
  egress:
    # prometheus configuration
    # plain http - igeg.egress.metrics.protocol = HTTP  & igeg.egress.metrics.tls.enabled = false
    # tls        - igeg.egress.metrics.protocol = HTTPS & igeg.egress.metrics.tls.enabled = true & igeg.egress.metrics.tls.mode = SIMPLE
    # mtls       - igeg.egress.metrics.protocol = HTTPS & igeg.egress.metrics.tls.enabled = true & igeg.egress.metrics.tls.mode = MUTUAL
    metrics:
      dns: prometheus-tls.metrics.svc.cluster.local
      port: 9090
      # port in Istio SE mesh
      meshPort: 9080
      # HTTPS, HTTP
      protocol: HTTPS
      tls:
        enabled: true
        # MUTUAL, SIMPLE
        mode: MUTUAL
    # kubeapi configuration
    # tcp - igeg.egress.kubeapi.protocol = TCP & igeg.egress.kubeapi.ip = <kubeapi-ip>
    # tls - igeg.egress.kubeapi.protocol = TLS
    kubeapi:
      dns: kubernetes.default.svc
      port: 443
      # port in Istio SE mesh
      meshPort: 443
      # TCP, TLS
      protocol: TLS
      # TCP
      # ip: 10.96.0.1
    fullnameOverride: egressgateway-visl
    jwt_policy: third-party-jwt
    resources:
      limits:
        cpu: 300m
        memory: 500Mi
      requests:
        cpu: 300m
        memory: 500Mi
    podAnnotations:
      vault.hashicorp.com/secret-volume-path: '/metrics-cert'
      vault.hashicorp.com/agent-inject-template-ca.crt: |
        {{- with secret "SYNAPSE/KV/VISL3" -}}
          {{ index .Data.data "prom-ca-crt" }}
        {{- end }}
      vault.hashicorp.com/agent-inject-template-tls.crt: |
        {{- with secret "SYNAPSE/KV/VISL3" -}}
          {{ index .Data.data "prom-client-crt" }}
        {{- end }}
      vault.hashicorp.com/agent-inject-template-tls.key: |
        {{- with secret "SYNAPSE/KV/VISL3" -}}
          {{ index .Data.data "prom-client-key" }}
        {{- end }}

Настройка values.yaml для панельной VISL (запускается в каждой контрольной панели):

config:
  api:
    namespaces:
      label_selector:
        enabled: true
        value: istio.io/rev=istio-system
  deployment:
    # Проект в который устанавливается VISL
    namespace: visl-namespace
    # Пространства имен, которые будут подключены к централизованному VISL
    accessible_namespaces:
      enabled: false
      value: [metrics, visl-namespace, new-project]
  istio_component_namespaces:
    # Istio SE namespace
    istiod: istio-system
    prometheus: metrics
  istio_namespace: istio-system
  kubernetes_config:
    cache_enabled: true
    cache_namespaces: [".*"]

Настройка values.yaml для централизованной VISL (запускается одна на весь кластер):

config:
  api:
    namespaces:
      label_selector:
        enabled: false
  deployment:
    namespace: visl-namespace
    accessible_namespaces:
      enabled: true
      value: [metrics, visl-namespace, new-project]
  istio_component_namespaces:
    istiod: visl-namespace
    prometheus: metrics
  istio_namespace: visl-namespace
  kubernetes_config:
    cache_enabled: true
    cache_namespaces:
      - metrics
      - visl-namespace
      - new-project
  1. Манифесты необходимые для корректной работы.

Для обеспечения авторизации в веб-интерфейсе VISL в случае использования OpenShift админам кластера необходимо создать конфигурацию OAuthClient:

apiVersion: oauth.openshift.io/v1
grantMethod: auto
kind: OAuthClient
metadata:
  name: {{ oauth_client_name }}
redirectURIs:
# redirectURIs должен совпадать с тем URI, что выдается после создания Route
  - {{ redirectURI }}

При аутентификации в веб-интерфейсе, компонент VISL выполняет запрос вида:

https://oauth.examplate.host/oauth/authorize?client_id={{ client_id_prefix}}-{{ visl_project_name }}&redirect_uri={{ redirectURI }}&response_type=token

Параметр

Описание

Значение

Название OAuth клиента, используется в качестве client_id параметра при запросах

-

Это значение auth.openshift.client_id_prefix в configmap.yaml. Должно совпадать с названием Route

Например, visl

Проект куда устанавливается VISL

Например, example-namespace

URI, который выдается после создания Route

Например, visl.example.host

Проект, подключаемый к VISL

Например, example-member-namespace

Имя манифеста OAuthClient приведенного выше должно соответствовать параметру client_id. Если client_id не соответствует имени OAuthClient, то возникнет ошибка:

{
  "error": "unauthorized_client",
  "error_description": "The client is not authorized to request a token using this method."
}

Для корректной работы сервис аккаунту VISL требуется доступ к подключаемым проектам:

kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: kiali-se-central-ci03189811
  namespace: {{ member_project_name }}
subjects:
  - kind: ServiceAccount
    name: visl
    namespace: {{ visl_project_name }}
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: kiali-se-central-cluster-role
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: kiali-se-central-cluster-role
rules:
  - verbs:
      - get
      - list
      - watch
    apiGroups:
      - ''
    resources:
      - pods
      - services
  - verbs:
      - create
    apiGroups:
      - ''
    resources:
      - pods/portforward
  - verbs:
      - get
      - list
      - watch
    apiGroups:
      - apps
    resources:
      - deployments
  - verbs:
      - get
      - list
      - watch
    apiGroups:
      - config.istio.io
      - networking.istio.io
      - authentication.istio.io
      - rbac.istio.io
      - security.istio.io
    resources:
      - '*'
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: visl
  namespace: {{ visl_project_name }}
subjects:
  - kind: ServiceAccount
    name: visl
    namespace: {{ visl_project_name }}
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: visl
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: visl
  namespace: {{ visl_project_name }}
rules:
  - verbs:
      - get
    apiGroups:
      - route.openshift.io
    resources:
      - routes
  - verbs:
      - get
    apiGroups:
      - ''
    resources:
      - configmaps
    resourceNames:
      - istio-basic

Если в качестве сервиса для сбора метрик используется компонент GATM, необходимо создать:

kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: vmagent-synapse-ci03189811
  namespace: {{ member_project_name }}
subjects:
  - kind: ServiceAccount
    name: synapse-metrics-sa # имя сервис аккаунта компонента GATM
    namespace: {{ visl_project_name }}
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: vmagent-service-discovery-synapse-cluster-role
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: vmagent-service-discovery-synapse-cluster-role
rules:
  - verbs:
      - get
      - watch
      - list
    apiGroups:
      - ''
    resources:
      - pods

В проекте, который должен быть доступен в VISL, необходимо создать NetworkPolicy:

kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
  name: allow-from-{{ visl_project_name }}-namespace
  namespace: {{ member_project_name }}
spec:
  podSelector: {}
  ingress:
    - ports:
        - protocol: TCP
          port: 15090
      from:
        - podSelector:
            matchLabels:
              app: synapse-metrics-agent # метка
          namespaceSelector:
            matchLabels:
              projectId: {{ visl_project_name }}
  policyTypes:
    - Ingress
  1. В случае, если в качестве сервиса для сбора метрик используется Prometheus, установленный в контрольной панели через оператор Red Hat OpenShift Service Mesh, в блок spec.containers.env деплоймента VISL необходимо добавить:

- name: PROMETHEUS_PASSWORD
  valueFrom:
    secretKeyRef:
      name: htpasswd
      key: rawPassword

Если используется централизованная версия VISL, то в namespace, где она установлена нужно скопировать секрет с именем htpasswd из контрольной панели, где установлен Prometheus.

  1. Для интеграции с компонентом MONA продукта Platform V Monitor необходимо в конфигурацию Service добавить следующие аннотации по пути metadata.annotations:

    metadata:
      annotations:
        prometheus.io.path: /actuator/prometheus        # контроллер, с которого собирать метрики
        prometheus.io.port: '8080'                      # порт, на котором доступен web server
        prometheus.io.scrape: 'true'                    # включание сбора метрик с помощью MONA
  1. Для интеграции с платформенными компонентами необходимо применить изменения в конфигурации Service Mesh (kind: IstioOperator), описанные в подразделе "Сценарии администрирования" раздела "Руководство по системному администрированию"

Автоматизированная установка VISL#

7.1 При необходимости и наличию компонента SMDL продукта SSM - установка может быть осуществлена с помощью Jenkins job SynapseInstaller из дистрибутива компонента SMDL. Для использования job необходимо ознакомиться с документацией к компоненту SMDL, в документе Руководство оператора, далее перейти в раздел «pipelines», и выбрать папку SynapseInstaller.

7.2 Для установки через консольного клиента платформы

Шаг

Действия

Описание

Создайте директорию для установки.

Создайте папку. Пример: visl-helm.

Разархивируйте файлы.

Распакуйте в созданную папку архив с конфигурационными артефактами visl-cfg-<версия>.zip.

Настройте стендозависимые параметры.

Настройте стендозависимые параметры в файле package/conf/k8s/base/helm/values.yaml.

Установите конфигурацию с клиентом Helm

Выполните команду находясь в директории package/conf/k8s/base/helm распакованного архива: helm upgrade -i visl.

Данная команда в случае если VISL устанавливается в проект в первый раз произведет установку. Если установка уже производилась, изменения применятся и pod VISL перезапустится.

Настройка интеграции#

Интеграция с компонентом POLM осуществлена в configmap VISL при помощи следующих параметров:

  • .spec.external_services.istio.component_status - компоненты Istio SE, за состоянием которых будет следить VISL;

  • .spec.external_services.istio.component_status.components - определенный компонент Istio SE, за состоянием которого будет следить VISL;

  • .spec.external_services.istio.component_status.components[*].app_label - Istio SE pod app label;

  • .spec.external_services.istio.component_status.components[*].is_core - Должен ли компонент считаться основным для вашего развертывания;

  • .spec.external_services.istio.component_status.enabled - определяет, будут ли статусы компонентов Istio SE отображаться в правой части шапки VISL;

  • .spec.external_services.istio.config_map_name - название config map istio SE control plane;

  • .spec.external_services.istio.istio_injection_annotation - название аннотации, которая автоматически внедряет sidecar Istio SE;

  • .spec.external_services.istio.istio_sidecar_annotation - аннотация в pod, которую использует Istio SE для идентификации sidecar;

  • .spec.external_services.istio.url_service_version - url по которому определяется версия Istio SE.

Интеграция c сервисом для сбора метрик осуществлена в configmap VISL при помощи следующих параметров:

  • .spec.external_services.prometheus.component_status - компоненты, за состоянием которых будет следить VISL;

  • .spec.external_services.prometheus.component_status.components - определенный компонент, за состоянием которого будет следить VISL;

  • .spec.external_services.prometheus.component_status.components[*].app_label - pod app label;

  • .spec.external_services.prometheus.component_status.components[*].is_core - должен ли компонент считаться основным для вашего развертывания;

  • .spec.external_services.prometheus.url - URL-адрес, используемый для запроса к серверу. Этот URL-адрес должен быть доступен из модуля VISL. Если пусто, по умолчанию предполагается, что сервис для сбора метрик находится в пространстве имен control plane Istio SE - например http://service-name.namespace.svc:9090.

Настройка логирования#

По умолчанию в логи pod выводятся сообщения до уровня INFO. При необходимости уровень логирования можно настроить путем изменения переменной LOG_LEVEL в блоке spec.containers.env деплоймента VISL. Например,

- name: LOG_LEVEL
  value: '3'

Где '3' - уровень логирования.

Поддерживаются следующие уровни логирования:

  • '0' - Fatal level

  • '1' - Error level

  • '2' - Warning level

  • '3' - Info level

  • '4' - Debug level

  • '5' - Trace level

Настройка аудита#

В компоненте VISL журналы аудита представляют собой сообщения уровня INFO, выводятся в логи pod и включены по умолчанию.

Пример сообщения аудита:

2022-08-10T13:59:05Z INF AUDIT User [19998413] Msg [UPDATE on Namespace: synapse-dev-sandbox Type: virtualservices Name: ping-app-svc Patch: {"kind":"VirtualService",...

Если журналы аудита слишком подробные, вы можете отключить их, не снижая уровень логирования, изменив в ConfigMap VISL параметр audit_log на значение false:

spec:
  server:
    audit_log: false

Далее необходимо перезапустить pod VISL.

Обновление#

Для обновления версии VISL необходимо обновить Deployment. Для этого поменять версию docker-образа сервиса в разделе containers. Остальные артефакты являются конфигурационными и в случае обновления ставятся из релиза обновленной версии с предварительным удалением старой версии.

Удаление#

Шаг

Действия

Описание

Подключение к проекту

Выполнить пункт 2 из раздела "Установка"

Удаление конфигурации с клиентом Helm

Выполните команду находясь в директории package/conf/k8s/base/helm распакованного архива: helm uninstall visl

Данная команда удалит артефакты из состава дистрибутива VISL. Артефакты не входящие в дистрибутив (секреты, роли итп) необходимо удалить отдельно

Проверка работоспособности#

Проверка Deployment#

  1. Зайти в deployment (после авторизации слева в Workloads выбирать раздел Deployments. В списке выбирать нужный deployment);

  2. В deployment перейти во вкладку редактирования, нажав иконку пера сверху справа;

  3. В массиве status:conditions проверить значения:

  • для type: Progressing должны быть установлены:

    • status: 'True';

    • reason: NewReplicaSetAvailable;

    • message: ReplicaSet "%Имя VISL%" has successfully progressed.

  • для type: Available должны быть установлены:

    • status: 'True';

    • reason: MinimumReplicasAvailable;

    • message: Deployment has minimum availability.

Проверка модулей Deployment#

  1. Зайти в нужный проект;

  2. Зайти в pod (после авторизации слева в Workloads выбрать раздел Pods. В списке выбрать нужный pod);

  3. В pod посмотреть значения во вкладке Containers .

Корректным будет условие: Все контейнеры отмечены зеленым кружочком; В блоке Status у полей Ready и Started значения true.

Также сделать это можно через консоль.

Для этого достаточно выполнить команду:

Для Kubernetes:

kubectl --kubeconfig= <путь_к_kubeconfig> -n <имя_проекта> get pods

Для OpenShift:

oc -n <имя_проекта> get pods

Пример:

oc get pods -n visl-test-syn-dev
NAME                                  READY   STATUS    RESTARTS   AGE
egressgateway-visl-5cbd6fc99d-mrwhz   1/1     Running   0          5d23h
ingressgateway-visl-9cd654b87-fm7gw   1/1     Running   0          6d2h
visl-67cbcbc76-69q5h                  2/2     Running   0          5d23h

В графеReady значение у pod VISL должно быть M/N, где M - количество успешно работающих контейнеров, а N - общее количество работающих контейнеров. Если M = N, то все контейнеры успешно запустились. Если M < N, то необходимо еще подождать, пока контейнеры запустятся, или посмотреть раздел «Часто встречающиеся проблемы и пути их устранения».

Вход в веб-интерфейсе компонента VISL#

  • Вход в веб-интерфейс осуществляется через Route, для это необходимо перейти по ссылке которая сформируется так: протокол (HTTPs) + host указанный в Route VISL.

  • Вход в веб-интерфейс VISL осуществляется через браузер. В данном случае браузер выступает в роли клиента и в режиме mTLS должен отправить сертификаты для аутентификации.

    Если при входе в веб-интерфейс возникнет ошибка ERR_BAD_SSL_CLIENT_AUTH_CERT, то необходимо удостовериться, что УЦ сертификата на вашем компьютере (который должен отправить браузер) есть в корневом сертификате загруженном в Secret Management System.

    Если ошибку устранить не удается можно для тестирования временно отключить режим mTLS. Для этого в файле gateway.yaml изменить блок с tls на:

    tls:
        minProtocolVersion: TLSV1_2
        mode: SIMPLE
        privateKey: /visk-cert/tls.key
        serverCertificate: /visl-cert/tls.crt
    

Проверка работоспособности компонента VISL, собранного на SberLinux в DropApp.#

а) Откройте веб-терминал DropApp

б) Выберите namespace с развернутым компонентом VISL, в соответствии с инструкцией описанной в документе Руководство по установке

в) Откройте раздел деплоймент и найдите деплоймент компонента VISL

г) Перейдите на вкладку pods и убедитесь, что все pods в статусе Running

д) Откройте запущенный pod компонента VISL

е) Перейдите на вкладку терминал и введите команду cat /etc/os-release - в выводе команды присутствует информация о том, что VISL работает на базовом образе SberLinux.

Чек-лист проверки работоспособности интеграций#

Проверка интеграций с POLM#

  • веб-интерфейсе VISL перейти на вкладку Diagnostic;

  • Если VISL не обнаружит Istiod (POLM), то в логах pod VISL будет сообщение об ошибке вида: 2022-08-10T14:51:21Z ERR error get synced configs dumps: unable to find any Istiod instances.

Проверка интеграций с сервисом для сбора метрик#

  • В веб-интерфейсе VISL перейти на вкладку Graph

  • Если сервисом для сбора метрик недоступен, на экране будет выведено следующее сообщение об ошибке:

    Error loading Graph Cannot load the graph: Post "https://service-name.namespace.svc:9090/api/v1/query": dial tcp 172.00.00.000:9090: connect: connection refused.

Проверка интеграций с системой управления секретами#

Интеграция с SecMan. Успешный запуск VISL в OpenShift/DropApp(k8s). IGEG получает секреты из хранилища SecMan. Запуск основного модуля происходит только после получения секретов из хранилища. Эта проверка позволяет проверить интеграцию с SecMan.

Откат#

Откат продукта на одну из предыдущих версий (не позднее 3 по счету от текущей) происходит с помощью развертывания компонент из дистрибутива предыдущей версии, они затирают текущую инсталляцию. Откат продукта на предыдущую версию происходит с помощью развертывания YAML-файлов с предварительным удалением старой версии. Действия аналогичны обновлению, но в данном случае измененные YAML-файлы — это YAML-файлы предыдущей версии. Для отката на предыдущую версию при помощи helm выполните команду:

helm rollback <имя чарта, например, visl> 0

Часто встречающиеся проблемы и пути их устранения#

Проблема

Причина

Решения

Ошибка при подключении к проекту

Пользователю не предоставлен доступ в проект
Нет физического доступа к кластеру

Запросите доступ к проекту
Зарегистрируйте обращение в поддержку инфраструктуры для восстановления доступа

Ошибка при загрузке артефактов

У пользователя, под которым производится загрузка, отсутствуют необходимые права

Проверьте и скорректируйте настройку прав доступа пользователю

Ошибка при Pull docker-образа из репозитория

Отсутствуют права на Pull образа из репозитория

Запросите права

Ошибка при Pull docker-образа из репозитория

Недоступен репозиторий

Зарегистрируйте обращение в поддержку инфраструктуры для восстановления доступа

Ошибка при Pull docker-образа из репозитория

Неверная ссылка на image в deployment VISL

Проверьте ссылку, при необходимости скорректируйте деплоймент

Ошибка при входе в веб-интерфейс ERR_CONNECTION_CLOSED

Не создан OauthClient

Создайте OAuthClient

Ошибка при входе в веб-интерфейс Error trying to get OAuth metadata. Could not get Kiali route for OAuth redirect

Не созданы Role и RoleBinding visl

Создать Role и RoleBinding visl описанные выше в разделе «Установка» пункт «Манифесты необходимые для корректной работы».

Ошибка при входе в веб-интерфейс Error trying to get OAuth metadata. Could not get Kiali route for OAuth redirect

Не создан OauthClient, префикс в названии route не совпадает с префиксом в имени OauthClient

Проверьте, что имя Route и OAuthClient имеют одинаковый префикс, а также host в Route совпадает с redirectURIs в OAuthClient

При просмотре графа возникает ошибка Error loading Graph Cannot load the graph: configmaps "istio-basic" is forbidden: User "system:serviceaccount:visl" cannot get resource "configmaps" in API group "" in the namespace ""

У сервис аккаунта VISL не хватает прав

создать OAuthClient

При просмотре графа возникает ошибка Error loading Graph Cannot load the graph: Post http://service.namespace.svc:9091/api/v1/query: dial tcp 192.169.11.21:9091: connect: no route to host

Сервис для сбора метрик недоступен

Проверить запущен ли pod сервиса для сбора метрик, если запущен то нужно проверить корректность адреса по которому к нему идут запросы (адрес указан в configMap VISL external_services.prometheus.url).

Не отображается граф

В проекте нет трафика

Запустите трафик в проект, чтобы появились метрики на основе которых строится граф, через 30 секунд обновить страницу

Не отображается граф

Не настроен сбор метрик

Сервис для сбора метрик должен собирать метрики с pods istio-proxy. Если в проекте есть трафик, но граф пустой, нужно в сервисе для сбора метрик проверить их наличие (метрика istio_requests_total)

На графе не отображается ingress/egress

В deployment ingress/egress в блоке с env отсутствуют переменные ISTIO_META_

В деплоймент ingress/egress в блок с env добавить { name: ISTIO_META_WORKLOAD_NAME, value: имя_деплоймента} и { name: ISTIO_META_OWNER, value: kubernetes://apis/apps/v1/namespaces/текущий_неймспейс/deployments/имя_деплоймента }

Чек-лист валидации установки#

Проверки

Действия

Pod запущен

После выполнения пунктов из раздела «Установка» перейдите в проект и выбрать раздел Pods

Корректный статус pod

Убедитесь, что pod с VISL имеет статус Running

Корректная работа контейнеров pod

Убедитесь, что в столбце Ready отображаются все запущенные контейнеры

Отсутствие ошибок в логах

Проверьте во вкладке Logs для каждого pod, отсутствие ошибок в логе контейнеров pod

Настройка и проверка интеграции

Настройки для проверки описана выше в разделах «Настройка интеграции», «Проверка интеграций с компонентом POLM», «Проверка интеграций с сервисом для сбора метрик»

Проверка наличия и работоспособности Secret Management System

Определить наличие в развертываемом компоненте IGEG контейнера с именем vault.