Публикация Docker-сервиса
Sidecar — рекомендуемый способ добавить KnotRoute к существующему контейнеру без изменения приложения.
Минимальный пример
Заголовок раздела «Минимальный пример»services: app: image: example/app:latest restart: unless-stopped networks: [private]
knotroute: image: ghcr.io/localzet/knotroute-sidecar:latest restart: unless-stopped networks: [private] volumes: - knotroute-data:/data environment: KNOTROUTE_NETWORK_ID: "kn_..." KNOTROUTE_BEACONS: "https://beacon-a.example,https://beacon-b.example" KNOTROUTE_SERVICE_NAME: "web" KNOTROUTE_SERVICE_TARGET: "app:8080"
networks: private:
volumes: knotroute-data:Приложение app здесь вообще не имеет ports:.
Что делает sidecar
Заголовок раздела «Что делает sidecar»При первом запуске он:
- создаёт/читает KnotRoute node identity;
- создаёт service identity для
web; - подключается к network discovery;
- публикует signed service descriptor;
- принимает rendezvous streams;
- подключается к
app:8080внутри Docker network.
Где увидеть адрес
Заголовок раздела «Где увидеть адрес»docker compose logs knotrouteSidecar печатает строку вида:
publishing web as ...knot -> app:8080Persistent data
Заголовок раздела «Persistent data».knot address изменится.
Делайте backup volume перед migration/upgrade.
Health endpoint
Заголовок раздела «Health endpoint»Sidecar имеет HTTP health listener, типично :9090/healthz. Это process-level check, не полноценный end-to-end test.
Несколько services
Заголовок раздела «Несколько services»Вместо пары KNOTROUTE_SERVICE_NAME/TARGET можно передать KNOTROUTE_SERVICES_JSON и опубликовать несколько targets. Для независимых приложений обычно удобнее отдельный sidecar per stack: так проще lifecycle, ownership и backups.
Inbound 7447
Заголовок раздела «Inbound 7447»Sidecar может работать outbound-only. Публиковать 7447 на host нужно только если вы осознанно хотите, чтобы этот node принимал inbound peering и у вас есть корректный KNOTROUTE_ADVERTISE.