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)

Как это работает

  1. В браузере открывается ссылка https://jenkins.onecci.lan
  2. TLS-соединение устанавливается с Traefik:
    • Traefik использует сертификат из Kubernetes Secret;
    • происходит проверка SAN и шифрование канала.
  3. Traefik расшифровывает HTTPS и проксирует запрос: HTTP -> Service -> Pod
  4. 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 сервера.