Руководство по системному администрированию#

Термины и сокращения#

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

Определение

Под/pod

Абстрактный объект Kubernetes, представляющий собой группу из одного или нескольких контейнеров приложения и совместно используемых ресурсов для этих контейнеров

Deployment

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

OpenShift

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

MPSM

MarketPlace Service Mesh

YAML

Язык сериализация разметки

Kubernetes

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

Helm

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

OIDC

OpenID Connect - протокол аутентификации

Общие положения при администрировании компонента#

  1. Администрирование приложения происходит в Kubernetes-кластере.

  2. Администратор должен следить за истечением срока годности сертификатов и своевременно обновлять их.

  3. Для развертывания компонента MPSM в Kubernetes администратору необходимы права на чтение и запись всех используемых шаблонов, а также возможность читать логи pods.

  4. Сетевая безопасность обеспечивается средствами компонента POLM и возлагается на администраторов АС, использующих компонент MPSM.

Администратор осуществляет:

  • Отслеживание срока годности сертификатов и их обновление;

  • Обновление client secret для взаимодействия с OIDC-провайдером;

  • Обеспечение сетевой безопасности при использовании компонента;

  • Отслеживание работоспособности.

Сценарии администрирования#

MPSM не имеет собственного пользовательского интерфейса для администрирования. Все действия по управлению им производятся с использованием интерфейсов, предоставляемых Платформой Kubernetes. Специальных механизмов безопасности относящихся к сценариям администрирования и рекомендации по их настройке не предусмотрено. Ниже приведены возможные сценарии администрирования с использованием консоли клиента Kubernetes (kubectl) и менеджера пакетов Helm.

Предусловие: Для работы утилиты kubectl необходим файл конфигурации кластера kubeconfig, в котором прописаны реквизиты подключения к кластеру. Файл генерируется при создании кластера.

На рабочей станции администратора файл размещается в каталоге ~/.kube и имеет название config.

Загрузка конфигураций#

Конфигурация осуществляется путем редактирование файла параметров Helm-чарта (values.yaml).

Запуск#

После установки MPSM, все поды должны запуститься автоматически. Если же этого не произошло или по каким-либо причинам необходим ручной запуск подов, то ниже приведены последовательности действий для запуска.

С использованием веб-интерфейса Kubernetes#

Шаг

Действие

Аутентификация в веб-консоли Kubernetes

1. Перейдите по ссылке веб-консоли нужного кластера Kubernetes
2. В окне ввода учетных данных введите логин и пароль

Переход в нужный namespace

1. Выберите слева пункт namespace
2. Выберите нужный namespace из открывшегося списка

Запуск пода

1. Выберите пункт меню Workload/Deployments
2. На странице найдите нужный Deployment (можно использовать поиск по имени)
3.Нажмите ⋮ и выберите Scale
4. Увеличьте количество подов до 1 и нажмите Scale

Выход из веб-консоли Kubernetes

1. Нажмите на имя пользователя
2. В меню пользователя выберите пункт Log out

  • Через CLI kubernetes (kubectl).

Шаг

Действия

Описание

Вход в kubernetes

Загрузите «kubeConfig» от вашего «ServiceAccount». Заведите переменную KUBECONFIG=~/.kube/config где располагается выгруженная конфигурация.

Переход в нужный «Namespace»

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

Запуск приложения

В консоли выполните команду:
kubectl scale --replicas=<N> deployment/<имя деплоймента>

N>0 — требуемое количество запущенных Pods приложения

Остановка#

  • С использованием web-интерфейса Kubernetes.

Шаг

Действие

Логин в web-консоль Kubernetes

Перейти по ссылке (URL) web-консоли нужного кластера Kubernetes, в окне ввода учетных данных ввести токен пользователя или «kubeconfig».

Переход в нужный проект

Выбрать нужный проект можно в выпадающем списке в шапке web-интерфейса Kubernetes.

Остановка компонента

Выполнить следующие действия:
1. В меню выбрать пункт Workload/Deployments ;
2. На странице найти нужный Deployment (при необходимости воспользоваться поиском по имени);
3. Нажать ⋮ и выбрать Scale.
4. Уменьшить количество Pods до 0 и нажать Scale.

Выход из web-консоли Kubernetes

Выполнить следующие действия:
1. Кликом по иконке пользователя раскрыть меню;
2. Выбрать пункт Sign out ;
3. Закрыть окно браузера.

  • Через CLI kubernetes (kubectl).

Шаг

Действия

Авторизация в Kubernetes

Загрузите «kubeConfig» от вашего «ServiceAccount». Заведите переменную KUBECONFIG=~/.kube/config где располагается выгруженная конфигурация.

Переход в нужный «Namespace»

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

Остановка приложения

В консоли выполнить команду:
kubectl scale --replicas=0 deployment/<имя deployment>

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

Шаг

Действие

Вход в пользовательский интерфейс

В браузере перейти по ссылки для пользовательского интерфейса.

Вход с помощью OIDC

Выбрать способ входа "OIDC", во всплывающем окне ввести логин и пароль. После входа в боковом меню нажать на вкладку Settings и проверить, что имя и email определены правильно.

Переход в каталог

В боковом меню нажать на вкладку Home, при этом должна отобразиться страница с пустой таблицей без сообщений об ошибках.

Изменение количества Pods#

  • С использованием web-интерфейса Kubernetes.

Шаг

Действие

Вход в web-консоль Kubernetes

Перейти по ссылке (URL) web-консоли нужного кластера Kubernetes, в окне ввода учетных данных ввести токен пользователя или «kubeconfig»

Переход в нужный проект

Выбрать нужный проект можно в выпадающем списке в шапке web-интерфейса Kubernetes

Запуск Pod

