组件介绍
在 AI Agent 场景中,工作负载通常需要访问代码仓库、对象存储、向量数据库、内部 API 或其他 Agent 服务。与普通应用相比,Agent 能够自主生成代码、发起网络请求并使用业务凭证;如果缺少统一网络治理,可能出现访问生产数据库、绕过受控入口、凭证直接暴露给 Pod、调用身份伪造和审计缺失等风险。
传统 Kubernetes 网络默认关注“连通”,通常不负责把 Agent Pod 的 TCP 流量和 UDP/53 DNS 流量收敛到统一策略点,也无法在不改造业务 Pod 的前提下完成凭证注入和访问审计。其他协议不属于当前 HTTP 策略治理范围。Sidecar 方案能够提供一定的代理能力,但需要为每个工作负载注入额外容器,接入和运维成本较高,且绕过控制依赖 Pod 内网络配置。
agent-network 是面向 AI Agent 工作负载的云原生网络执行面组件,以 TKE Addon 形式交付。它在明确授权的 Canary Worker 节点上安装 Agent CNI;当前以节点而非 Pod Label 作为接入边界,Canary 节点上后续新建且使用主 CNI 的非
hostNetwork Pod 会进入 Agent CNI 路径并获得 Fake IP。宿主机 iptables 将 DNS 和 TCP 流量强制收敛到节点本地 ZeroProxy,由 ZeroProxy 执行访问策略、凭证注入、调用身份校验、直连旁路拦截和统一审计。核心目标:
默认拒绝流量必经代理凭证不进入 Agent Pod访问过程可审计节点变更可灰度数据面故障可回滚
特点 | 说明 |
真实 CNI 接入 | Agent CNI 为 Canary 节点上后续新建、使用主 CNI 的 Pod 配置 veth、 agentcni0 网桥、Fake IP、默认路由和节点侧 iptables 规则。 |
强制流量收敛 | UDP/53 流量重定向到节点 DNS Proxy;除命中 Service CIDR 并被标记旁路的流量外,TCP 流量重定向到 ZeroProxy。 |
默认拒绝 | Egress、Ingress 和 Direct Bypass 支持默认拒绝;敏感 Metadata/CGNAT 地址具备内置拒绝保护。 |
凭证隔离 | 业务 Agent Pod 不挂载凭证;凭证保存在 Kubernetes Secret 中,由 ZeroProxy 在转发时读取和注入。 |
动态策略 | AgentNetworkPolicy 支持策略声明;Controller 更新 ConfigMap 并触发 ZeroProxy 热加载。 |
Service 兼容 | Service CIDR 流量使用 fwmark 交回 kube-proxy 和主 CNI,避免影响 Kubernetes ClusterIP Service。 |
灰度与回滚 | 仅带 Canary 标签的节点会安装 CNI;提供节点级 rollback 和宿主机残留检查。 |
与 Kubernetes 的结合
agent-network 利用 Kubernetes 的调度、DaemonSet、Deployment、CRD、ConfigMap 和 Secret 管理能力:
agent-cni-installer 以特权 DaemonSet 运行,仅调度到 Canary 节点,负责安装 CNI 二进制、CNI 配置、网桥、sysctl 和 iptables。zeroproxy 以 hostNetwork DaemonSet 运行,在每个 Canary 节点提供本地代理。credential-upstreams 为完整功能验证提供测试用受保护上游,生产业务可替换为真实上游。agent-network-controller 以 Deployment 运行,监听 AgentNetworkPolicy、AgentNetworkClass 并协调策略和 CNI 基础配置。AgentNetworkPolicy、ConfigMap 与 Secret 承载策略、上游地址和凭证引用。TKE Addon 通过 Chart 统一完成组件资源创建、镜像拉取和默认参数下发。
完整流量路径如下:
Agent Pod eth0(Fake IP)→ 默认路由→ agentcni0 网桥→ 宿主机 iptables PREROUTING├── UDP/53 → REDIRECT 到 ZeroProxy DNS :18053├── Service CIDR → fwmark 后交回 kube-proxy / 主 CNI└── TCP → REDIRECT 到 ZeroProxy :18080→ 策略匹配、身份校验、凭证注入、审计→ 目标服务
TKE 将 agent-network 封装为 Addon 后,用户通过控制台或
InstallAddon API 安装;但由于组件会修改目标节点 CNI、网桥和 iptables,仍必须遵循“单节点 Canary → 双节点 Canary → rollback 残留检查”的灰度流程。核心概念
概念 | 说明 |
Agent 工作负载 | 调度到启用 Agent CNI 的 Canary 节点、需要纳入网络治理的新建 Pod。当前以专用 Canary 节点为隔离边界,而非 Pod Label 选择器。 |
Canary 节点 | 带有 tke-agent-network.io/agent-cni-canary=true 标签、明确授权安装 Agent CNI 的 Worker 节点。 |
Agent CNI | 负责 Fake IP、Pod 网络命名空间、veth、 agentcni0、路由、状态文件与 iptables 规则的真实 CNI 插件。 |
Fake IP | Agent CNI 分配给 Agent Pod 的专用地址,不等同于主 CNI Pod IP;用于流量收敛和来源身份映射。 |
ZeroProxy | 节点本地策略代理,监听 :18080,负责 Egress、Ingress、凭证注入、Direct Bypass、审计和指标。 |
DNS Proxy | ZeroProxy 的 UDP DNS 代理,默认监听 :18053,接收 Fake-IP Pod 的 DNS 请求。 |
Service CIDR | 集群 Kubernetes Service 的地址范围。安装时必须提供,用于避免 ClusterIP Service 流量进入 HTTP 策略代理。 |
AgentNetworkPolicy | Namespaced CRD,声明 Egress Allow/Credential/Deny、Ingress 和 Direct Bypass 策略。 |
AgentNetworkClass | Cluster-scoped CRD,声明 Fake IP CIDR、Service CIDR、代理端口等节点基础网络参数;部分 API 字段当前仅下发记录,不触发数据面模式切换。 |
CNI State | Agent CNI 持久化的 Pod 网络/身份状态,ZeroProxy 可据此将 Fake IP 映射回 Pod 身份。 |
Direct Bypass | Agent Pod 直接访问 Agent Fake-IP CIDR 内目标地址、试图绕过受控入口的行为;默认拒绝。其他 TCP 出站请求仍由 Egress 策略处理。 |
产品优势
对比普通 Kubernetes Pod 网络
维度 | 普通 Pod 网络 | agent-network |
出站访问 | 应用可直接访问网络可达目标 | 由 ZeroProxy 统一执行 Allow、Credential、Deny |
凭证管理 | 常将 Secret 注入业务 Pod | 凭证仅挂载给 ZeroProxy,按规则转发时注入 |
DNS | 使用主 CNI/集群默认 DNS 路径 | Fake-IP Pod 的 DNS 经节点本地 DNS Proxy 统一处理 |
Agent 间调用 | 依赖业务自行鉴权 | 支持 Caller/Target 规则及 Fake-IP 来源身份校验 |
绕过控制 | Pod 可能尝试直连目标 | 节点 iptables 强制收敛,Direct Bypass 默认拒绝 |
审计 | 日志分散在业务系统 | ZeroProxy 统一输出策略命中与访问审计 |
节点变更 | 无 CNI 变更 | CNI 变更需 Canary 和可验证 rollback |
对比 Sidecar 代理
维度 | Sidecar 代理 | agent-network |
接入方式 | 每个 Pod 注入代理容器 | 节点级 Agent CNI + ZeroProxy |
业务改造 | 可能需要改造 Deployment/Pod 模板 | Agent 应用无需感知本地代理地址 |
资源占用 | 每个 Pod 一份代理资源 | 每个 Canary 节点一份 ZeroProxy |
流量接管 | 多依赖 Pod 内重定向和注入逻辑 | 由 CNI 和节点 iptables 在网络路径中强制接管 |
凭证位置 | 可能同时存在于业务 Pod 和 Sidecar | 凭证仅保留在 ZeroProxy 所挂载 Secret |
风险范围 | 主要影响单个工作负载 | 涉及节点 CNI,必须严格按灰度和回滚流程操作 |
典型使用场景
Coding Agent 访问代码仓库
Coding Agent 需要访问公开依赖或私有代码仓库,但不应持有长期 Token。可以允许公开仓库访问,并针对私有仓库配置 Credential 规则,由 ZeroProxy 注入
Authorization 请求头。apiVersion: agent.tke.cloud.tencent.com/v1alpha1kind: AgentNetworkPolicymetadata:name: coding-agent-networknamespace: tke-agent-network-realspec:podSelector: {}priority: 100egress:allow:- name: public-githost: git.example.comprotocol: tcpport: 443credential:- name: private-githost: git.internal.example.comheader: AuthorizationvalueFrom:name: zeroproxy-credentialskey: REPO_TOKENdeny:- name: production-dbhost: prod-db.internaldirectBypass:defaultAction: deny
说明:
当前 Controller 默认仅监听 Addon 所在命名空间(默认
tke-agent-network-real)。业务 Pod 可以位于其他命名空间,但 AgentNetworkPolicy 需创建在 Controller 的监听命名空间。RAG Agent 访问向量数据库
可配置为允许 RAG Agent 访问对象存储和指定向量数据库;对向量数据库的访问由 ZeroProxy 注入检索 Token,其余数据库或高敏数据服务默认拒绝。
Multi-Agent 调用治理
多个 Agent 相互调用时,可基于 Caller 和 Target 定义 Ingress 规则。对于 Agent CNI 管理的 Fake-IP Pod,ZeroProxy 会将
X-Agent-Caller 中的调用方身份声明与来源 Pod 身份进行校验,并依据 X-Agent-Target 匹配目标规则,降低仅伪造请求头绕过授权的风险。spec:podSelector: {}ingress:allow:- caller: "sa:agent-workloads:planner"target: "agent-server"deny:- caller: "sa:agent-workloads:untrusted-agent"target: "agent-server"
防止访问敏感地址
ZeroProxy 内置拒绝以下敏感地址范围;即使业务策略显式 Allow,内置拒绝仍优先:
169.254.169.254/32100.64.0.0/10
产品状态与支持范围
项目 | 说明 |
当前版本 | Addon / Chart 0.3.0 |
发布形态 | TKE Addon / Helm Chart |
发布状态 | 灰度发布阶段;实际可安装地域和版本以 TKE Addon 控制台展示为准。 |
支持集群类型 | TKE 托管集群(MANAGED_CLUSTER) |
Kubernetes 版本 | Chart 声明 >= 1.20.0-0 |
节点系统 | Linux |
节点架构 | 当前 Chart 面向 amd64 节点。 |
主 CNI 兼容性 | 已在 TKE ENI / Multus 环境完成真实集群验证;安装必须提供实际 Service CIDR。 |
策略协议 | HTTP;TLS SNI 透传能力默认关闭,未配置可信 DNS/身份校验时不建议开启。 |
是否计费 | 组件不单独收费,但会占用目标节点 CPU、内存、网络和日志存储资源。 |
使用限制
部署前请确认以下限制:
1. 仅支持 Linux 节点;Direct Bypass 的原始目标恢复依赖 Linux
SO_ORIGINAL_DST。2. Agent CNI 会修改目标节点的 CNI 配置、网桥、sysctl 和 iptables;必须先在专用 Canary Worker 上验证。
3. 不要在跳板机节点、控制节点或承载关键生产业务的节点上启用 Agent CNI。
4.
agentCNI.installerEnabled 默认启用;只有带 Canary 标签的节点才会调度 Installer 并发生 CNI 变更。5. 当
agentCNI.installerEnabled=true 时,agentCNI.serviceCIDRs 是必填安装参数;未提供时 Chart 将拒绝渲染。仅安装控制面且显式关闭 Installer 时可不配置。6.
agentCNI.fakeIPCIDR 的 Chart 默认值为 169.254.77.0/24,但当前不会作为 Installer 的实际 CIDR 下发参数;未配置 AgentNetworkClass 覆盖时,Installer 按节点名派生节点级 /24 CIDR。实际分配地址必须避免与节点、Pod、Service、VPC 和其他基础设施网段冲突。7. ZeroProxy 使用
18080/TCP,DNS Proxy 使用 18053/UDP;安装前应确认目标节点端口没有冲突。8.
AgentNetworkPolicy 使用 valueFrom.name/key 引用已挂载到 ZeroProxy 的 Secret;Controller 会将其转换为运行时策略中的 valueFromFile。不支持 valueFromEnv。9.
zeroproxy.tls.allowUnverifiedSNI 默认关闭;无可信 DNS 或身份校验能力时不建议启用。10. 已存在的 Pod 不会自动迁移到 Agent CNI;需按业务计划重建并调度新的 Pod 到 Canary 节点。当前
podSelector / workloadSelector 不是 Pod 级 CNI 接入开关,因此 Canary 节点应保持为专用节点。11. 卸载 Addon 前必须执行 CNI rollback;仅卸载 Helm Release 或 Addon 不能替代宿主机数据面清理。
12.
AgentNetworkPolicy.spec.podSelector 与 AgentNetworkClass.spec.workloadSelector 已进入 API,但当前不作为 Pod 级选择性 CNI 接入开关;现阶段以专用 Canary 节点作为工作负载隔离边界。13.
AgentNetworkClass.spec.proxy.failMode 与 spec.cni.defaultConnectivity 当前为 API/下发字段;v0.3.0 数据面仍按 Fail-Close / ZeroConnectivity 运行,不能依赖 FailOpen 自动直连。14. Addon / Chart / 团队镜像发布版本为
0.3.0 / v0.3.0;当前 Agent CNI 节点版本记录可能仍显示 v0.2.5。该问题不影响已验证的数据面功能,但会影响版本追踪和升级诊断,需后续修复并复验。安装前准备
1. 规划节点角色
至少选择两台可中断、非关键业务的 Worker 节点:
第一台用于单节点 Canary 验证;
第二台用于双节点验证;
跳板机节点和关键业务节点不得参与 CNI 替换。
查看节点:
kubectl get node -o widekubectl get pod -A -o wide
2. 为第一台 Canary 节点打标签
kubectl label node <第一台-worker节点名> \\tke-agent-network.io/agent-cni-canary=true
验证完成并准备做双节点验证时,再给第二台 Worker 打同样的标签:
kubectl label node <第二台-worker节点名> \\tke-agent-network.io/agent-cni-canary=true
3. 确认 Service CIDR
必须确认集群真实 Service CIDR。可通过 TKE 集群配置获取,也可通过现有 ClusterIP 辅助判断:
kubectl get svc -A \\-o jsonpath='{range .items[*]}{.spec.clusterIP}{"\\n"}{end}' \\| grep -v -E '^(None|<none>|)$' \\| sort -u \\| head
例如,ClusterIP 位于
192.168.x.x 时,常见 Service CIDR 为:192.168.0.0/16
说明:
Service CIDR 必须以集群实际配置为准,不能仅凭示例猜测。
4. 准备回滚窗口
在安装前确认:
可以登录到目标 Worker。
已记录节点当前状态。
具备执行 rollback 和节点残留检查的窗口。
生产业务已避开 Canary 节点,或允许在验证期间重建。
安装 agent-network
方式一:控制台安装
1. 登录 TKE 控制台并进入目标集群。
2. 进入“组件管理”,选择新建组件。
3. 选择
agent-network。4. 选择 Addon 版本
0.3.0。5. 在参数中提供真实 Service CIDR。
6. 提交安装并等待组件运行。
基础安装至少需要:
agentCNI:serviceCIDRs:- <真实 Service CIDR>
方式二:通过 API 安装
调用 TKE
InstallAddon 接口。基础安装 JSON 示例:{"Region": "ap-<region>","ClusterId": "cls-xxxxxxxx","AddonName": "agent-network","AddonVersion": "0.3.0","RawValues": "{\\"agentCNI\\":{\\"serviceCIDRs\\":[\\"<真实 Service CIDR>\\"]}}"}
默认 Chart 已使用团队组件镜像,不需要在 RawValues 重复设置
image.registry、image.tag 或组件 repository。完整 demo/e2e 验证时,才额外配置测试专用的:
credentialUpstream.enabled=true。credentials.repoToken 与 credentials.ragToken。zeroproxy.reload.enabled=true,并必须设置非空的 zeroproxy.reload.token。zeroproxy.upstreams 的测试映射。Credential 策略规则。
这些测试 token 和测试 upstream 不应直接复用于真实生产业务。当前 Chart 会将
credentials.* 和 reload token 渲染为组件 Secret,因此完整 demo/e2e 的 token 只能在隔离测试环境中通过受控 API 请求传入;不得将生产凭证写入 RawValues、命令行、示例文件或终端历史。启用 credential-upstreams 后,该测试组件会从 Secret 读取期望 token 以验证注入结果;这不改变“业务 Agent Pod 不挂载凭证”的产品边界。安装后验证
1. 查看组件状态
以下命令以默认 namespace
tke-agent-network-real 为例:kubectl get ds,deploy,pod -n tke-agent-network-real -o wide
单节点 Canary 的预期:
agent-cni-installer 1/1 Readyzeroproxy 1/1 Readyagent-network-controller 1/1 Ready
完整 demo/e2e 模式还会运行:
credential-upstreams 1/1 Ready
启用完整 demo/e2e 时,双节点 Canary 扩展后
agent-cni-installer、zeroproxy、credential-upstreams 三个 DaemonSet 均预期为 2/2 Ready;默认安装时检查前两个 DaemonSet 为 2/2 Ready。2. 查看真实 CNI 安装状态
在目标 Worker 上检查:
ip addr show agentcni0ls -l /opt/cni/bin/agent-cnils -l /etc/cni/net.d/00-agent-cni.confls -la /var/lib/tke-agent-network/agent-cni/
检查 sysctl:
sysctl \\net.ipv4.ip_forward \\net.ipv4.conf.all.rp_filter \\net.ipv4.conf.default.rp_filter \\net.ipv4.conf.agentcni0.rp_filter
预期:
net.ipv4.ip_forward = 1rp_filter = 0
3. 运行内置诊断
kubectl exec -n tke-agent-network-real ds/agent-cni-installer -- \\/agent-cni --doctor \\--doctor-state-dir=/host/var/lib/tke-agent-network/agent-cni \\--doctor-host-cni-bin=/host/opt/cni/bin \\--doctor-host-cni-conf=/host/etc/cni/net.d \\--doctor-zeroproxy-url=http://127.0.0.1:18080/healthz
预期输出:
AGENT_CNI_DOCTOR_PASSED
4. 验证 HTTP e2e 与真实 CNI e2e
完整验证应至少覆盖:
验证层次 | 验证内容 |
HTTP e2e | ZeroProxy 的 Allow、Credential、Deny、Ingress allow/deny、Coding/RAG/Gateway demo |
真实 CNI e2e | Fake-IP Pod、iptables REDIRECT、Coding、RAG、Direct Bypass deny |
主 CNI 兼容 | DNS、ClusterIP Service |
控制面 | 双 ZeroProxy ConfigMap projection/reload、 AgentNetworkPolicy 最终 Active |
安全与可观测 | 审计日志不泄露凭证、metrics 可访问 |
完整验证中的成功标记按验证层次区分如下。
HTTP e2e(策略、凭证与 ingress)应包含:
EGRESS_ALLOWED_BY_POLICYCREDENTIAL_INJECTED_BY_ZEROPROXYEGRESS_DENIED_BY_POLICYINGRESS_ALLOWED_BY_ZEROPROXYINGRESS_DENIED_BY_ZEROPROXYCODING_AGENT_DEMO_PASSEDRAG_AGENT_DEMO_PASSEDMULTI_AGENT_GATEWAY_DEMO_PASSED
真实 CNI e2e(Fake IP、iptables REDIRECT 和节点数据面)应包含:
EGRESS_ALLOWED_BY_POLICYCODING_AGENT_DEMO_PASSEDRAG_AGENT_DEMO_PASSEDDIRECT_BYPASS_DENIED_BY_ZEROPROXY
DNS 与 ClusterIP Service 为独立的主 CNI 兼容性检查,应包含:
MAIN_CNI_DNS_PASSEDMAIN_CNI_SERVICE_PASSEDMAIN_CNI_COMPAT_CHECKS_PASSED
网络与安全配置
Fake IP 与 Service CIDR
Agent CNI 使用节点级 Fake IP CIDR 为 Pod 分配地址。未配置
AgentNetworkClass 覆盖时,Installer 会按节点名派生不同的节点级 /24 CIDR;agentCNI.fakeIPCIDR 当前仅参与 Chart 参数校验,不作为 Installer 的有效 CIDR 下发参数。Service CIDR 流量必须 bypass ZeroProxy,交由 kube-proxy 和主 CNI 转发。Fake-IP Pod├── DNS(UDP/53)→ ZeroProxy DNS Proxy├── ClusterIP Service → fwmark bypass → kube-proxy / 主 CNI└── 其他 TCP → ZeroProxy 策略代理
出口治理与审计
ZeroProxy 对出站流量按以下优先级处理:
deny → credential → allow → 默认拒绝
建议:
默认只允许业务真正需要访问的域名;
AgentNetworkPolicy 使用 Secret valueFrom.name/key 引用;Controller 将其转换为运行时 valueFromFile,不写入 Agent Pod;对数据库、客户数据服务、Metadata 等敏感目标显式拒绝;
保留审计日志,并对异常 deny/credential 命中建立告警。
Direct Bypass
默认配置:
policy:directBypass:defaultAction: deny
建议保持默认拒绝,避免 Agent Pod 直连 Agent Fake-IP CIDR 内目标。其他 TCP 出站请求由 Egress 策略处理,未命中 Allow 或 Credential 规则时默认拒绝。
升级、卸载与回滚
升级
升级应遵循与安装相同的节点灰度原则:
1. 先在单节点 Canary 验证目标镜像和组件状态;
2. 运行 HTTP e2e 和真实 CNI e2e;
3. 再扩展到第二节点;
4. 确认双节点策略 reload、DNS/Service 与 rollback;
5. 再进入更多节点或更多地域。
升级前应记录当前 Addon 参数、策略 CR、AgentNetworkClass 和节点标签。
卸载
不能直接卸载 Addon 代替 CNI rollback。
正确顺序:
停止 agent-cni-installer→ 在 Canary 节点执行 rollback-agent-cni→ 检查宿主机残留→ 移除 Canary 标签→ 再卸载 Addon 或清理剩余组件
回滚残留检查
每个参与过 CNI 替换的 Worker 都必须确认以下项目不存在:
agentcni0 网桥AGENT-CNI iptables 规则/opt/cni/bin/agent-cni/etc/cni/net.d/00-agent-cni.conf/var/lib/tke-agent-network/agent-cni 状态文件
故障排查
安装后 agent-cni-installer 未就绪
检查:
kubectl get pod -n tke-agent-network-real -o widekubectl describe pod -n tke-agent-network-real <installer-pod>kubectl logs -n tke-agent-network-real <installer-pod>
常见原因:
现象 | 可能原因 | 处理方式 |
DaemonSet 为 0/0 | 节点未打 Canary 标签 | 仅对选定 Worker 添加 tke-agent-network.io/agent-cni-canary=true |
Chart 渲染失败 | 未提供 serviceCIDRs | 在 Installer 启用时传入集群真实 Service CIDR |
ImagePullBackOff | 镜像地址、公开权限或节点网络异常 | 核对团队镜像地址与节点拉取事件 |
preflight 失败 | CNI 路径、端口或主机环境不满足要求 | 查看 Installer preflight 日志 |
Pod 创建提示 PriorityClass 不存在 | 资源创建顺序短暂竞态 | 等待 DaemonSet 自动重试;持续失败时检查 PriorityClass 是否创建。 |
DNS 或 ClusterIP Service 不通
检查:
iptables -t nat -Siptables -t mangle -Skubectl get svc -A -o wide
重点确认:
agentCNI.serviceCIDRs 是否为真实 Service CIDR;AGENT-CNI-MANGLE 是否包含 Service CIDR 的 0x77 标记规则;AGENT-CNI-PREROUTING 是否在 mark 命中后 RETURN;agentcni0、ip_forward 和 rp_filter 是否正常。AgentNetworkPolicy 长时间不是 Active
检查:
kubectl get agentnetworkpolicy -A -o widekubectl logs -n tke-agent-network-real deploy/agent-network-controller --tail=200kubectl logs -n tke-agent-network-real ds/zeroproxy --tail=200
双 ZeroProxy 场景中,ConfigMap volume 投影可能短暂返回
409 policy version not yet projected。Controller 应重试并最终使 Policy 进入:phase=ActiveobservedGeneration=<当前 generation>
rollback 后仍有节点残留
不要仅删除 Addon。重新执行 rollback 并分别登录每个 Canary Worker 检查网桥、iptables、CNI 二进制、CNI 配置和 state 目录。
常见问题
Q1:agent-network 会替换整个集群的主 CNI 吗?
不会。组件只在带 Canary 标签的目标 Worker 上为后续新建并调度到该节点的 Pod 接入 Agent CNI;当前不按 Pod Label 选择性接入,因此应使用专用 Canary 节点。Service 流量仍交由 kube-proxy 和主 CNI 处理。跳板机节点和未打标签的 Worker 不参与替换。
Q2:为什么必须提供 Service CIDR?
Agent CNI 会将除 Service 旁路外的 TCP 流量重定向到 ZeroProxy。如果无法识别 ClusterIP Service 地址,Service 流量可能被错误送入 HTTP 策略路径,影响 Kubernetes 服务通信。因此安装前必须提供真实 Service CIDR。
Q3:为什么需要单节点和双节点 Canary?
单节点用于先验证安装、CNI 接管和最小数据面;双节点用于验证不同 Fake IP CIDR 分配、跨节点组件运行、Service 兼容,以及多 ZeroProxy Pod 的策略 reload 恢复能力。
Q4:HTTP e2e 和真实 CNI e2e 的区别是什么?
HTTP e2e 使用
hostNetwork Job 直接访问本机 ZeroProxy,验证策略、凭证注入和代理逻辑。真实 CNI e2e 使用非 hostNetwork Pod,验证 Fake IP、agentcni0、节点 iptables REDIRECT 和 ZeroProxy 的完整数据面链路。两者都应通过。Q5:卸载 Addon 后节点会自动恢复吗?
不保证。CNI 会修改宿主机网络状态,必须先执行 rollback 并完成残留检查;直接卸载 Addon 不可替代节点级回滚。
Q6:可以把测试用 token 和 upstream 直接用于生产吗?
不可以。完整 demo/e2e 使用的是测试 token、测试域名和本地测试 upstream。生产环境应接入真实业务上游、使用受控 Secret,并按最小权限配置策略。
参数与内部组件参考
常用安装参数
参数 | 类型 | 默认值 | 说明 |
canaryLabel.key | string | tke-agent-network.io/agent-cni-canary | 选择 Canary 节点的标签 Key |
canaryLabel.value | string | true | 选择 Canary 节点的标签 Value |
agentCNI.installerEnabled | bool | true | 是否创建真实 CNI Installer DaemonSet |
agentCNI.serviceCIDRs | string array | [] | 集群真实 Service CIDR;Installer 启用时必填 |
agentCNI.fakeIPCIDR | string | 169.254.77.0/24 | 当前仅参与 Chart 参数校验;未配置 NetworkClass 覆盖时,实际节点 CIDR 按节点名派生 |
agentCNI.zeroProxyPort | int | 18080 | TCP 重定向目标端口 |
zeroproxy.dnsProxy.listen | string | :18053 | DNS Proxy 监听地址 |
zeroproxy.reload.enabled | bool | false | 是否启用 Controller 到 ZeroProxy 的策略热加载认证接口 |
credentialUpstream.enabled | bool | false | 是否部署测试用凭证验证上游 |
controller.enabled | bool | true | 是否启用 CRD Controller |
rollback.enabled | bool | false | 是否渲染临时 CNI rollback DaemonSet |
内部组件说明
层次 | 组件 | 职责 |
节点数据面 | agent-cni-installer | 安装/运行 Agent CNI,配置网桥、iptables、sysctl 和 CNI 状态。 |
节点数据面 | agent-cni | 由 kubelet 调用的真实 CNI 二进制,处理 Pod ADD/DEL/CHECK。 |
节点代理 | zeroproxy | Egress、Ingress、Credential、DNS、Direct Bypass、审计和 metrics。 |
控制面 | agent-network-controller | 调和 AgentNetworkPolicy / AgentNetworkClass,更新 ConfigMap 并协调 reload。 |
测试依赖 | credential-upstreams | 完整 e2e 中验证凭证注入的受保护测试上游。 |
验证工具 | agent-network-e2e | HTTP、真实 CNI、DNS/Service 和 Agent demo 验证 Job。 |
临时回滚组件 | rollback-agent-cni | 仅在 rollback.enabled=true 时运行,用于清理节点 CNI 数据面。 |