跳转到内容

xDS 协议

Nantian Gateway 的控制面和数据面之间通过 gRPC 双向流通信,协议定义在 proto/gateway/control/v1/control.proto 中。这个协议基于 Envoy 的 xDS 模型,但消息结构专为 Nantian Gateway 的内部表示(IR)设计。

控制面和数据面之间有两个 gRPC 服务:

服务RPC类型用途
ConfigurationDiscoveryServiceStreamConfiguration双向流推送配置快照,确认接收状态
ConfigurationDiscoveryServiceReportStatus一元 RPC数据面上报健康状态
数据面 控制面
| |
|-- DiscoveryRequest (subscribe) ------>| 数据面发起订阅
| |
|<---- DiscoveryResponse (snapshot) --- | 控制面推送配置快照
| |
|-- DiscoveryRequest (ACK/NACK) ------>| 数据面确认接收
| |
| ... 配置变更 ... |
| |
|<---- DiscoveryResponse (new ver) ---- | 控制面推送新快照
| |
|-- DiscoveryRequest (ACK/NACK) ------>| 数据面确认
| |
|-- StatusReport --------------------->| 数据面上报健康状态
|<---- StatusAck --------------------- | 控制面确认收到

版本追踪:每个配置快照都有一个 version 字段,控制面在每次配置变更时递增版本号。数据面在 DiscoveryRequest 中携带当前版本,控制面据此判断是否需要推送新配置。

Nonce 机制:每次 DiscoveryResponse 携带一个随机 nonce,数据面在确认时必须原样返回。防止过期确认干扰配置流。

订阅模式:数据面在首次 DiscoveryRequest 中声明它关心的资源类型(subscriptions 字段),控制面只推送数据面订阅的资源。

ACK/NACK:数据面收到配置后必须回复确认状态。ACK 表示配置已成功应用,NACK 表示配置无效,同时通过 error_detail 字段携带错误信息。

数据面发送给控制面的请求消息。

字段类型说明
node_idstring数据面节点标识,通常为 Pod 名称
clusterstring数据面所属集群名称
versionstring当前已应用的配置版本
noncestring上一次收到的 nonce(用于 ACK/NACK)
subscriptionsrepeated string订阅的资源类型列表
result_statusDiscoveryResultStatus配置应用结果:ACKNACK
error_detailstringNACK 时的错误详情

控制面响应数据面的消息。

字段类型说明
versionstring当前配置快照版本
noncestring本次响应的唯一标识,数据面确认时需返回
snapshotConfigSnapshot配置快照内容

配置快照,包含数据面需要的所有配置信息。

字段类型说明
idstring快照唯一标识
generated_atTimestamp快照生成时间
listenersrepeated Listener监听器列表
http_routesrepeated HttpRouteHTTP 路由列表
grpc_routesrepeated GrpcRoutegRPC 路由列表
stream_routesrepeated StreamRouteTCP/UDP/TLS 路由列表
backendsrepeated BackendCluster后端集群列表
secretsrepeated SecretMaterialTLS 证书和密钥
extensionsStruct扩展配置(Wasm 插件等)

数据面定期上报的健康状态消息。

字段类型说明
node_idstring数据面节点标识
versionstring当前数据面版本
readybool是否就绪接收流量
messagestring状态消息
observed_atTimestamp观测时间

控制面对状态上报的确认。

字段类型说明
acceptedbool是否接受状态上报

Listener 定义数据面需要监听的网络端口和协议。

字段类型说明
namestring监听器名称
addressstring监听地址
portuint32监听端口
protocolListenerProtocol协议类型
hostnamesrepeated string允许的主机名列表
attached_routesrepeated string绑定到该监听器的路由名称
tlsTlsConfigTLS 配置
metadatamap<string, string>元数据
backend_tlsBackendTlsConfig后端 TLS 配置
addressesrepeated string多地址监听
说明
LISTENER_PROTOCOL_HTTPHTTP/1.1 和 HTTP/2(h2c)
LISTENER_PROTOCOL_HTTPSTLS 终结 + HTTP
LISTENER_PROTOCOL_GRPCgRPC
LISTENER_PROTOCOL_HTTP3HTTP/3(QUIC)
LISTENER_PROTOCOL_TCPTCP 流代理
LISTENER_PROTOCOL_UDPUDP 流代理
LISTENER_PROTOCOL_TLS_PASSTHROUGHTLS 透传
LISTENER_PROTOCOL_TLSTLS 终结
字段类型说明
enabledbool是否启用 TLS
passthroughbool是否为透传模式
secret_refsrepeated string引用的 Secret 名称
sni_hostsrepeated stringSNI 主机名列表
min_versionstringTLS 最低版本
max_versionstringTLS 最高版本
frontend_validationFrontendValidation客户端证书验证
字段类型说明
ca_pemsrepeated stringCA 证书 PEM 列表
modestring验证模式

