🤖 PR generated for branch `fix/cyrillic-fonts-dev-certs-and-page-head`.
### Changes Summary
- **Fonts**: Add Cyrillic glyph subsets for Lato, EB Garamond, and Fira
Code.
- **Dev**: Support remote Root CA and encrypted dev CA key in
`.env.dev`.
- **UI & Kits**: Add size variant to `Breadcrumbs` component and enlarge
`PageHead` breadcrumbs with tuned collapse scroll threshold.
- **ESLint**: Add `no-hanging-particles` i18n & markdown typography rule
with auto-fixer.
- **Content & i18n**: Apply `ru-text` editorial and typography polish
(em dashes, number ranges, «ё» restoration, non-breaking spaces) across
`services/www` and `services/docs`.
5.4 KiB
title, description, weight
| title | description | weight |
|---|---|---|
| Схема адресации флота | Подсети /24 для каждого узла и статические якорные IP внутри пространства анклава (по умолчанию 198.18.0.0/16). | 17 |
Фреймворк apex назначает каждому сервису фиксированный, предсказуемый IPv4-адрес внутри подсети узла. Каждый узел объявляет собственный /24, якоря сервисов — это статические адреса внутри него, а вся схема автоматически валидируется линтером якорных IP.
Адресное пространство
Пространство анклава по умолчанию равно 198.18.0.0/16 — диапазону для бенчмаркинга, выделенному RFC 2544: Benchmarking Methodology for Network Interconnect Devices. Этот диапазон никогда не маршрутизируется в публичном интернете и не конфликтует с распространёнными частными диапазонами (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16), которые уже используют облачные провайдеры и домашние сети. Оператор может переопределить его через переменную APEX_ENCLAVE_SUBNET.
Подсети узлов
Каждый узел объявляет ровно один диапазон /24 как APEX_SUBNET в своём файле node.env. Эта подсеть служит пулом IPAM сети direct. Оператор назначает её вручную: по соглашению она располагается внутри пространства анклава (198.18.0.0/16 по умолчанию или в подсети из APEX_ENCLAVE_SUBNET), однако фреймворк не накладывает строгих ограничений на выбор адресов.
Note
В качестве соглашения оператор может группировать подсети
/24связанных узлов в непрерывные блоки, чтобы сохранять наглядность адресного плана. Это вопрос внутренней организации, а не жёсткое требование фреймворка.
Распределение внутри /24 узла
Внутри подсети /24 узла адреса хостов разделяются по ролям:
| Диапазон | Назначение |
|---|---|
.10–.19 |
Зарезервировано для якорей базовой композиции; сервис traefik всегда занимает адрес .10 (через APEX_TRAEFIK_DIRECT_IP) |
.20 и выше |
Якоря сервисов, распределяемые по проектам (<project>) |
Каждый якорь сервиса представляет собой статический ipv4_address в сети direct — фиксированный якорный IP, а не динамическую аренду (lease). Назначенные адреса фиксируются в compositions/ADDRESSING.md, который служит человекочитаемым реестром подсети узла.
Автоматическая проверка
Линтер compose проверяет якорные IP-адреса во всех композициях узла. Для каждого значения ipv4_address, найденного в файлах compositions/*/docker-compose.yml, проверяются следующие условия:
- Корректный формат — о некорректном литерале линтер сообщает как об ошибке, не падая аварийно.
- Уникальность — один и тот же якорный IP не может использоваться в двух разных проектах; при обнаружении дубликатов выводятся имена обоих конфликтующих проектов.
- Принадлежность подсети узла — каждый якорь должен входить в объявленную подсеть
/24узла.
При любом нарушении линтер завершается с ошибкой и кодом 1. При успешной проверке в лог выводится сообщение Anchor IP validation passed. Логика проверки реализована в действии utils/lint-docker-compose; см. GitHub: apex.ermnvldmr.com.
См. также: