Условно-закрытый контур

Условно-закрытый контур - интернет только на зеркале. Для инсталляции необходим дистрибутив и лицензия платформы Штурвал. Ссылку на скачивание версии stc, а также номер лицензии передает заказчику менеджер со стороны Штурвала.

Для инсталляции необходимо:

  1. Подготовить локальное зеркало репозиториев и реестра образов на хосте с доступом в интернет;
  2. Скачать stc нужной версии;
  3. Провести инсталляцию платформы с зеркала.

Обратите внимание! Запуск STC необходимо выполнять на рабочей машине (не на хосте кластера) с ОС Linux.

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

В версии Штурвала 2.7.0 появилось 2 варианта зеркала. Рекомендуется использование нового зеркала. В случае, если с его развертыванием возникли трудности, разверните старое зеркало.

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

Для установки зеркала вы должны иметь возможность выполнения sudo без пароля.

Вы также можете настроить sudo таким образом, чтобы только команды по вашему выбору могли выполняться без пароля. Для этого используйте команду:

sudo visudo	

Далее добавьте строку с описанием команд, для исполнения которых не будет требоваться пароль, например:

  • Для RHEL based систем(RedOS, Rosa, Oracle, Rocky): %wheel ALL=(ALL) NOPASSWD: ALL
  • Для DEB based(Astra, Ubuntu, Debian): %sudo ALL=(ALL) NOPASSWD: ALL
  • Для конкретного пользователя: username ALL=(ALL) NOPASSWD:ALL

Для создания локального зеркала репозиториев и реестра образов необходимо выполнить шаги:

  1. Скачать архив с пакетами и системными образами контейнеров;
  2. Развернуть локальное зеркало репозиториев и реестра образов;
  3. Запустить команду для скачивания бинарного файла

Новое зеркало

Команды выполняются с помощью утилиты stm (shturval mirror). Утилита входит в состав бандла. Также ее можно скачать по ссылке.

Команда Описание команды
init Инициализация зеркала. Генерация файлов конфигурации, сертификатов, ключей, развертывание Nexus и Nginx
start Запуск зеркала. Зеркало должно быть инициализировано
stop Остановка зеркала. Зеркало должно быть инициализировано и запущено
restart Перезапуск зеркала. Зеркало должно быть инициализировано и запущено
download Загрузка или обновление пакетов и образов. Зеркало должно быть инициализировано. (обязательный параметр --version - версия платформы для загрузки. Можно указать несколько версий через запятую)
make Инициализация зеркала и загрузка пакетов и образов из репозитория shturval. Совмещает команды init и download, а также их параметры (обязательные параметры --fqdn, --license, --version). Зеркало не должно быть инициализировано

Параметры для команды init:

Параметр Описание параметра
--fqdn Адрес, по которому будет доступно зеркало (обязательно). На это имя будут сгенерированы сертификаты
--license Лицензия (обязательно)
--cri-socket Сокет для подключения к cri - если не указан - скрипт будет пытаться искать сокет самостоятельно
--http-port Порт http. будет занят на хосте. - 80 по умолчанию
--https-port Порт https. будет занят на хосте - 443 по умолчанию
--registry-port Порт container registry - не будет занят на хосте (используется в контейнере Nexus) - 8082 по умолчанию
--data-dir Каталог данных Nexus. По умолчанию data
--nexus-container-name Имя контейнера Nexus по умолчанию shturval_mirror
--nginx-container-name Имя контейнера Nginx по умолчанию shturval_proxy
--shturval-repo Адрес репозитория Штурвал - по умолчанию r.shturval.tech
--public-repo Адрес публичного репозитория Штурвал - по умолчанию public.shturval.tech
--network-name Имя сети контейнеров - по умолчанию shturval-network
--subnet Подсеть сети контейнеров - по умолчанию 172.17.66.0/24
--cert-file Файл сертификата для импорта
--privkey-file Файл ключа для импорта