HttpRoute 对应 Gateway API 中的 HTTPRoute 资源,定义 HTTP 流量路由规则。

字段类型说明
namestring路由名称
namespacestring命名空间
hostnamesrepeated string主机名列表
parent_refsrepeated ParentRef父资源引用
rulesrepeated HttpRule路由规则列表
labelsmap<string, string>标签
annotationsmap<string, string>注解
字段类型说明
matchesrepeated HttpMatch匹配条件
filtersrepeated Filter过滤器链
backend_refsrepeated BackendRef后端引用列表
timeoutsHttpRouteTimeouts超时配置
retryHttpRouteRetry重试配置
session_persistenceSessionPersistence会话保持
namestring规则名称
字段类型说明
pathstring路径匹配值
path_typestring路径匹配类型:ExactPathPrefixRegularExpression
methodstringHTTP 方法
headersrepeated HeaderMatch请求头匹配条件
query_paramsrepeated QueryMatch查询参数匹配条件
字段类型说明
requestDuration请求超时时间
backend_requestDuration后端请求超时时间
字段类型说明
codesrepeated uint32触发重试的 HTTP 状态码
attemptsuint32最大重试次数
backoffDuration重试退避时间

GrpcRoute 对应 Gateway API 中的 GRPCRoute 资源。

字段类型说明
namestring路由名称
namespacestring命名空间
hostnamesrepeated string主机名列表
parent_refsrepeated ParentRef父资源引用
rulesrepeated GrpcRulegRPC 路由规则
字段类型说明
matchesrepeated GrpcMatch匹配条件
filtersrepeated Filter过滤器链
backend_refsrepeated BackendRef后端引用列表
session_persistenceSessionPersistence会话保持
namestring规则名称
字段类型说明
servicestringgRPC 服务名
methodstringgRPC 方法名
headersrepeated HeaderMatchMetadata 匹配
match_typestring匹配类型

StreamRoute 统一表示 TCP、UDP 和 TLS 路由。

字段类型说明
namestring路由名称
namespacestring命名空间
kindRouteKind路由类型:TCPUDPTLS
parent_refsrepeated ParentRef父资源引用
rulesrepeated StreamRule流路由规则
字段类型说明
portuint32匹配端口
sni_hostnamestringSNI 主机名(TLS 路由)
modeTlsRouteModeTLS 路由模式:PASSTHROUGHTERMINATE

BackendCluster 表示一个后端服务集群。

字段类型说明
namestring集群名称
namespacestring命名空间
protocolstring后端协议
endpointsrepeated BackendEndpoint端点列表
connect_timeoutDuration连接超时
request_timeoutDuration请求超时
tls_validationBackendTlsValidation后端 TLS 验证
session_persistenceSessionPersistence会话保持
load_balancingLoadBalancingPolicy负载均衡策略
ai_serviceAIServiceConfigAI 服务配置
token_policyTokenPolicyConfigToken 策略配置
wasm_pluginWasmPluginConfigWasm 插件配置
字段类型说明
addressstring端点 IP 地址
portuint32端点端口
healthybool健康状态
zonestring可用区
字段类型说明
providerstring提供方类型:openaianthropicollama
formatstring请求/响应格式
modelstring模型名称
authAIServiceAuthConfig认证配置
timeoutDuration请求超时
字段类型说明
tokens_per_minuteuint64每分钟 Token 上限
tokens_per_houruint64每小时 Token 上限
requests_per_minuteuint64每分钟请求数上限
scopestring限流范围
burstdouble突发倍数
on_limitstring超限行为
字段类型说明
namestring插件名称
namespacestring命名空间
wasm_bytesbytesWasm 模块字节内容
sha256stringSHA256 校验和
hooksrepeated string执行钩子列表
config_jsonstring插件配置(JSON)
sandboxWasmSandboxConfig沙箱配置
字段类型说明
max_memory_bytesuint64最大内存限制
max_execution_time_msuint64最大执行时间
allow_networkbool是否允许网络访问
allow_file_systembool是否允许文件系统访问
字段类型说明
namespacestringSecret 命名空间
namestringSecret 名称
cert_pemstring证书 PEM
key_pemstring私钥 PEM

完整的协议定义位于:

proto/gateway/control/v1/control.proto

当前 protobuf 包名为 gateway.control.v1,Go 生成代码的 import 路径为 github.com/nantian-gw/proto/gateway/control/v1;controlv1