Перейти к содержанию

Обзор развертывания KVM с веб-управлением через Cockpit на сервере

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

Для развертывания требуется сервер Linux с операционной системой Ubuntu и правами root. Система должна иметь доступ в Интернет для загрузки пакетов и получения SSL-сертификатов. В процессе развертывания устанавливаются и настраиваются следующие компоненты:

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

  • Права доступа: Для установки и настройки требуются права root.

  • Домен: Сервер должен быть доступен в зоне hostkey.in.

  • Порты: Порты 80 и 443 должны быть свободны для валидации Let's Encrypt и передачи трафика HTTPS.

  • Сервисы: Сервисы libvirtd и cockpit.socket должны быть включены и запущены.

FQDN конечной панели

Полное доменное имя (FQDN) для доступа к веб-интерфейсу управления KVM имеет следующий формат:

kvm<Server ID>.hostkey.in

Система автоматически настраивает имя хоста и обновляет файл /etc/hosts для разрешения этого FQDN на адрес 127.0.1.1.

Структура файлов и каталогов

Для хранения конфигурации, данных и сертификатов развертывание использует следующие каталоги:

  • /etc/cockpit/ws-certs.d/: Хранит SSL-сертификат и закрытый ключ для Cockpit.

  • /etc/letsencrypt/live/<fqdn>/: Содержит файлы сертификатов Let's Encrypt (fullchain.pem и privkey.pem).

  • /root/nginx/: Содержит конфигурацию Docker Compose для прокси-сервера Nginx.

  • /data/nginx/user_conf.d/: Хранит пользовательские файлы конфигурации Nginx для конкретного экземпляра сервера.

  • /data/nginx/nginx-certbot.env: Файл окружения для контейнера Nginx-Certbot.

Процесс установки приложения

Стек приложения устанавливается с использованием нативного менеджера пакетов и Docker. Процесс включает следующие шаги:

  1. Установка пакетов: Система устанавливает пакеты qemu-kvm, libvirt-daemon-system, libvirt-clients, bridge-utils, virtinst, cockpit, cockpit-machines, certbot и pip.

  2. Активация сервисов: Сервисы libvirtd и cockpit.socket запускаются и включаются для автоматического запуска при загрузке системы.

  3. Подготовка портов: Существующие веб-серверы (Nginx, Apache) и контейнеры Docker, занимающие порты 80 и 443, останавливаются для обеспечения возможности валидации Let's Encrypt.

  4. Получение сертификатов: Сертификаты Let's Encrypt получаются для сгенерированного FQDN с использованием режима certbot standalone.

  5. Интеграция сертификатов: Полученные сертификаты копируются в каталог сертификатов Cockpit, и устанавливаются соответствующие права доступа.

  6. Развертывание прокси: Развертывается контейнер Docker с образом jonasal/nginx-certbot:latest для обработки обратного проксирования и завершения SSL-соединений.

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

Безопасность обеспечивается через изоляцию сервисов и управление сертификатами:

  • Межсетевой экран (Firewall): Порты 80 и 443 используются для внешнего доступа. Внутренние сервисы общаются через localhost.

  • Пользователи: Сервис Cockpit работает от имени пользователя root с определенными правами группы для группы cockpit-ws.

  • Ограничения: Сервис libvirtd управляет доступом к виртуальным машинам, в то время как Cockpit предоставляет веб-интерфейс.

  • Права на сертификаты: Файлы SSL-сертификатов в каталоге /etc/cockpit/ws-certs.d/ имеют права доступа 640 с владением root:cockpit-ws.

Контейнеры Docker и их развертывание

Обратный прокси-сервер развертывается с использованием Docker Compose. Конфигурация контейнера определена в файле /root/nginx/compose.yml.

  • Образ: jonasal/nginx-certbot:latest

  • Политика перезапуска: unless-stopped

  • Режим сети: host

  • Томы (Volumes):

  • nginx_secrets (внешний) монтируется в /etc/letsencrypt

  • /data/nginx/user_conf.d монтируется в /etc/nginx/user_conf.d

  • Окружение (Environment):

  • CERTBOT_EMAIL: hkadm@hostkey.com

  • Дополнительные переменные окружения загружаются из /data/nginx/nginx-certbot.env

Контейнер запускается с помощью команды:

docker compose up -d
выполняемой из каталога /root/nginx.

Прокси-серверы

Nginx развертывается как контейнер Docker для работы в качестве обратного прокси-сервера для веб-интерфейса Cockpit.

  • Цель проксирования: Конфигурация Nginx пересылает запросы на http://127.0.0.1:3000.

  • SSL/TLS: Завершение SSL-соединений обрабатывается контейнером Nginx с использованием сертификатов Let's Encrypt.

  • Расположение конфигурации: Пользовательские правила проксирования хранятся в файле /data/nginx/user_conf.d/kvm<Server ID>.hostkey.in.conf.

  • Интеграция с Certbot: Контейнер Nginx включает Certbot для автоматического обновления сертификатов.

Настройки прав доступа

Права доступа к файлам и каталогам настроены следующим образом:

  • /root/nginx/: 0755 (Владелец: root, Группа: root)

  • /root/nginx/compose.yml: 0644 (Владелец: root, Группа: root)

  • /etc/cockpit/ws-certs.d/: 0755 (Владелец: root, Группа: root)

  • /etc/cockpit/ws-certs.d/*.crt и *.key: 0640 (Владелец: root, Группа: cockpit-ws)

Расположение файлов конфигурации и данных

Ключевые файлы конфигурации и места хранения данных включают:

  • Nginx Compose: /root/nginx/compose.yml

  • Пользовательская конфигурация Nginx: /data/nginx/user_conf.d/kvm<Server ID>.hostkey.in.conf

  • Сертификаты Cockpit: /etc/cockpit/ws-certs.d/kvm<Server ID>.hostkey.in.crt и .key

  • Сертификаты Let's Encrypt: /etc/letsencrypt/live/kvm<Server ID>.hostkey.in/

  • Переменные окружения: /data/nginx/nginx-certbot.env

Доступные порты для подключения

Для приложения настроены следующие порты:

Порт Протокол Описание
443 TCP Доступ HTTPS к веб-интерфейсу Cockpit через прокси Nginx.
80 TCP HTTP для валидации Let's Encrypt и перенаправления.
3000 TCP Внутренний порт сервиса Cockpit (только localhost).

Запуск, остановка и обновление

Команды управления сервисами для развернутых компонентов:

  • Сервис Cockpit:

  • Запуск: systemctl start cockpit.socket

  • Остановка: systemctl stop cockpit.socket

  • Перезапуск: systemctl restart cockpit

  • Включение: systemctl enable cockpit.socket

  • Сервис Libvirt:

  • Запуск: systemctl start libvirtd

  • Остановка: systemctl stop libvirtd

  • Перезапуск: systemctl restart libvirtd

  • Включение: systemctl enable libvirtd

  • Контейнер прокси Nginx:

  • Запуск/Перезапуск: docker compose up -d (из каталога /root/nginx)

  • Остановка: docker compose down (из каталога /root/nginx)

  • Просмотр логов: docker compose logs -f (из каталога /root/nginx)

question_mark
Я могу вам чем-то помочь?
question_mark
ИИ Помощник ×