跳转到内容
⚠️ 警告:Nantian Gateway 目前仍处于开发阶段,不适用于生产环境

自定义与实验资源

Nantian Gateway 使用标准 Gateway API 资源进行路由。安装相关 CRD 并开启对应 feature flag 后,它也能理解实验性扩展资源。

ResourceAPI versionScopePurpose
AIServicegateway.nantian.dev/v1alpha1Namespaced为 AI gateway 路由配置一个 AI provider/model 目标。
TokenPolicygateway.nantian.dev/v1alpha1Namespaced将 token 和请求限制附加到本地 Gateway API 目标资源。
WasmPlugingateway.nantian.dev/v1alpha1Namespaced加载 Wasm 模块并绑定到目标资源。
BackendLBPolicygateway.networking.k8s.io/v1alpha2Namespaced配置后端负载均衡策略和会话保持。

创建这些资源前,请先阅读实验功能

AIService 配置一个 AI provider/model 目标。

FieldRequiredNotes
spec.providerYesProvider 名称,例如 openaianthropicollama
spec.formatNo请求/响应格式提示。
spec.modelYesprovider 使用的模型名称。
spec.auth.typeNo运行时理解的认证类型。
spec.auth.secretNoKubernetes Secret 名称。
spec.auth.keyNoSecret 中的 key。
spec.auth.headerNo凭证使用的请求头。
spec.timeoutNo超时时间字符串。
spec.retry.maxRetriesNo重试次数。
spec.retry.backoffNo重试 backoff 时间字符串。
spec.observability.langfuse.*NoLangfuse 集成字段。
spec.observability.otel.*NoOpenTelemetry 集成字段。

示例:

apiVersion: gateway.nantian.dev/v1alpha1
kind: AIService
metadata:
name: openai-gpt4o
namespace: nantian-demo
spec:
provider: openai
format: openai
model: gpt-4o
auth:
type: bearer
secret: openai-api-key
key: token
header: Authorization
timeout: 60s
retry:
maxRetries: 2
backoff: 500ms

TokenPolicy 将 token 和请求限制附加到本地 Gateway API 目标资源。

FieldRequiredNotes
spec.targetRefsYesLocalPolicyTargetReference 列表;groupkindname 必填。
spec.tokensPerMinuteNo每分钟 token 限制。
spec.tokensPerHourNo每小时 token 限制。
spec.requestsPerMinuteNo每分钟请求限制。
spec.scopeNo运行时策略解释的 scope 字符串。
spec.burstNoburst 倍数。
spec.onLimitNo超限行为,例如 reject

示例:

apiVersion: gateway.nantian.dev/v1alpha1
kind: TokenPolicy
metadata:
name: ai-route-quota
namespace: nantian-demo
spec:
targetRefs:
- group: gateway.networking.k8s.io
kind: HTTPRoute
name: ai-route
tokensPerMinute: 100000
tokensPerHour: 5000000
requestsPerMinute: 1000
scope: route
burst: 1.5
onLimit: reject

WasmPlugin 声明 Wasm 来源和可选目标绑定。

FieldRequiredNotes
spec.wasmYesWasm source object。
spec.wasm.urlNoWasm module 的 URL 来源。
spec.wasm.configMap.nameNoConfigMap 来源名称。
spec.wasm.configMap.keyNoConfigMap data key;默认行为取决于 translator。
spec.wasm.inlineNoInline base64 module content。
spec.wasm.sha256NoSHA-256 checksum。
spec.targetRefsNo包含 groupkindname 的 target refs。
spec.hooksNoonRequestonResponseonStreamChunk
spec.configNoPlugin config string。
spec.sandbox.*NoRuntime sandbox limits。

示例:

apiVersion: gateway.nantian.dev/v1alpha1
kind: WasmPlugin
metadata:
name: request-audit
namespace: nantian-demo
spec:
wasm:
url: https://example.com/plugins/request-audit.wasm
sha256: 0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef
targetRefs:
- group: gateway.networking.k8s.io
kind: HTTPRoute
name: echo
hooks:
- onRequest
- onResponse
config: |
{"mode":"audit"}
sandbox:
maxMemoryBytes: 67108864
maxExecutionTimeMs: 100
allowNetwork: false
allowFileSystem: false

BackendLBPolicy 是 Gateway API experimental policy,不是 Nantian API group 资源。

FieldRequiredNotes
spec.targetRefsYesLocal policy target refs。
spec.loadBalancing.typeNoRoundRobinConsistentHashLeastRequestRandom
spec.loadBalancing.consistentHash.keyTypeNoSourceIPHeaderHostname
spec.loadBalancing.consistentHash.headerNameNokey type 为 Header 时必填。
spec.sessionPersistenceNoGateway API v1alpha2 session persistence object。

示例:

apiVersion: gateway.networking.k8s.io/v1alpha2
kind: BackendLBPolicy
metadata:
name: echo-lb
namespace: nantian-demo
spec:
targetRefs:
- group: ""
kind: Service
name: echo
loadBalancing:
type: ConsistentHash
consistentHash:
keyType: Header
headerName: x-session-id