1. В меню выберите пункт Workload/Deployments.
2. На странице найдите нужный Deployment (можно использовать поиск по имени).
3. Нажать ⋮ и выбрать Scale ;
4. Задать нужное количество Pods и нажать Scale

Выход из web-консоли Kubernetes

1. Нажмите по имени пользователя, чтобы раскрыть меню учетной записи.
2. Выберите пункт Log out.
3. Закройте окно браузера

  • Через CLI kubernetes (kubectl).

Шаг

Действия

Описание

Увеличить/уменьшить количество Pods

В консоли выполнить команду: kubectl scale --replicas=<N> deployment/<имя деплоймента>

Выгрузка и просмотр системных логов Pods#

  • С использованием web-интерфейса Kubernetes.

Шаг

Действие

Вход в web-консоль Kubernetes

Перейдите по ссылке (URL) web-консоли нужного кластера Kubernetes, в окне ввода учетных данных введите токен пользователя или kubeconfig

Переход в нужный проект

Выберите нужный проект можно в выпадающем списке в шапке web-интерфейса Kubernetes

Выгрузить лог

1. В меню выберите пункт Workload/Pods.
2. На странице найдите нужный Pod (можно использовать поиск по имени).
3. Нажмите ⋮ и выберите Logs ;
4. Задайте в верхней панели имя контейнера (Logs from <имя контейнера> in <имя Pod>)

Выход из web-консоли Kubernetes

1. Выберите имя пользователя, чтобы раскрыть меню учетной записи.
2. Выберите пункт Log out.
3. Закройте окно браузера

  • Через CLI kubernetes (kubectl).

Шаг

Действия

Выгрузить лог

В консоли выполнить команду: kubectl logs -c <имя контейнера> <имя Pod> > <имя файла>.txt, где <имя контейнера> может быть названием контейнера приложения шлюза или контейнера.

Обновление сертификатов#

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

См. документ Руководство по установке:

  • для Ingress Gateway: разделы "Подготовка сертификатов для Ingress Gateway" и "Настройка подключения сертификатов к Ingress Gateway";

  • для Egress Gateway: разделы "Подготовка сертификатов для Egress Gateway" и "Настройка подключения сертификатов к Egress Gateway".

Обновление client secret для взаимодействия с OIDC-провайдером#

См. документ Руководство по установке, разделы "Подготовка при аутентификации по протоколу OIDC" и "Настройка аутентификации по протоколу OIDC".

События системного журнала#

Системный лог выводится в консоль контейнера приложения. Не предусмотренно изменение уровня логирования.

Примеры более важных error-событий см. в разделе "Пример вывода логов".

События мониторинга#

Компонент не создает события мониторинга.

Пример вывода логов#

  • Формат лога: 1970-01-01T00:00:00.000Z <тема> <приоритет> <сообщение>

  • Обрабатывается элемент каталога:

2023-02-03T11:00:57.314Z catalog debug Processing domain:default/synapse-platform type=plugin
  • Успешная аутентификация через OIDC:

2023-03-29T06:52:00.948Z auth info Issuing token for user:auth-keycloak-oidc/username@example.com, with entities user:auth-keycloak-oidc/username@example.com, group:auth-keycloak-oidc/admins type=plugin component=token-factory
  • Предупреждение (недоступна аутентификация через Keycloak из-за некорректных настроек):

2023-04-27T11:04:21.245Z auth warn Skipping keycloak-oidc auth provider, Invalid type in config for key 'auth.providers.keycloak-oidc.development.clientId' in 'app-config.yaml', got empty-string, wanted string type=plugin
  • Ошибка в readiness probe (объект не найден в каталоге):

2023-04-27T10:50:11.081Z backstage error Entity not found type=errorHandler stack=Error: Entity not found
2023-04-27T10:50:11.081Z backstage info ::ffff:127.0.0.1 - - [27/Apr/2023:10:50:11 +0000] "GET /healthcheck/readiness/entityRef HTTP/1.1" 500 460 "-" "curl/7.86.0" type=incomingRequest
  • Ошибка в readiness probe (при установке указан некорректный entity ref):

2023-04-27T10:48:00.294Z backstage error Entity reference "nx" had missing or empty kind (e.g. did not start with "component:" or similar) type=errorHandler stack=Error: Entity reference "nx" had missing or empty kind (e.g. did not start with "component:" or similar)
  • Фатальная ошибка (некорректно указан URL Keycloak):

node:internal/process/promises:265
            triggerUncaughtException(err, true /* fromPromise */);
            ^

Error: getaddrinfo ENOTFOUND keycloak.nxdomain.local
    at GetAddrInfoReqWrap.onlookup [as oncomplete] (node:dns:71:26) {
  errno: -3008,
  code: 'ENOTFOUND',
  syscall: 'getaddrinfo',
  hostname: 'keycloak.nxdomain.local'
}

События мониторинга#

Компонент не предполагает собственной интеграции с системой мониторинга.

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

Проблема

Причина

Решение

На шаге установки шаблона / при разворачивании интеграции из LowCode отображается ошибка "Unexpected exit result: code null, signal SIGKILL"

Недостаточно ресурсов, возможна утечка памяти

Перезапустить контейнер mpsm-backend

Не стартует Pod приложения

Недостаточно ресурсов

Увеличить limits/requests для приложения

Не стартует Pod приложения

Нет доступной node для запуска

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

Не стартует Pod приложения

Ошибка в конфигурации

Выгрузить лог, провести анализ, скорректировать конфигурацию

Частый перезапуск контейнера приложения

Медленная загрузка приложения

Увеличить задержку и/или интервал опроса Liveness пробы

Частый перезапуск контейнера приложения

Недостаточно ресурсов

Увеличить limits/requests для приложения