Примеры развертывания зеркала

Из репозитория Штурвал:

stm make --fqdn=mirror.ip-XX-XX-XXX-XX.shturval.link --license=XXXXXXXXXX --version=2.6.1

Пример обновления ранее развернутого зеркала

stm download --version=2.5.1,2.5.2

Установка сертификатов

Есть возможность импортировать свой сертификат на этапе инициализации зеркала (init, make, bundle make), на этапе развертывания nginx для внешнего nexus или отдельной командой.

Требование к сертификату

  1. Для импорта необходимо указать файл с цепочкой сертификатов и ключом.
  2. Сертификаты и ключ должны быть в pem формате.
  3. Цепочка сертификатов должна содержать CA и сам сертификат.
  4. Сертификат должен содержать поле subjectAltName с fqdn зеркала (fqdn должен совпадать с указанным параметром --fqdn или со значением в конфигурации зеркала)
  5. При подписании CSR необходимо сохранить Extensions (для openssl - ключ -copy_extensions copyall).

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

Команда Описание команды Параметр Описание параметра
cert import Импорт сертификата (приведет к перезапуску зеркала) --cert-file Файл сертификата для импорта
--privkey-file Файл ключа для импорта
cert csr Сформировать запрос на получение сертификата --fqdn Адрес, на который будет сгенерирован запрос

Примеры команд

Пример генерации csr, выпуска сертификата:

# Выпустить запрос на получение сертификата (csr и ключ будут находиться в каталоге export)
stm cert csr --fqdn=mirror.corpdomain.ru
# Выпустить сертификат, используя CSR и свой CA (пример для openssl)
openssl x509 -req -sha512  -in export/csr.pem -days 3650 -CA ca/ca_cert.pem \
-CAkey ca/ca_private_key.pem -CAcreateserial -out export/mirror_cert.pem -copy_extensions copyall
# Добавить к полученному сертификату свой CA
cat ca/ca_cert.pem >> export/mirror_cert.pem

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

# Если зеркало ещё не инициализировано
stm make --fqdn=mirror.corpdomain.ru --license=XXXXXXXXXX --version=2.8.0 \
--cert-file export/mirror_cert.pem --privkey-file export/privkey.pem
# Если зеркало уже инициализировано (приведет к перезапуску зеркала)
stm cert import --cert-file export/mirror_cert.pem --privkey-file export/privkey.pem

Загрузка образов во внешний Nexus

Команда Описание команды Параметр Описание параметра
external config генерация примера конфигурации
external sync загрузка пакетов и образов из репозитория Штурвал во внешний Nexus
external load загрузить содержимое бандла во внешний Nexus --path путь до каталога с бандлом. По умолчанию shturval-bundle
external nginx развертывание Nginx для проксирования запросов во внешний Nexus --fqdn Адрес, по которому будет доступно зеркало (обязательно). На это имя будут сгенерированы сертификаты
--http-port Порт http. будет занят на хосте. - 80 по умолчанию
--https-port Порт https. будет занят на хосте - 443 по умолчанию
--cert-file Файл сертификата для импорта
--privkey-file Файл ключа для импорта

Подготовка внешнего Nexus

На Nexus необходимо создать требуемые hosted репозитории:

  • Репозитории, обязательные для всех инсталляций - форматы raw, helm, docker
    • Docker репозиторий должен иметь коннектор (выделенный порт)
  • Для apt дистрибутивов обязателен hosted apt репозиторий, названный в конфиге “deb_universal”
    • Для apt репозиториев distribution должен быть main
    • Для apt репозиториев должна быть сгенерирована пара gpg ключей. Приватный ключ должен быть использован при создании репозитория, публичный должен быть загружен в корень raw репозитория под именем shturval.gpg
  • Для yum дистрибутивов обязателен hosted yum репозиторий, названый в конфиге “rpm_universal”
    • Для yum репозитория Repodata Depth должна быть установлена в 0
  • Также необходим yum или apt репозиторий для дистрибутива
  • Например, для дистрибутива redos нужен helm, raw, docker и 2 yum репозитория, для дистрибутива astra - helm, raw, docker и 2 apt репозитория.

