端口模型
端口是网关部署的核心决策——本平台不做任何隐式端口约定:所有端口显式配置, 缺省即启动拒绝。本页给出四个端口类型的规格与网络面规划依据。
四个端口
| 端口 | 数量 | 网络面 | 鉴权 | 配置位置 |
|---|---|---|---|---|
| 数据口 | N≥1(纯控制 CP=0) | 唯一允许公网/前端暴露的面 | 数据面自身(路由/防护/租户) | worker.json listen.port + listener 实体 |
| 管理口 | 0/1 | 内网/管理网段或 127.0.0.1——禁公网 | Bearer | admin.listen(ip:port) |
| Tier 内部口 | 0/1(Standalone=0) | 仅集群内网——恒不公网 | Tier KeyPair/传输层 | raft.listen |
| guardian 控制口 | 0/1(K8s=0) | 默认仅本机;远程=内网管理网 | 本机免鉴权;远程 Bearer | guardian --bind(IPC 缺省) |
数据口:一个口还是多个口
listen.port声明缺省数据口(启动即监听);- 发布态 listener 实体驱动数据口热增删(
{port, address?, protocol, ...})—— 多端口拓扑=多个 listener 实体; - 单口模式(Standalone 兼容)=数据+管理+UI 复用同一口;严格分离必须分开。
管理口上有什么
管理口按固定链序挂载(顺序即优先级):
/healthz → /readyz → /metrics → SSE 流 → 发布进度 → /ui/* → 管理 REST 翻译层
| 路径 | 语义 |
|---|---|
/healthz |
liveness——恒 200(探针车道免鉴权) |
/readyz |
存储+raft 双确认——200/503({ready, commitIndex} 或 {ready:false, degradedReason}) |
/metrics |
Prometheus 抓取端点(Bearer 闸后) |
/ui/* |
内嵌管理控制台(SPA) |
/api/v1/… |
管理 REST(与 CLI 同一契约) |
meta/openapi.json / meta/routes |
管理面 OpenAPI 文档与路由投影 |
严格分离纪律:数据面绝不出现在管理口——分离模式下管理口对数据面路径返回 404 信封。
内外网硬规则
- 数据口是唯一公网面——客户端可达;其余三个口一律不暴露公网;
- Tier 口必须仅内网——raft 恒不与业务口复用/合流(稳定性:慢客户端不得拖累心跳; 安全:对等口必须防火墙可区分);
- 管理口=127.0.0.1 或管理网段;UI 随管理口,永不暴露于数据口;
- guardian 口默认仅本机(远程=内网管理网+系统密钥 Bearer)。
结论:需要内外分离的部署=一公网(数据口)+三内网(管理/Tier/guardian)。 当前由部署与防火墙约束保证(规范层硬规则)。
最少端口速查
| 形态 | 单节点最少 | 全集群最少 |
|---|---|---|
| Standalone 单口 | 1 | 1 |
| Standalone 严格分离 | 2 | 2 |
| 生产集群 CP(纯控制) | 2(管理+Tier) | CP×3 ⇒ 6 |
| 生产集群 DP | 2(1 数据口+Tier) | DP×1 ⇒ 2 |
| 4 台标准集群合计 | — | 8 个端口面 |
dev 环境约定
前端开发代理的事实约定端口为 5000(单口模式)——这是约定不是代码行为, 任何环境都可以换。