Helm

Установка Helm: #

Если у Вас не установлен Helm, то установить его можно воспользовавшись инструкцией: https://helm.sh/docs/intro/install/

Приложение может быть установлено версией Helm начиная от v3+.

Добавление репозитория Helm и первоначальная подготовка Kubernetes кластера: #

Helm chart настраивается с помощью конфигурационного файла values.yaml, который состоит из:

  • Redis
  • Глобальных настроек (global)
  • Настроек модулей

Подробно про конфигурирование values.yaml описано далее

Для установки приложения необходимо добавить Helm репозиторий, авторизовавшись при полученном ранее логине и пароле (Подробнее про Helm repo: https://helm.sh/docs/helm/helm_repo_add/):

helm repo add nextphone https://hub.nextsoftware.ru/chartrepo/nextphone --username user --password password 

Затем необходимо выполнить обновление репозиториев Helm с помощью команды:

helm repo update

Создайте namespace, в который будет производиться установка NextPhone:

kubectl create ns nextphone

Так как образы контейнеров Docker хранятся в приватном репозитории, их использование можеть быть осуществлено только авторизованным пользователям.

Для этого в Kubernetes используется imagePullSecrets.

Чтобы создать imagePullSecrets выполните команду:

kubectl -n nextphone create secret docker-registry nextphone --docker-server=hub.nextsoftware.ru --docker-username=user --docker-password=pa$$w0rd

⚠️ Примечание

При создании Secrets используйте учетные данные, использованные на шаге добавления Helm репозитория

На этом подготовка Kubernetes клестера к установке Helm чарта окончена. Ниже описан процесс конфигурирования чарта.

Получение values.yaml: #

Для получения файла конфигурации Helm - values.yaml необходимо выполнить:

helm pull nextphone/nextphone --untar --version 1.0.0

После чего перейти в директорию с чартом и открыть на редактирование файл values.yaml

cd nextphone && vim values.yaml

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

Конфигурация values.yaml #

Как было указано ранее, файл values.yaml состоит из нескольких разделов:

  • redis
  • глобальныe настройки (global)
  • настройки модулей (services)

Блок redis позволяет установить chart Redis от Bitnami.

Установка будет произведена, если в параметрах redis указан флаг - enabled: true

В противном случае будут использован параметр настроек externalredis из раздела global.

Опционально использовать подключение к системе хранения данных посредством StorageClass (SC) для сохранения состояния Redis после его перезагрузки или аварийного завершения работы.

Также необходимо задать пароль, который будет использован модулями для работы с Redis.

В приведенном ниже примере показана настройка блока Redis для его установки в Kubernetes кластер и использованием пароля и хранилища данных nfs и размером выделяемого места 2Gb (Полная конфигурация Redis: https://artifacthub.io/packages/helm/bitnami/redis).

redis:
  enabled: true
  global:
    storageClass: "nfs"
    redis:
      password: "bx1Rc5XA"
  architecture: standalone
  networkPolicy:
    enabled: false
  master:
    persistence:
      enabled: true
      size: 2Gi

В разделе global values.yaml файла необходимо сконфигурировать параметры, которые будут совместно использоваться всеми модулями приложения.

Пояснение к параметрам:

  • env: production - задает окружение приложения ( доступны 3 режима использования: production, development, test. По умолчанию production )
  • debug: false - включает или отключает режим отладки (По умолчачнию - false)
  • log: json - формат логов (По умолчанию - json)
  • crypter key - ключ для шифрования данных в приложении. Генерируется с помощью выполнения команды:
openssl rand -hex 32
  • databases - содержит параметры для подключения к Postgresql, а именно:
    • host
    • port
    • user
    • password
    • database
    • schema

Данные параметры зависят от настроек Вашей инсталляции Postgresql.

Необходимо внести соответствующие значения в данный блок.

Блок Asterisk состоит из параметров:

  • host
  • ports
    • http
    • jssip_port
  • ari
    • user
    • password
  • ami
    • user
    • password
    • port
  • ssh:
    • user
    • port
    • key

⚠️ Примечание

ssh key представляет собой private ssh key хоста, на котором установлен Asterisk в формате base64

Подробнее про используемые параметры Asterisk описано в разделе Asterisk

Блок stun задает подключение к coturn серверу для работы трафика через NAT.

Содержит такие параметры как:

  • host
  • port

⚠️ Примечание

Нерекоммендуется использоваться общедоступные coturn сервера. При их использовании корректная работоспособность ПО не может быть гарантирована.

Блок ldap задает параметры подключения к Active Directory.

Необходимо указать следующие параметры:

  • servers (LDAPS на данный момент не поддерживается, только LDAP)
  • domains - домен, в котором работает LDAP сервер
  • login - логин пользователя в правами на просмотр пользователей
  • password - пароль пользователя

ingressClassName - задает параметр, который используется для указания типа ingress контроллера (По умолчанию - nginx).

tracers - включает или отключает трассировку приложений. По умолчанию - false

Включается установкой параметра true в пункт enable

⚠️ Примечание

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

Пример:

tracers:
  enable: true
  jaeger:
    http:
      host: http://jaeger.example.ru:14268/api/traces

externalredis - используется, если сабчарт redis не будет установлен ( redis enabled: false).

imagePullSecrets - задает kubernetes secret, созданный этапе первоначальной подготовки кластера.

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

Для сервисов:

  • aep
  • awa
  • fep
  • fwa
  • frontend-client
  • frontend-gateway
  • queue-viewer
  • queue-viewer-data-provider
  • vnc
  • guacamole
  • auth-manager
  • licence-service

Необходимо сконфигурировать желаемое доменное имя и tls сертификат в блоке ingress (Ingress документация: https://kubernetes.io/docs/concepts/services-networking/ingress/)

В зависимости от Вашей конфигурации Kubernetes кластера, tls сертификат можеть быть задан явно, либо выпущен посредствам cert-manager (при наличии)

Для использования cert-manager в каждом блоке ingress указанных выше приложений предусмотрено поле annotations, с помощью которого можно внести необходимые параметры (Документация cert-manager: https://cert-manager.io/docs/tutorials/acme/nginx-ingress/)

Пример указания доменного имени и выпуска сертификата с помощью letsencrypt

ingress:
  annotations:
    cert-manager.io/cluster-issuer: "letsencrypt-production"
    kubernetes.io/tls-acme: "true"
  labels: {}
  
  hosts:
    - app.nextsoftware.ru
  tls:
   - secretName: app-tls
     hosts:
       - app.nextsoftware.ru

⚠️ Примечание

При создании приложения был использовал Nginx Ingress Controller. Аннотации, указанные в блоке Ingress перечисленных выше приложений должны соответствовать аналогичным при использовании иного Ingress контроллера.

В параметрах каждого модуля находится пункт - pullPolicy

pullPolicy - imagepullPolicy Политика определяет поведение kubelet при создании/пересоздании пода (По умолчанию: IfNotPresent).

Дополнительные настройки для модулей #

guacamole - нуждается в отдельной базе данных. Задаются следущие параметры:

  • database
  • user
  • password

Помимо базы данных необходимо указать LDAP filter для группы пользователей, у которых будет доступ уровня admin к API микросервиса.

auth-manager - необходимо заполнить следущие поля:

  • access_token
  • refresh_token
  • crypter_key

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

openssl rand -hex 32

licence-service - необходимо задать параметры хранилища для долговременного хранения данных о количестве пользователей и лицензий, а так же указать лицензионный ключ в поле: aes_key.

Так же необходимо разместить лицензионный ключ в директории certificates Helm чарта

⚠️ Примечание

контроллер Kubernetes типа Deployments не поддерживает динамическое создание томов хранилища (pvc template). Необходимо вручную сконфигурировать парамерты хранилища в блоке persistence, а именно:

  • enabled
  • storageClassName
  • accessModes
  • size

Данные параметры зависят от установленного в Вашем Kubernetes кластере провайдера хранилища (Документация о PV: https://kubernetes.io/docs/concepts/storage/persistent-volumes/ )

Пример хранилища размером 1 Гб, которое использует StorageClass - nfs с режимом доступа - ReadWriteOnce

type: pvc
enabled: true
storageClassName: nfs
accessModes:
   - ReadWriteOnce
size: 1Gi

Установка Helm chart: #

После внесений изменений в файл values.yaml можно приступить к установке Helm чарта в Kubernetes кластер.

Сделать это можно выполнив команду:

helm install nextphone ./ -f ./values.yaml -n nextphone 

После установки в консоли отобразятся параметры для подключения к NextPhone