Имена репозиториев могут быть любыми. Соответствие имён будет установлено в файле конфигурации.

На хосте, имеющем доступ сгенерировать пример конфигурации:

stm external config

Полученный файл config/external-config-example.yaml нужно скопировать как config/external-config.yaml и заполнить в соответствии со своими данными. Соответствие имён репозиториев заполняется как “ключ”: “значение”, где в значении указываются имена созданных репозиториев (ключи менять не следует). Например, если для raw репозитория был создан репозиторий с именем “raw_repo”, в конфигурации запись должна выглядеть так : bin_public: “raw_repo”.

Запуск синхронизации из репозитория shturval

stm external sync

Развертывание Nginx для проксирование запросов к внешнему Nexus

stm external nginx --fqdn=mirror.example.ru

Старое зеркало

wget URL -O stc

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

Скачивание архива с пакетами и системными образами контейнеров

Для скачивания используйте команду: ./stc mirror download --license [string]

Параметры команды:

Параметр Описание
--destination Каталог для записи файла архива.
--license Лицензионный ключ для загрузки образа
--source Адрес исходного реестра. Значение по умолчанию: Репозиторий с архивом образов для скачивания

Глобальная команда:

Параметр Описание
-h, --help Справка о команде

Развертывание локального зеркала репозиториев и реестра образов

Параметры команды:

Параметр Описание
--address [string] Адрес реестра образов и репозиториев пакетов FQDN (Обязательное)
--container-name [string] Имя контейнера реестра. Значение по умолчанию – sht_offline_installer
--container-port [string] Порт контейнера реестра. Значение по умолчанию – 443
--license [string] Лицензионный ключ для загрузки образа (Обязательное)
--dist-dir [string] Каталог с архивом пакетов и образов контейнеров.
--install-dir [string] Каталог для инсталляции реестра. Значение по умолчанию – /opt/shturval
--local Признак развертывания реестра на локальном хосте. Значение по умолчанию – false
--ssh-private-key [string] Путь к файлу приватного ключа SSH для подключения к хосту реестра
--ssh-user [string] Имя пользователя для подключения по SSH к хосту реестра

Если не указан ключ --local, нужно обязательно указать --ssh-private-key [string] и --ssh-user [string] .

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

./stc mirror install --local --license [string] --address [string]

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

./stc mirror install  --license [string] --address [string] --ssh-private-key [string] --ssh-user [string]

В качестве адреса укажите имя, для которого будут сгенерированы SSL сертификаты.

Обновление локального репозитория

В случае, если у вас уже есть установленное зеркало и требуется его обновить, запустите на выполнение следующую команду:

./update_repos.sh [options]

Параметры этой команды [options]:

Параметр Описание
--license Лицензионный ключ (обязательный)
--versions Список доступных версий в r.shturval.tech
--version Обновление репозитория на определенную версию. (обязательный параметр)

Установка сертификатов

Требование к сертификату

  1. Для импорта необходимо указать файл с цепочкой сертификатов и ключом.
  2. Сертификаты и ключ должны быть в pem формате.
  3. Цепочка сертификатов должна содержать CA и сам сертификат.
  4. Сертификат должен содержать поле subjectAltName с fqdn зеркала (fqdn должен совпадать с указанным параметром --fqdn или со значением в конфигурации зеркала)
  5. При подписании CSR необходимо сохранить Extensions (для openssl - ключ -copy_extensions copyall).

Размещение сертификатов

Подготовленный сертификат необходимо разместить по пути: certs/shturval_offline_installer_chain.pem

Подготовленный ключ необходимо разместить по пути: certs/shturval_offline_installer.key

Установка кластера управления

