141 lines
4.9 KiB
YAML
141 lines
4.9 KiB
YAML
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
|