MVP Single Node with Manual Config in Docker

This commit is contained in:
ayurishchev committed 2026-08-16 21:43:02 +03:00
commit 8212699f23
27 files changed
+3818

No files matched your search

+140
View File
@@ -0,0 +1,140 @@
name: hpnn-v2
services:
# Контейнер 1: маршрутизатор и балансировщик нагрузки в одном лице.
# Подключён ко всем трём сетям; весь форвардинг выполняет OVS (br-lb),
# сетевой стек ядра контейнера в передаче трафика не участвует.
lb-router:
# Контекст — корень репозитория: в образ едет и демон health-check (hc/).
build:
context: .
dockerfile: lb/Dockerfile
container_name: hpnn-lb
hostname: lb-router
# privileged + /lib/modules: kernel datapath OVS в сетевом пространстве
# имён контейнера (модуль openvswitch namespace-aware).
privileged: true
volumes:
- /lib/modules:/lib/modules:ro
environment:
TZ: Europe/Moscow
networks:
pub:
ipv4_address: 192.168.55.20
mac_address: "02:42:c0:a8:05:14"
priv2:
ipv4_address: 10.20.0.1
mac_address: "02:42:0a:14:00:01"
priv3:
ipv4_address: 10.30.0.1
mac_address: "02:42:0a:1e:00:01"
restart: unless-stopped
# Контейнер 2: бэкенд в приватном сегменте 2.
be1:
build: ./backend
container_name: hpnn-be1
hostname: be1
cap_add: [NET_ADMIN]
environment:
TZ: Europe/Moscow
LB_GW: 10.20.0.1
VIA_LB_ROUTES: "192.168.5.0/24,10.30.0.0/24"
networks:
priv2:
ipv4_address: 10.20.0.2
mac_address: "02:42:0a:14:00:02"
depends_on: [lb-router]
restart: unless-stopped
# Контейнер 3: копия контейнера 2 в приватном сегменте 3.
be2:
build: ./backend
container_name: hpnn-be2
hostname: be2
cap_add: [NET_ADMIN]
environment:
TZ: Europe/Moscow
LB_GW: 10.30.0.1
VIA_LB_ROUTES: "192.168.5.0/24,10.20.0.0/24"
networks:
priv3:
ipv4_address: 10.30.0.2
mac_address: "02:42:0a:1e:00:02"
depends_on: [lb-router]
restart: unless-stopped
# Второй бэкенд в приватном сегменте 2. Четыре члена пула вместо двух дают
# содержательную проверку раскладки слотов: при выбытии одного члена его
# слоты делятся между тремя оставшимися, а не достаются единственному.
be3:
build: ./backend
container_name: hpnn-be3
hostname: be3
cap_add: [NET_ADMIN]
environment:
TZ: Europe/Moscow
LB_GW: 10.20.0.1
VIA_LB_ROUTES: "192.168.5.0/24,10.30.0.0/24"
networks:
priv2:
ipv4_address: 10.20.0.3
mac_address: "02:42:0a:14:00:03"
depends_on: [lb-router]
restart: unless-stopped
# Второй бэкенд в приватном сегменте 3.
be4:
build: ./backend
container_name: hpnn-be4
hostname: be4
cap_add: [NET_ADMIN]
environment:
TZ: Europe/Moscow
LB_GW: 10.30.0.1
VIA_LB_ROUTES: "192.168.5.0/24,10.20.0.0/24"
networks:
priv3:
ipv4_address: 10.30.0.3
mac_address: "02:42:0a:1e:00:03"
depends_on: [lb-router]
restart: unless-stopped
networks:
# Сеть 1 — публичный сегмент: macvlan поверх физического enp3s0, то есть
# настоящий L2 клиентской сети 192.168.5.0/24.
#
# Объявленная здесь подсеть 192.168.55.0/24 намеренно фиктивная и служит
# только Docker IPAM: адреса узла (192.168.5.20) и VIP (192.168.5.21)
# существуют исключительно в правилах OpenFlow, а с интерфейса IP снимается
# при старте. Реальная 192.168.5.0/24 здесь объявлена быть не может — её уже
# занимает macvlan-сеть соседнего стенда router-functest, и Docker
# отказывается регистрировать пересекающийся пул.
pub:
driver: macvlan
driver_opts:
parent: enp3s0
ipam:
config:
- subnet: 192.168.55.0/24
# Сеть 2 — приватный сегмент бэкенда be1. Шлюз Docker смещён на .254,
# чтобы адрес .1 занял OVS-роутер и не конфликтовал с host-бриджем.
priv2:
driver: bridge
driver_opts:
com.docker.network.bridge.name: hpnn-p2
ipam:
config:
- subnet: 10.20.0.0/24
gateway: 10.20.0.254
# Сеть 3 — дополнительный приватный сегмент бэкенда be2.
priv3:
driver: bridge
driver_opts:
com.docker.network.bridge.name: hpnn-p3
ipam:
config:
- subnet: 10.30.0.0/24
gateway: 10.30.0.254