Skip to content

Runtime

源码 packages/dn42_schemas/dn42_schemas/runtime.py。描述节点上要跑哪些容器、在什么网络里、怎么构建。


RouterRuntimeSpec

字段类型必填说明
project_namestr | Noneruntime 项目名;None 时由节点名推导。须匹配 [a-z0-9][a-z0-9_-]*
underlayUnderlayNetworkSpecunderlay 网络定义
rpkiRpkiSpec否(默认值)RPKI cache 参数
router_dockerfileRouterDockerfileSpec否(默认值)路由器镜像构建模板参数
wireguard_port_rangeWireGuardPortRangeSpec | None对外对等的 WG UDP 端口段;设置后驱动端口发布注入
wireguard_internal_port_rangeWireGuardPortRangeSpec | None节点间内部链路的 WG UDP 端口段。可空表示未启用分段,全部端口按外部段口径处理(向后兼容)。两段都会被 normalize 钩子注入发布
serviceslist[RuntimeServiceSpec]runtime 服务列表

RuntimeServiceSpec

字段类型必填说明
namestr服务名;同一 deployment 内唯一
roleServiceRole服务语义角色;决定必需挂载与默认 IP 推导
imagestr | None直接使用的镜像名;与 build 互斥
buildBuildSpec | None构建参数;与 image 互斥
ipv4_addressstr | Noneunderlay 中的显式 IPv4。用 network_mode 时不得设置
commandlist[str]否(默认 []启动命令;wg-gatewaybird-router 角色必填
environmentdict[str, str]否(默认 {}环境变量
portslist[PortPublishSpec]否(默认 []发布端口。用 network_mode 时不得发布端口
network_modestr | None网络模式,如 service:<name>service: 的目标须存在
cap_addlist[str]否(默认 []额外 Linux capability;未设时按角色默认回落
deviceslist[str]否(默认 []透传设备
sysctlsdict[str, str]否(默认 {}创建时应用的 sysctl;未设时按角色默认回落
volumeslist[VolumeMount]否(默认 []挂载卷;部分角色有必需的挂载目标
depends_onlist[str]否(默认 []启动依赖;目标须存在
healthcheckHealthCheckSpec | None健康检查;未设时部分角色有默认
enabledbool否(默认 True是否参与最终渲染

ServiceRole 取值:router-netns / wg-gateway / bird-router / rpki-cache / dns / debug-shell

服务级校验

RouterRuntimeSpec.validate_services

  • 服务名唯一。
  • enabled 服务必须覆盖三个必需角色router-netnswg-gatewaybird-router
  • depends_onnetwork_mode service:<name> 引用的服务都须存在。
  • network_mode 的服务不得同时设 ipv4_address,也不得发布端口。
  • 角色必需挂载:wg-gateway 须挂 /opt/dn42/scripts/etc/wireguardbird-router 须挂 /opt/dn42/scripts/etc/bird;不共享 netns 的 dns 角色须发布 53/udp 与 53/tcp。
  • 服务 IPv4 须落在 underlay 子网内,不得等于 underlay 网关,且不得与其它服务重复。
  • 发布端口(含范围)在同一 (host_ip, host_port, protocol) 上不得冲突。

单个服务的校验:imagebuild 不可同设;wg-gatewaybird-router 必须有 command


VolumeMount

字段类型必填说明
sourcestr宿主路径、命名卷或相对来源
targetstr容器内挂载目标
readonlybool否(默认 True是否只读

HealthCheckSpec

字段类型必填说明
testlist[str]健康检查命令数组
interval_secondsintge=1否(默认 15检查间隔
timeout_secondsintge=1否(默认 5单次超时
retriesintge=1否(默认 5连续失败次数阈值
start_period_secondsintge=0否(默认 10启动宽限期

BuildSpec

字段类型必填说明
targetstr | None多阶段构建的 target 名
argsdict[str, str]否(默认 {}build args

Dockerfile 内容由 runtime.router_dockerfile 在 agent 内生成,并经 Docker Engine API 内存构建——没有构建上下文目录,也没有落盘的 Dockerfile


PortPublishSpec

字段类型必填说明
container_portintge=1, le=65535容器端口
container_port_endint | None容器端口范围末端;须 ≥ container_port
host_portint | None宿主端口;None 表示仅声明容器端口
host_port_endint | None宿主端口范围末端;须先有 host_port
protocolstr否(默认 "tcp"tcp / udp / sctp,归一化为小写
host_ipstr | None绑定的宿主地址

validate_ranges:只给 host_portcontainer_port_end 时自动补算 host_port_end;宿主与容器端口范围的大小须一致;host_port_end 须 ≤65535 且 ≥ host_port


WireGuardPortRangeSpec

字段类型必填说明
startintge=1, le=65535容器侧端口范围起点
endintge=1, le=65535容器侧端口范围终点;须 ≥ start
host_startint | None宿主侧起始端口;推导出的宿主末端不得 >65535
host_ipstr | None绑定的宿主地址

派生属性:effective_host_start(= host_start or start)、effective_host_endcontains(port)

两段的实际值由 materializer 从 port_pools 表派生(external / internal 两个 scope),见 fleet 供给收权

⚠️ wireguard_internal_port_range 是较晚加入的 runtime 字段:StrictModelextra="forbid" 会让不认识它的旧版 agent 整份拒收 DesiredState。启用分段前必须先把 agent 升到认识该字段的版本,见 锁步契约


UnderlayNetworkSpec

字段类型必填说明
namestr否(默认 "router_underlay"underlay 网络名
subnetstrunderlay IPv4 子网 CIDR
gatewaystrunderlay IPv4 网关
ipv6_subnetstr | Noneunderlay IPv6 ULA 子网;设置后启用 IPv6(NAT66 出网)
ipv6_gatewaystr | Noneunderlay IPv6 网关;设 ipv6_subnet 时必填

ipv6_subnet 纳入容器 config_hash,改动会触发声明式重建。


RpkiSpec

字段类型必填说明
enabledbool否(默认 True是否启用 RPKI cache
cache_urlstr否(默认 dn42 ROA JSON 源)上游 RPKI JSON 源
listen_hoststr否(默认 "10.254.42.3"underlay 内监听地址
listen_portintge=1, le=65535否(默认 8282监听端口

RouterDockerfileSpec

字段类型必填说明
base_imagestr否(默认 "debian:13-slim"路由器镜像的基础镜像
debian_mirrorstr否(默认 "deb.debian.org"Debian 包源镜像