Запустите команду для скачивания бинарного файла:

wget URL -O stc

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

Параметры команды

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

Параметр Описание
-h, --help Справка о команде

Пример:

./stc install management --help

Глобальные:

Наименование параметра Описание
--debug Выводить в лог всю информацию об ошибках (по умолчанию false)
--dry-run Проверка конфигурации. Установка службы shturvald на узлы будущего кластера. (по умолчанию false)
--force Удалять без подтверждения
--quiet Выключить stdout. Только код выхода
--ssh-private-key string Путь к файлу приватного ключа SSH
--ssh-user string Имя пользователя для подключения по SSH
--workdir string Рабочая директория кластера (для файлов конфигурации, логов и пр.)

Параметры инсталляции:

Параметр Описание
--api-endpoint [string] Адрес API управления кластером
--cluster-name [string] Имя кластера
--ha-type [string] Тип доступности кластера: single (одноузловой) или ha (высокодоступный)
--ingress [string] Wildcard DNS-запись для ingress в формате apps.corporate.domain
--ingress-vip [string] VIP адрес для ingress контроллера
--interactive Признак интерактивного режима. Значение по умолчанию – false
--license [string] Лицензионный ключ для загрузки пакетов
--monitoring-endpoint [string] Адрес кластера мониторинга для отправки системных метрик
--ntp-servers [string] Список серверов синхронизации времени (через запятую)
--registry [string] Адрес реестра образов и репозиториев пакетов. Значение по умолчанию – r.shturval.tech
--secure Признак установки дополнительных параметров безопасности. Значение по умолчанию – false
--timezone [string] Часовой пояс. Значение по умолчанию – Europe/Moscow
--skip-check Пропустить проверку хостов перед инсталляцией (по умолчанию false)
--use-external-ingress-lb Использовать внешний балансировщик для Ingress контроллера (по умолчанию false)
--use-external-kubeapi-lb Использовать внешний балансировщик кластерного IP (по умолчанию false)
--ca-cert Путь до промежуточного сертификата (“pem” файла), который может быть использован в дальнейшем для подписания других сертификатов
--ca-key Путь до закрытого ключа промежуточного сертификата CA
--ingress-cert Путь до корпоративного сертификата(“pem” файла), который был выпущен CA(в этом случае в файле будет цепочка сертификатов) или самоподписан для доменного имени Ingress
--ingress-key Путь до закрытого ключа корпоративного сертификата Ingress
--pod-subnet Подсеть подов
-service-subnet Подсеть сервисов

Обратите внимание! Диапазон подсетей может быть изменен в соответствии с вашими потребностями. Подсети подов и сервисов располагаются в общем overlay network кластера. Подсеть подов и сервисов разворачивается только внутри кластера и не пересекается с другими кластерами и вашей корпоративной сетью. Фактически, даже если подсеть подов/сервисов совпадает с вашей корпоративной, то доступа у подов к сервисам вне кластера не будет.

При использовании корпоративного зеркала корневой сертификат зеркала должен быть прописан в доверенные на все ВМ и шаблоны.

Генерация ключевой пары

Для пользователя, под которым платформа будет устанавливаться (—ssh-user) необходимо передать открытую часть ключа командой ssh-copy-id на хосты будущей платформы

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

# генерируем ключевую пару
ssh-keygen -t ed25519 -f shturval
# копируем открытую часть на машину
ssh-copy-id -i shturval.pub ssh-user@IP

Режимы инсталляции

Интерактивный режим инсталляции

Запустите инсталляцию с помощью команды:

./stc install management --interactive

Введите данные в соответствии с подсказками, которые отобразятся на экране.

Пример процесса инсталляции в интерактивном режиме для высокодоступного кластера с тремя Master-узлами и двумя Worker-узлами:

