Table of Contents

Kubernetes 部署

K8s 形态与物理机部署的差异集中在三点:guardian 省略(探针指向管理口,保活交给编排器)、 存储走持久卷(local:// 挂 PVC)、Gateway API 入站可用 CRD 声明直接物化为平台配置。

节点装配要点

项 K8s 形态
进程 单 worker(traffic-worker run)——guardian=0
探针 readinessProbe: /readyz(管理口)——存储+raft 双确认;livenessProbe: /healthz
端口 数据口(容器/Service 暴露)+管理口(ClusterIP 不对公网)+Tier 口(Headless Service 集群内)
存储 volume: "virtual:///data/traffic/config.tier" 挂 PersistentVolume——虚拟卷单工件(推荐);另需 resourceKey(非 memory 卷强制)
多租户 namespace→tenant 1:1(启用 Gateway API 时)

集群组网的 worker.json(raft 段/members)与集群部署完全一致—— CP 用 StatefulSet(稳定网络标识)、DP 用 Deployment。

Gateway API 控制器

平台可作为 Kubernetes Gateway API 的实现方:watch Gateway/GatewayClass/HTTPRoute 等 CRD → 合批 → 走七阶段发布物化为节点配置 → status 三条件写回。

安装物料在 deploy/k8s/gateway-api/:

# 1. 上游 CRD(钉定 standard channel v1.2.1——Gateway/HTTPRoute GA)
kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.2.1/standard-install.yaml

# 2. controller RBAC
kubectl apply -f rbac.yaml

# 3. Traffic 节点(helm chart:traffic-gatewayapi)
helm install traffic deploy/k8s/gateway-api/helm

装配声明(builder 形态,chart 以旗标等价注入):

TrafficNodeBuilder.Create()
    .WithVolume("virtual:///data/traffic/config.tier")
    .WithGatewayApi(new GatewayApiOptions(
        Tenant: "default",
        GatewayClass: "gateway.tc.traffic",
        Namespaces: ["default"]))
    .StartAsync();
选项 语义
Tenant A 批单一目标租户——CRD 物化的实体全部落该租户
GatewayClass 本实现受理的 GatewayClass 名
Namespaces watch 的 namespace 选择器
namespacePerTenant namespace→tenant 1:1 映射开关

样例路由见 sample-httproute.yaml;E2E 门(Kind 集群真验)见 e2e-gate.sh。

手改保护

Gateway API 物化的实体带 k8s/ 键前缀——手改/手删被拒绝(422): CRD 是唯一编辑入口,绕过 CRD 的修改会破坏 watch 回写的一致性。

与物理机形态的能力差异

  • validating webhook(缺省仅管线挂载,helm 侧控制 apiserver 注册);
  • 版本升级=镜像滚动(编排器保活职责由 Deployment 接管)。