# Единственный источник правды по адресам стенда шага 1. # Используется entrypoint.sh (сборка моста) и pipeline.sh (генерация OpenFlow). # Значения здесь должны совпадать с docker-compose.yml. BR=br-lb OF=OpenFlow15 CT_ZONE=1 # --- сеть 1: публичный сегмент (macvlan поверх enp3s0, реальный L2 LAN) ------- # IP-адреса ниже существуют ТОЛЬКО в OpenFlow-правилах: ARP-респондер отвечает # на них MAC-адресом PUB_MAC. На интерфейсе адрес не настраивается. PUB_IFNAME=pub0 PUB_OFPORT=1 PUB_MAC=02:42:c0:a8:05:14 PUB_NET=192.168.5.0/24 LB_PUB_IP=192.168.5.20 VIP=192.168.5.21 VIP_PORT=80 # --- сеть 2: приватный сегмент 10.20.0.0/24 ---------------------------------- # С шага 3 сегмент коммутирует сам br-lb: каждая ВМ сегмента подключена # отдельным портом (см. scripts/attach-segment.sh). Порт p2 остался аплинком к # docker-бриджу: через него идёт egress бэкендов на шлюз .254 (профиль A). # # Адрес шлюза LB_P2_IP и VIP приватного листенера P2_VIP отвечают одним MAC # (P2_MAC) — по нему пайплайн отличает L3-трафик к маршрутизатору от # L2-трафика сегмента. # # BE*_MAC (шаг 5): это уже не источник правды для OpenFlow, а «заводской» MAC, # который attach-segment.sh назначает интерфейсу ВМ — эмуляция того, что в # реальности прошито в NIC сервера. В таблицу 21 этот MAC не подставляется: # его заново резолвит hcd через обычный ARP на hcif-порту (hc/neigh.go) и # заливает в датапас сам. pipeline.sh эти переменные больше не читает. P2_IFNAME=p2 P2_OFPORT=2 P2_MAC=02:42:0a:14:00:01 P2_NET=10.20.0.0/24 P2_DOCKER_GW=10.20.0.254 LB_P2_IP=10.20.0.1 BE1_IP=10.20.0.2 BE1_MAC=02:42:0a:14:00:02 BE1_PORT=8080 BE1_OFPORT=10 BE1_ID=0x1 BE3_IP=10.20.0.3 BE3_MAC=02:42:0a:14:00:03 BE3_PORT=8080 BE3_OFPORT=11 BE3_ID=0x3 # Клиент внутри сегмента — та самая ВМ, что живёт рядом с бэкендами. # В его ОС не настраивается ничего, кроме адреса: VIP находится в его подсети. CLI2_IP=10.20.0.10 CLI2_MAC=02:42:0a:14:00:0a CLI2_OFPORT=12 # Уникальный адрес узла в сегменте — источник health-проб (§7.1 дизайна v1). # Живёт на internal-порту OVS: это единственный адрес, который узел держит в # ядре, весь остальной форвардинг идёт мимо стека. HC2_IFNAME=hcif-p2 HC2_OFPORT=4 HC2_MAC=02:42:0a:14:00:fd HC2_IP=10.20.0.253 # --- сеть 3: приватный сегмент 10.30.0.0/24 ---------------------------------- P3_IFNAME=p3 P3_OFPORT=3 P3_MAC=02:42:0a:1e:00:01 P3_NET=10.30.0.0/24 P3_DOCKER_GW=10.30.0.254 LB_P3_IP=10.30.0.1 BE2_IP=10.30.0.2 BE2_MAC=02:42:0a:1e:00:02 BE2_PORT=8080 BE2_OFPORT=20 BE2_ID=0x2 BE4_IP=10.30.0.3 BE4_MAC=02:42:0a:1e:00:03 BE4_PORT=8080 BE4_OFPORT=21 BE4_ID=0x4 CLI3_IP=10.30.0.10 CLI3_MAC=02:42:0a:1e:00:0a CLI3_OFPORT=22 HC3_IFNAME=hcif-p3 HC3_OFPORT=5 HC3_MAC=02:42:0a:1e:00:fd HC3_IP=10.30.0.253 # --- приватные листенеры (шаг 3) --------------------------------------------- # VIP берётся из подсети сегмента: клиенту не нужны ни маршруты, ни настройки — # адрес находится в его собственной сети, ARP-респондер OVS отвечает за него. # # PRIV_LISTENERS перечисляет сегменты, где листенер поднят. Пустое значение # выключает приватные листенеры целиком, "p2" — включает один сегмент, # "p2 p3" — оба. Пул и таблица слотов общие с публичным листенером. PRIV_LISTENERS="p2 p3" PRIV_VIP_PORT=80 P2_VIP=10.20.0.100 P3_VIP=10.30.0.100 # --- пул и таблица слотов ---------------------------------------------------- # POOL_ID служит basis хэша multipath: разные пулы дают независимые раскладки. POOL_ID=1 # Слотов на пул (§5.1 дизайна v1). Определяет гранулярность весов. SLOTS=1024 # --- health-check ------------------------------------------------------------ HC_PROBE=http # http | tcp HC_HTTP_PATH=/healthz HC_INTERVAL=2s HC_TIMEOUT=1s HC_RISE=2 # успехов подряд для перевода в up HC_FALL=3 # неудач подряд для перевода в down HC_API=127.0.0.1:9111