Введите название кластера: test-cluster
Введите имя пользователя для доступа к узлам кластера:
%имя_пользователя%
Use the arrow keys to navigate: ↓ ↑ → ←
? Выберите ssh-ключ для подключения к узлам кластера
пользователя %имя_пользователя%:
  ▸ id_rsa
    указать другой путь к файлу
Use the arrow keys to navigate: ↓ ↑ → ←
? Выберите конфигурацию кластера:
    Одноузловой
  ▸ Высокодоступный
Введите адрес для узла master номер 1: master1
Введите адрес для узла master номер 2: master2
Введите адрес для узла master номер 3: master3

Введите адрес API кластера: xx.xxx.x.xxx
(указывается только для высокодоступной конфигурации)
Введите количество рабочих узлов кластера: x
Введите адрес для узла worker номер 1: xxx-xx
Use the arrow keys to navigate: ↓ ↑ → ←
? Использовать внешний балансировщик для Ingress контроллера:
  ▸ Да
    Нет
Введите VIP адрес для Ingress контроллера: xx.xxx.x.xxx
Use the arrow keys to navigate: ↓ ↑ → ←
? Автоматически сгенерировать DNS имя для Ingress контроллера:
  ▸ Да
    Нет
Введите виртуальный IP (VIP) для ingress: xx.xxx.x.xxx

В процессе инсталляции будет отображаться следующая информация:

Выполняется подготовка узлов для установки кластера.
Это может занять несколько минут.
Инициализация подсистемы управления кластера
Добавление Worker-узлов в кластер
Установка системных компонентов кластера
Статус установки системных компонентов:
kube-prometheus-crds : Успешно
cilium : Успешно
ingress-nginx : Успешно
Кластер успешно развернут
Для подключения используйте ключ
/%путь_до_конфигурационного файла%/clusteradmin.confclusteradmin.conf

Если инсталляция завершилась с ошибками, информация о них отобразится в логе.

Тихий режим инсталляции

./stc install management --cluster-name=test-cluster --license=$SHTURVAL_LICENSE \
--ssh-user=%имя_пользователя% --ssh-private-key=%путь к файлу с ключом%  --ha-type=ha \
--master-nodes=master1,master2,master3 --worker-nodes=worker1,worker2 --ingress-vip=[string] \
--ca-cert=./cert.pem  --ca-key=./key.pem

Пример:

./stc install management --license="qwe123asd" --registry=corp.domain.local:443 --use-external-ingress-lb=true --api-endpoint=api.corp.domain.local --cluster-name=management --ha-type=ha --ingress=apps.corp.domain.local --master-nodes=10.0.0.3,10.0.0.4,10.0.0.56 --worker-nodes=10.0.0.11,10.0.0.12,10.0.0.13 --ssh-user=shturval --ssh-private-key=/home/shturval/.ssh/id_rsa --use-external-ingress-lb=true --pod-subnet=100.80.0.0/16 --service-subnet=100.64.0.0/12 --secure=true --skip-check --debug --ca-cert=./cert.pem  --ca-key=./key.pem

Если какой-либо параметр указан неверно:

  • инсталляция остановится;
  • отобразится сообщение с указанием ошибки и некорректного параметра;
  • процесс остановится.

В этом случае устраните ошибку и перезапустите процесс развертывания.

Смешанный режим инсталляции

В смешанном режиме пропишите в команде признак --interactive и добавьте необходимые параметры. Остальные необходимые для инсталляции параметры система запросит в режиме диалога.

Пример запуска установки кластера управления в смешанном режиме:

./stc install management  --interactive --license=$SHTURVAL_LICENSE \
--ntp-servers=0.ru.pool.ntp.org,1.ru.pool.ntp.org \
--disabled-system-services=shturval-cd,shturval-rollouts,shturval-policy-manager,shturval-scanner,shturval-policies

Если инсталляция завершилась с ошибками, информация о них отобразится в логе.

Полезная информация

