1. Общие сведения
Фронтент, бэкенд и базу данных вашего проекта Jenkins автоматически деплоит в кластер Kubernetes по по веб-хуку из Gitea. Jenkins собирает Docker образ в соответствии с Dockerfile в корне репозитория, и деплоит helm чарт из директории helm/ в кластер Kubernetes
2. Фронтенд
Инфраструктурные настройки фронтенда вашего проекта расположены в репозиториии frontend в Gitea.
В Dockerfile вы можете задать версию Nginx, реализующего функцию фронтенда. Мы рекомендуем использовать официальный легковесный Docker образ Nginx на базе Alpine Linux. Найдите актуальную версию nginx на сайте https://hub.docker.com/_/nginx и задайте в Dockerfile
Настроить Nginx вы можете в диретории helm/configs/ для каждого контура отдельно в директориях development, staging и production.
Из файлов конфигурации в указанных выше директориях будут созданы ConginMap и подключены в модули фронтендов в контурах development, staging и production
В Jenkinfile вы можете задать количество реплик фронтенда для каждого контура отдельно. Для development в переменной reviewReplicaCount, для staging в stagingReplicaCount, для production в productionReplicaCount
3. Бэкенд
В зависимости от выбранного языка програмирования для бэкенда мы предлагаем готовые Docker образы:
для языка PHP:
php-fpm из официального образа на базе Alpine Linux https://hub.docker.com/_/php
для языка Python:
gunicorn или uWSGI из официального образа на базе Alpine Linux https://hub.docker.com/_/python
Задать версию языка разработки и установить необходимые модули вы можете в Dockerfile
Настроить бэкенд вы можете в диретории helm/configs/ для каждого контура отдельно в директориях development, staging и production.
Из файлов конфигурации в указанных выше директориях будут созданы ConginMap и подключены в модули фронтендов в контурах development, staging и production
В Jenkinfile вы можете задать количество реплик бэкенда для каждого контура отдельно. Для development в переменной reviewReplicaCount, для staging в stagingReplicaCount, для production в productionReplicaCount
4. Shared диск между бэкендом и фронтендом
Для увеличения скорости работы, статику web-сайта вашего проекта (css, img, javascript) отдает Nginx в модуле фронтенда. В каждом контуре создан shared Persistent Volume в режиме - ReadWriteMany. В helm чарте бэкенда helm/templates/shared-pvc.yaml создается PVC, при помощи которой shared PV подключается одновременно к модулю бэкенда и фронтенда. Вы можете найти найти директорию, к которой подключается shared PV в helm чарте бэкенда helm/templates/deployment.yaml
- name: shared-volume
mountPath: /var/www/html/public/build/
В эту директорию разработчики должны поместить всю статику web-сайта вашего проекта. Посмотреть к какой директории на фронтенде подключается shared PV можно в helm чарте фронтенда helm/templates/deployment.yaml
- name: shared-volume
 mountPath: /usr/share/nginx/html/build
Связанный с данной директорией location Nginx вы можете в конфиге Nginx helm/configs/{development,staging,production}/nginx/conf.d/default.conf
5. База данных
Из коробки мы предустанавливаем в каждый контур (development, staging, production) базу данных MySQL или PostgreSQL.
Для базы данных MySQL мы создаем репозиторий в Gitea и пайплайн в Jenkins с именем mysql. Для базы данных PostgreSQL репозиторий в Gitea и пайплайн в Jenkins с именем postgres
Задать версию БД вы можете в Dockerfile. Мы используем официальные Docker образы:
MySQL - https://hub.docker.com/_/mysql
PostgreSQL - https://hub.docker.com/_/postgres
Настроить базу данных можно для каждого из 3х контуров отдельно в директориях helm/configs/{development,staging,production}
В репозитории базы данных созданы 3 ветки, каждая из которых деплоит БД в заданный контур:
ветка development в development контур
ветка staging в staging контур
ветка production в production контур
В каждый контур для управления MySQL установлен phpMyAdmin и для управления PostgreSQL установлен pgadmin4
Для phpMyAdmin мы используем официальный Docker образ https://hub.docker.com/_/phpmyadmin
версию phpMyAdmin можно задать в helm/charts/phpmyadmin/values.yaml
для pgadmin4 мы используем Docker образ https://hub.docker.com/r/dpage/pgadmin4
версию можно задать в субчарте helm/charts/pgadmin/values.yaml
web-интерфейсы доступны по ссылкам:
https://phpmyadmin.development.example.com
https://phpmyadmin.staging.example.com
https://phpmyadmin.production.example.com
https://pgadmin.development.example.com
https://pgadmin.staging.example.com
https://pgadmin.production.example.com
6. Сетевая безопасность кластера Kubernetes
Мы настроили сетевую безопасность в кластере Kubernetes следуя концепции Zero Trust Network Access. Немспейсы инстансов и контуров development, staging и production изолировали друг от друга. Между неймспейсами разрешен трафик минимально достаточны для работы кластера. Сетевые политики вы можете найти в вашей домашней директоии в файле networkpolicy.yaml
На хост Kubernetes закрыт весь трафик кроме ICMP на вход и на выход и TCP на вход 22,2222 порты на SSH и 80 и 443 порты HTTP/PTTPs доступа к web-интерфейсам Gitea, Jenkins, Grafana и вашему сайту. Сетевые политики для хоста вы можете найти в вашей домашней директории в файле networkpolicy-host.yaml