Установка 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