Установка сервисов в процессе инсталляции

  • Чтобы использовать системный Ingress-controller (Virtual IP) при инсталляции используйте параметр --ingress-vip. Пропишите свободный IP-адрес. Технические сервисы будут преконфигурированы при инсталляции.
  • Если у вас есть Wildcard-запись и вы хотите использовать системный Ingress-controller (Virtual IP) при инсталляции используйте параметры --ingress-vip и --ingress. При этом IP-адрес имени хоста ingress должен совпадать с IP-адресом, указанным в ingress-vip.
  • Если у вас есть Wildcard-запись и вы хотите использовать внешний Ingress-controller при инсталляции используйте параметры --ingress и --use-external-ingress-lb со значением true. При инсталляции будут выведены подсказки по конфигурации на примере HAProxy. В таком случае вам необходимо самостоятельно создать Load balancer и распределить трафик на Worker-узлы.

Для управления в процессе инсталляции необходимо использовать названия чартов сервисов. Список доступных для управления сервисов:

Название чарта Название в графическом интерфейсе
shturval-descheduler Модуль распределения нагрузки узлов
shturval-log-operator Модуль локального сбора логов
shturval-logs-operator Модуль хранения логов
shturval-dashboards Модуль графического отображения метрик
shturval-metrics Модуль локального сбора метрик
shturval-local-csi Модуль локального хранения
shturval-node-config Модуль управления конфигурациями узлов
shturval-cluster-roles Кластерные роли Платформы
shturval-services Модуль управления системными и корпоративными сервисами
shturval-backup Модуль резервного копирования и восстановления
shturval-scanner Модуль сканирования образов контейнеров
shturval-rollouts Модуль управления развертыванием прикладных сервисов
shturval-policy-manager Модуль анализа конфигураций приложений
shturval-cd Модуль непрерывной доставки приложений
shturval-cert-manager Модуль управления TLS-сертификатами
shturval-cert-expiration Модуль проверки сертификатов API Kubernetes
shturval-networking Модуль управления сетями кластера
shturval-caching-dns Модуль управления локальным DNS
shturval-vip Модуль управления виртуальными IP-адресами
shturval-ingress-controller Модуль управления внешними подключениями (Ingress)
shturval-update Модуль обновления кластера

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

Troubleshooting

Если установка происходит в закрытом контуре (без доступа к сети Интернет) на Red OS и была произведена ручная модификация файлов /etc/yum.repos.d/RedOS-*.repo (например baseurl изменён на адрес прокси репозитория или зеркала):

На всех нодах кластера необходимо:

  • Установить пакет python3-dnf-plugin-versionlock
  • Поставить versionlock на пакет redos-release
  • Определить тип установки дистрибутива (minimal, server, desktop). Тип установки можно посмотреть в файле /etc/redos-release. Также можно посмотреть наличие пакетов redos-release-minimal, redos-release-server или redos-release-desktop
  • Поставить versionlock, на соответветствующей установке дистрибутива пакет (redos-release-minimal, redos-release-server, redos-release-desktop).

Пример для minimal инсталляции:

 yum install python3-dnf-plugin-versionlock
 yum versionlock add redos-release redos-release-minimal

Дополнительные рекомендации

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

Рекомендуем сразу после завершения установки настроить ротацию логов. Отсутствие ротации логов может привести к стремительному заполнению диска и замедлению работы системы.

Рекомендуем всегда прописывать ntp-серверы и указывать сервисы, которые не нужно включать по умолчанию:

--ntp-servers - укажите корпоративные или 0.ru.pool.ntp.org, 1.ru.pool.ntp.org
--disabled-system-services - укажите, какие сервисы не нужно включать по умолчанию

Рекомендуем использовать внешний балансировщик для кластера управления в промышленной (продуктивной) среде.

Как изменить пароль администратора

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

Чтобы сменить пароль администратора по умолчанию, перейдите в установленный сервис “Модуль программного управления платформой Штурвал” (shturval-backend) кластера управления. В спецификации сервиса найдите параметр: static_password и обновите его значение.