Home - kropachev/1c-devops-jr GitHub Wiki
Введение
Эта инструкция поможет развернуть CI конвейер для 1С с нуля на одной Ubuntu машине.
💡 Документация рассчитана на пользователя, который никогда не устанавливал Kubernetes и CI/CD.
В результате у вас будет:
- "Легкий" Kubernetes-кластер K3s
- Jenkins с динамическими агентами
- SonarQube для анализа качества
- Docker Registry для хранения образов
- Portainer для визуального управления Kubernetes
Почему Kubernetes
Swarm-плагин Jenkins больше не поддерживается, а Kubernetes современный промышленный стандарт для запуска контейнеров и автоматизации развертывания.
Пока создавалась эта инструкция был выпущен, или обнаружен, новый плагин - https://plugins.jenkins.io/swarm-agents-cloud/. Но победили спортивный интерес, тяга к новому и вообще.
Устанавливать будем K3s - облегченная сборка Kubernetes, отлично подходит для одного сервера.
DNS и HTTPS, важное предупреждение
На тестовом стенде мы будем делать доступ к сервисам CI по HTTPS, прямо как в продакшене.
В отличие от прода, где используется сертификат от публичного CA, в тестовом контуре, для личных целей, сертификаты мы выпустим самостоятельно через собственный Root CA.
⚠️ Критически важно: вся дальнейшая инструкция предполагает, что доступ к сервисам будет осуществляться по доменным именам, а не по IP.
Внутренний DNS Kubernetes (CoreDNS) работает только внутри кластера и не участвует в резолвинге имен для браузеров пользователей.
Следовательно, доменная зона тестового стенда (в примере - *.onecci.lan) должна быть настроена на локальном DNS-сервере сети (как правило, на роутере, см. раздел DNS для сервера).
бщее описание решения
- Виртуальная машина с установленным k3s
- используется Traefik (Ingress-контроллер по умолчанию в k3s)
- доступ к сервисам выполняется по доменным именам (например jenkins.onecci.lan)
- один сертификат используется для всех сервисов
- сертификат сервера подписан собственным Root CA
- Root CA установлен в доверенные на узлах k3s (и опционально на клиентских машинах)
- сертификат хранится в Kubernetes Secret
- TLS завершается на Ingress (Traefik), все сервисы внутри кластера продолжают работать по HTTP и не работают с сертификатами.
- В браузере будет предупреждение о недоверенном сертификате (или не будет, если установим Root CA)
Как это работает
- В браузере открывается ссылка
https://jenkins.onecci.lan - TLS-соединение устанавливается с Traefik:
- Traefik использует сертификат из Kubernetes Secret;
- происходит проверка SAN и шифрование канала.
- Traefik расшифровывает HTTPS и проксирует запрос:
HTTP -> Service -> Pod - Jenkins (или другой сервис) получает обычный HTTP-запрос.
Что мы получим
- один TLS-сертификат на весь CI-контур;
- приложения не требуют TLS-настроек (ну, почти всегда);
- упрощается сопровождение и обновление сертификатов;
- архитектура максимально приближена к проду.
DNS для сервера
Перед работой с сертификатами и настройкой Ingress необходимо обеспечить корректный DNS-резолвинг имен сервисов в IP виртуальной машины с Kubernetes.
Настройка DNS в OpenWRT
На роутерах OpenWRT это можно настроить в Network - DHCP and DNS - General, в поле Address нужно указать настройки для резолвинга:
/onecci.lan/192.168.1.50- для ipv4/onecci.lan/::ffff:192.168.1.50- для ipv6 (::ffff:плю IP v4)
Возможно потребуется перезапустить роутер, чтобы настройки применились.
Для проверки в командной строке нужно выполнить команду
nslookup onecci.lan
nslookup subtest.onecci.lan
И имя сервера и все поддомены должны указывать на IP сервера.