Skip to main content

安装

概述​

Kruise Agents 通过两个 Helm Chart 安装,分别部署 Sandbox Controller 与 Sandbox Manager,其中 Manager chart 还内置了 Sandbox Gateway,共同构成完整的 Sandbox 运行环境。

  • Sandbox Controller(agents-sandbox-controller chart)是管理全部 Sandbox CRD 资源的控制面,chart 中包含:
    • 8 个 agents.kruise.io CRD:Sandbox、SandboxSet、SandboxClaim、SandboxTemplate、SandboxUpdateOps、 Checkpoint、Commit 和 PoolAutoscaler;
    • 负责调谐这些资源的 sandbox-controller Deployment:Sandbox 生命周期管理、预热池维护、Sandbox 申领、 原地升级、Checkpoint/Commit 以及池自动扩缩容;
    • Mutating/Validating Webhook、RBAC、ServiceAccount 以及 metrics Service;
    • sandbox-injection-config ConfigMap,定义 agent-runtime sidecar 与每个 Sandbox 的 traffic-proxy 注入模板;
    • 启用 enableTLS=true 时可选创建的 TLS 资源:共享根 CA、运行时客户端/服务端证书以及 trust-manager CA bundle。
  • Sandbox Manager(agents-sandbox-manager chart)是 Sandbox 的数据面组件,同时提供 E2B API 的适配服务, chart 中包含:
    • sandbox-manager Deployment 及其 Service、Secret 和 Ingress 资源;
    • Sandbox Gateway Deployment:基于 Envoy + Golang Filter 的数据面,负责流量路由、负载均衡与熔断保护, 可与 Manager 独立扩缩容;
    • 启用 prometheus.enabled=true 时可选创建的 ServiceMonitor,采集 Manager 与 Gateway 指标;
    • 启用 enableTLS=true 时可选创建的 TLS 资源:Ingress 服务端证书、运行时客户端证书以及 manager↔gateway peer 证书;
    • 可选的嵌入式 Agentio 组件(agentio.enabled,默认关闭),提供 Sandbox 出入向流量管控:agentiod 控制面、EPE 流量扩展组件和 egress gateway;
    • 描述 Sandbox 出入向流量策略的 TrafficPolicy、GlobalTrafficPolicy、SecurityProfile、 GlobalSecurityProfile CRD,随 chart 一起安装。

版本兼容性​

Sandbox 组件版本Kubernetes 版本E2B 版本
0.6.0>= 1.28>= 2.8.0

说明:

  • agent-runtime sidecar 注入需要 Kubernetes >= 1.29(native sidecar containers),参见 Agent Runtime 注入。
  • enableTLS=true 需要集群安装 cert-manager,以及用于 CA bundle 的 trust-manager。

前置条件​

  1. Kubernetes 集群版本 >= 1.28(如使用 agent-runtime sidecar 注入则需 >= 1.29)
  2. 已安装 Helm v3.5+
  3. 手动创建 Namespace(见下文安装步骤)
  4. 如果启用 TLS(enableTLS=true),集群需安装 cert-manager 和 trust-manager

通过 Helm 安装​

1. 添加 OpenKruise Charts 仓库​

## 添加 openkruise charts 仓库
helm repo add openkruise https://openkruise.github.io/charts/

## 更新仓库(如果已经安装过openkruise charts仓库)
helm repo update

2. 安装 Sandbox Controller​

手动创建 Namespace

kubectl create ns sandbox-system

安装顺序:Sandbox Controller 必须先于 Sandbox Manager 安装,因为它提供了 Sandbox Manager 所需的 CRD 资源。

helm install agents-sandbox-controller openkruise/agents-sandbox-controller \
-n sandbox-system \
--version 0.6.0

⚠️ 不支持 server-side apply:sandbox-controller 会在运行时以自己的 field manager(manager)管理 mutating 和 validating webhook configuration 上的 template annotation。使用 Kubernetes server-side apply 应用 chart 会争抢该 annotation,并报出 Apply failed with 1 conflict: conflict with "manager" 之类的字段所有权冲突。请不要给 helm install / helm upgrade 传 --server-side(Helm 3 默认使用 client-side apply)。如果你使用 Helm 4 或其他 默认走 SSA 的工具,请关闭 SSA。

3. 安装 Sandbox Manager​

必填参数说明:以下参数在安装时必须显式指定:

  • e2b.domain:E2B 协议域名(会为 api.<domain>、*.<domain> 和 <domain> 创建 Ingress)
  • e2b.adminApiKey:E2B 管理员 API Key,用于认证
  • ingress.className:Ingress 控制器类名(如 nginx、alb 等,取决于集群的 Ingress 实现)
helm install agents-sandbox-manager openkruise/agents-sandbox-manager \
-n sandbox-system \
--version 0.6.0 \
--set e2b.domain=<your-domain> \
--set e2b.adminApiKey=<your-api-key> \
--set ingress.className=<your-ingress-class>

说明:Sandbox Manager chart 会同时部署 Sandbox Gateway,无需额外安装。Ingress 将控制面流量(api.<domain>)路由到 Sandbox Manager Service(端口 8080),将数据面流量(<domain> 和 *.<domain>)路由到 Sandbox Gateway Service(端口 7788)。


使用国内镜像源​

由于网络原因,国内用户可能无法直接从 Docker Hub 拉取镜像。建议使用阿里云容器镜像服务提供的国内镜像。

国内镜像地址​

组件镜像地址版本
Sandbox Controlleropenkruise-registry.cn-shanghai.cr.aliyuncs.com/openkruise/agent-sandbox-controllerv0.6.0
Sandbox Manageropenkruise-registry.cn-shanghai.cr.aliyuncs.com/openkruise/sandbox-managerv0.6.0
Sandbox Gatewayopenkruise-registry.cn-shanghai.cr.aliyuncs.com/openkruise/sandbox-gatewayv0.6.0

使用国内镜像安装​

两个 chart 中的所有镜像都通过 chart 级别的 image.registry 解析,因此一个参数即可把所有镜像(Controller、Manager、 Gateway,以及 agent-runtime、Commit job 等辅助镜像)切换到国内镜像。

安装 Sandbox Controller(使用国内镜像)

helm install agents-sandbox-controller openkruise/agents-sandbox-controller \
-n sandbox-system \
--version 0.6.0 \
--set image.registry=openkruise-registry.cn-shanghai.cr.aliyuncs.com

安装 Sandbox Manager(使用国内镜像)

helm install agents-sandbox-manager openkruise/agents-sandbox-manager \
-n sandbox-system \
--version 0.6.0 \
--set e2b.domain=<your-domain> \
--set e2b.adminApiKey=<your-api-key> \
--set ingress.className=<your-ingress-class> \
--set image.registry=openkruise-registry.cn-shanghai.cr.aliyuncs.com

说明:

  • Agentio 镜像的 registry 解析会先取 agentio.global.registry,两者都未设置时回退到 image.registry。
  • 如果镜像 repository 本身已以主机名开头(例如 registry.cn-beijing.aliyuncs.com/acs/busybox),则会绕过 chart 级别的 registry,这在镜像源不包含某个辅助镜像时非常有用。
  • 如需启用使用国内镜像 busybox 的 Gateway 初始化容器,请额外添加:
    --set gateway.initContainer.enabled=true \
    --set gateway.initContainer.image.repository=registry.cn-beijing.aliyuncs.com/acs/busybox \
    --set gateway.initContainer.image.tag=1.36.1

通过 Helm 升级​

升级 Sandbox Controller​

helm upgrade agents-sandbox-controller openkruise/agents-sandbox-controller \
-n sandbox-system \
--version 0.6.0 \
--server-side=false

升级 Sandbox Manager​

helm upgrade agents-sandbox-manager openkruise/agents-sandbox-manager \
-n sandbox-system \
--version 0.6.0

注意:

  1. 升级顺序:先升级 Sandbox Controller,再升级 Sandbox Manager,确保 CRD 兼容。
  2. 在升级之前,必须先阅读 Change Log ,确保你已经了解新版本的不兼容变化。
  3. 如果你要重置之前旧版本上用的参数或者配置一些新参数,建议在 helm upgrade 命令里加上 --reset-values。
  4. 必须传 --server-side=false。sandbox-controller 在运行时以自己的 field manager(manager)管理 webhook 的 template annotation,server-side apply 会竞争同一个 annotation 并因字段所有权冲突而失败(报错形如 Apply failed with 1 conflict: conflict with "manager" ...)。Helm 3 默认使用 client-side apply,但 Helm 4 和部分 CI 工具默认使用 server-side apply,因此需要显式指定该参数,强制走 client-side apply。

手动更新 CRD(必须)​

Helm upgrade 不会自动更新 crds/ 目录下的 CRD 定义,因此必须在执行 helm upgrade 之前手动应用新的 CRD,否则新功能将无法正常工作。0.6.0 版本新增了 Commit 和 PoolAutoscaler CRD,并更新了已有 CRD 的 schema。

# 从 chart 包中提取 CRD 并应用(以在线安装为例)
helm pull openkruise/agents-sandbox-controller --version 0.6.0 --untar
kubectl apply -f agents-sandbox-controller/crds/
rm -rf agents-sandbox-controller

0.6.0 版本 CRD 的主要变化包括:

  • 新增 Commit CRD(commits.agents.kruise.io):通过 job 将 Sandbox 文件系统状态提交为容器镜像
  • 新增 PoolAutoscaler CRD(poolautoscalers.agents.kruise.io):基于容量和 cron 驱动的 SandboxSet 池自动扩缩容
  • SandboxSet 增强:新增 PauseStrategy(Stop / Snapshot / CloudDisk)配置

说明:Sandbox Manager chart 提供的流量和安全 CRD(trafficpolicies.agents.kruise.io、 globaltrafficpolicies.agents.kruise.io、securityprofiles.agents.kruise.io、 globalsecurityprofiles.agents.kruise.io)是以模板形式渲染的,而不是放在 crds/ 目录下,因此会在 helm upgrade 时自动更新,无需手动处理。


手工下载 Charts 包​

如果你在生产环境无法连接到 https://openkruise.github.io/charts/,可以先在 GitHub Releases 手工下载 chart 包,再用它安装或更新到集群中。

helm install/upgrade agents-sandbox-controller /PATH/TO/CONTROLLER/CHART -n sandbox-system
helm install/upgrade agents-sandbox-manager /PATH/TO/MANAGER/CHART -n sandbox-system

可选项​

Sandbox Controller 安装参数​

下表展示了 Sandbox Controller chart 的可配置参数和它们的默认值。

常用参数​

ParameterDescriptionDefault
replicaCountController 副本数2
image.registry应用于本 chart 所有镜像的仓库地址前缀docker.io
image.repositorysandbox-controller 镜像仓库openkruise/agent-sandbox-controller
image.tagsandbox-controller 镜像版本v0.6.0
image.pullPolicyController 镜像拉取策略IfNotPresent
imagePullSecrets镜像拉取密钥列表[]
namespace.name部署的命名空间sandbox-system
resources.limits.cpuController CPU 资源限制2
resources.limits.memoryController 内存资源限制4Gi
resources.requests.cpuController CPU 资源请求2
resources.requests.memoryController 内存资源请求4Gi
webhook.portWebhook 服务端口9443
metrics.portMetrics 服务端口(HTTPS,认证/鉴权委托给 kube-apiserver)8443
healthProbe.port健康检查端口8081
controller.featureGates逗号分隔的 --feature-gates key=value 列表(如 Foo=true,Bar=false);为空时不设置该参数""

说明:用 --set 指定多个 feature gate 时,需要把值里的每个逗号转义为 \,,并用单引号把整个参数括起来, 让 shell 保留反斜杠:

--set 'controller.featureGates=Commit=true\,KruiseIntegration=true'

--set 会按未被转义的逗号拆分参数,因此不转义时 Helm 会把 KruiseIntegration=true 当成另一个顶层赋值处理, 该 gate 会被静默丢弃,不会生效。

高级参数​

其余参数均为可选,默认值已经过合理设置,大多数安装无需修改。

ParameterDescriptionDefault
controller.workers.sandboxWorkersSandbox reconciler 的并发 worker 数200
controller.workers.sandboxsetWorkersSandboxSet reconciler 的并发 worker 数10
controller.workers.sandboxclaimWorkersSandboxClaim reconciler 的并发 worker 数200
controller.workers.sandboxupdateopsWorkersSandboxUpdateOps reconciler 的并发 worker 数5
controller.workers.poolautoscalerWorkersPoolAutoscaler reconciler 的并发 worker 数3
controller.workers.commitWorkersCommit reconciler 的并发 worker 数5
controller.clientQPSKubernetes API 客户端 QPS 限流30000
controller.clientBurstKubernetes API 客户端 burst 限流60000
metrics.rbac.create创建 ClusterRole,授予 /metrics nonResourceURL 的 get 权限;可绑定到你的 Prometheus / ARMS 采集器 ServiceAccounttrue
nameOverride覆盖 Chart 名称""
fullnameOverride覆盖完整名称""
serviceAccount.create是否创建 ServiceAccounttrue
serviceAccount.automount是否自动挂载 ServiceAccount Tokentrue
serviceAccount.annotationsServiceAccount 注解{}
serviceAccount.nameServiceAccount 名称""
rbac.create是否创建 RBAC 资源true
podAnnotationsPod 注解{}
podLabelsPod 标签{}
podSecurityContextPod 安全上下文{runAsNonRoot: true, seccompProfile: {type: RuntimeDefault}}
securityContext容器安全上下文{allowPrivilegeEscalation: false, capabilities: {drop: [ALL], add: [NET_BIND_SERVICE]}, readOnlyRootFilesystem: true}
nodeSelectorPod 调度的节点选择器{}
tolerationsPod 调度的容忍度[]
affinityPod 调度的亲和性{}
agentRuntime.image.repository注入的 agent-runtime sidecar 镜像仓库openkruise/agent-runtime
agentRuntime.image.tag注入的 agent-runtime sidecar 镜像版本v0.3.0
agentRuntime.image.pullPolicy注入的 agent-runtime sidecar 镜像拉取策略IfNotPresent
commitJob.image.repositoryCommit job Pod 的镜像仓库openkruise/commit-job
commitJob.image.tagCommit job Pod 的镜像版本v0.6.0
enableTLS基于 cert-manager / trust-manager 的 TLS 总开关;为 false 时 templates/tls/ 下的内容不会渲染,Controller 保持明文运行行为false
tls.createCA创建共享根 CA(selfSigned Issuer → CA Certificate → CA Issuer)。根 CA 由 Controller chart 持有;sandbox-manager chart 将此值设为 false 并通过名称引用该 Issuertrue
tls.selfSignedIssuerName自签名引导 Issuer 名称sandbox-selfsigned-issuer
tls.caCertificateNameCA Certificate 资源名称sandbox-ca
tls.caSecretName存放 CA 密钥对的 Secret(tls.crt/tls.key);同时作为 trust-manager Bundle 的来源和 CA Issuer 的签名材料sandbox-ca-key-pair
tls.signingIssuerName用于签发叶子证书的 CA Issuer 名称sandbox-signing-issuer
tls.caCommonNameCA 证书 Common Namesandbox-ca
tls.caOrganizationCA 证书 Organizationopenkruise
tls.caDurationCA 证书有效期87600h(10 年)
tls.certDuration叶子证书有效期2160h(90 天)
tls.certRenewBefore叶子证书续期窗口360h(15 天)
tls.runtime.enabled签发 runtime 客户端/服务端证书并启用客户端 TLS 路径(--runtime-client-cert-dir 以及 agent-runtime sidecar 的 TLS 环境变量)。对不支持 TLS 的 agent-runtime 会失败;依赖 enableTLSfalse
tls.runtimeClientCertNameController → agent-runtime 客户端 Certificate 资源名称sandbox-controller-runtime-client
tls.runtimeClientCertSecretNameController 客户端证书 Secret 名称sandbox-controller-runtime-client-cert
tls.runtimeClientCommonNameController 客户端证书 Common Namesystem:sandbox-controller-manager
tls.runtimeClientCertDir--runtime-client-cert-dir 的挂载点;该 volume 会把 tls.crt/tls.key/ca.crt 重映射为 client.crt/client.key/ca.crt/etc/agent-runtime-client/certs
tls.agentRuntimeServerCertNameagent-runtime 服务端 Certificate 资源名称sandbox-agent-runtime-server
tls.agentRuntimeServerCertSecretNameagent-runtime 服务端证书 Secret 名称sandbox-agent-runtime-server-certs
tls.agentRuntimeServerSANgateway/controller/manager 访问 runtime 时使用的 SANagentruntime.sandbox.agents.kruise.io
tls.bundle.enabled创建 trust-manager Bundle,将 CA 以 ca.crt ConfigMap 形式分发true
tls.bundle.nametrust-manager Bundle 名称sandbox-ca-bundle
tls.bundle.configMapKey分发 ConfigMap 中存放 CA 的 keyca.crt
tls.bundle.namespaceSelector限定 CA ConfigMap 写入范围的 Namespace 选择器;为空表示选择所有 Namespace{}
agentio.trafficProxy.controlPlaneNamespaceAgentio 控制面所在的 Namespacesandbox-system
agentio.trafficProxy.controlPlaneServiceAgentio 控制面 Service 名称agentiod
agentio.trafficProxy.xdsAddress显式指定 XDS 地址;为空时根据 Service 和 Namespace 生成""
agentio.trafficProxy.caAddress显式指定 CA 地址;为空时根据 Service 和 Namespace 生成""
agentio.trafficProxy.caCertConfigMap挂载到注入工作负载 Namespace 中的 CA ConfigMapagentio-ca-root-cert
agentio.trafficProxy.clusterId上报给控制面的集群标识Kubernetes
agentio.trafficProxy.clusterDomainKubernetes Service DNS 域名cluster.local
agentio.trafficProxy.tokenAudienceProjected workload token 的 audienceagentio-ca
agentio.trafficProxy.includeInboundPortstraffic proxy 拦截的入站端口*
agentio.trafficProxy.includeOutboundIPRangestraffic proxy 拦截的出站 IP 范围*
agentio.trafficProxy.includeOutboundPortstraffic proxy 拦截的出站端口""
agentio.trafficProxy.excludeInboundPorts不拦截的入站端口""
agentio.trafficProxy.excludeOutboundIPRanges不拦截的出站 IP 范围""
agentio.trafficProxy.excludeOutboundPorts不拦截的出站端口""
agentio.trafficProxy.enableFirewallRules启用 traffic-proxy 防火墙规则true
agentio.trafficProxy.firewallBackend防火墙后端选择auto
agentio.trafficProxy.imagePullPolicytraffic-proxy 镜像拉取策略IfNotPresent
agentio.trafficProxy.healthProbeRewrite为注入的 traffic proxy 重写健康检查探针true
agentio.trafficProxy.dnsCapture启用 DNS 拦截true
agentio.trafficProxy.image.registry注入的 ztunnel 镜像仓库;为空时继承 image.registry""
agentio.trafficProxy.image.repository注入的 ztunnel 镜像仓库openkruise/ztunnel
agentio.trafficProxy.image.tag注入的 ztunnel 镜像版本0.2.0
agentio.trafficProxy.image.digest可选的 digest 覆盖,优先级高于 tag""
agentio.trafficProxy.initImage.registry注入的 iptables init 镜像仓库;为空时继承 image.registry""
agentio.trafficProxy.initImage.repository注入的 iptables init 镜像仓库openkruise/proxy-init
agentio.trafficProxy.initImage.tag注入的 iptables init 镜像版本0.2.0
agentio.trafficProxy.initImage.digest可选的 digest 覆盖,优先级高于 tag""
agentio.trafficProxy.resources注入的 ztunnel 资源requests: 100m/64Mi, limits: 200m/128Mi
agentio.trafficProxy.initResources注入的 iptables init 资源requests: 100m/128Mi, limits: 1/1Gi

Sandbox Manager 安装参数​

下表展示了 Sandbox Manager chart 的可配置参数和它们的默认值。

常用参数​

ParameterDescriptionDefault
replicaCountManager 副本数2
image.registry应用于本 chart 所有镜像的仓库地址前缀docker.io
imagePullSecrets镜像拉取密钥列表{}
controller.repositorysandbox-manager controller 镜像仓库openkruise/sandbox-manager
controller.tagsandbox-manager controller 镜像版本v0.6.0
controller.pullPolicyController 容器镜像拉取策略IfNotPresent
controller.resources.cpuController 容器 CPU 资源2
controller.resources.memoryController 容器内存资源4Gi
e2b.domainE2B 协议域名(必填)"your.domain.com"
e2b.enableAuth是否启用 E2B 认证true
e2b.adminApiKeyE2B 管理员 API Key(必填)""
ingress.classNameIngress 控制器类名(必填)""
ingress.annotationsIngress 注解{}
prometheus.enabled为 manager 和 gateway 指标创建 ServiceMonitorfalse
gateway.replicaCountsandbox-gateway 副本数2
gateway.image.repositorysandbox-gateway 镜像仓库openkruise/sandbox-gateway
gateway.image.tagsandbox-gateway 镜像版本v0.6.0
gateway.image.pullPolicysandbox-gateway 镜像拉取策略IfNotPresent
gateway.resources.cpusandbox-gateway 容器 CPU 资源2
gateway.resources.memorysandbox-gateway 容器内存资源4Gi

高级参数​

其余参数均为可选,默认值已经过合理设置,大多数安装无需修改。

ParameterDescriptionDefault
controller.logLevelController 日志级别5
controller.infraSandbox Manager 基础设施类型sandbox-cr
controller.hostNetworkController 是否使用 Host Networkfalse
controller.maxClaimWorkers最大 Claim 工作线程数100
controller.maxCreateQPS创建 Sandbox 的最大 QPS200
controller.extProcMaxConcurrency外部处理器最大并发数10000
controller.enableShortSandboxId启用简短易读的 Sandbox 标识符true
controller.shortSandboxIdPrefix短 Sandbox ID 的可选前缀;仅在非空时生效""
e2b.extraDomains在 e2b.domain 之外额外加入 Ingress host 列表的域名[]
e2b.maxTimeoutE2B 最大超时时间(秒)2592000
e2b.keyStorage.modeE2B API Key 的存储位置:secret(e2b-key-store Secret)或 mysqlsecret
e2b.keyStorage.mysql.dsnMySQL DSN;当 keyStorage.mode=mysql 时必填(非空),启动时校验""
e2b.keyStorage.mysql.hashPepperMySQL Key 哈希 pepper;当 keyStorage.mode=mysql 时必填(非空),启动时校验""
quota.enabled启用基于 Redis 的配额统计false
quota.redis.addr配额使用的 Redis 地址;仅在启用时传给 manager""
quota.redis.db配额使用的 Redis 数据库编号0
quota.redis.usernameRedis 用户名(渲染到 manager Secret 中)""
quota.redis.passwordRedis 密码(渲染到 manager Secret 中)""
service.typesandbox-manager Service 类型ClusterIP
ingress.dataplaneServiceIngress 的数据面后端 Service 名称sandbox-gateway
ingress.certSecretNameIngress TLS 证书 Secret 名称sandbox-manager-tls
nameOverride覆盖 Chart 名称""
fullnameOverride覆盖完整名称""
serviceAccount.automount是否自动挂载 ServiceAccount Tokentrue
serviceAccount.annotationsServiceAccount 注解{}
serviceAccount.nameServiceAccount 名称""
podAnnotationsPod 注解{}
podLabelsPod 标签{}
podSecurityContextPod 安全上下文{fsGroup: 2000, seccompProfile: {type: RuntimeDefault}}
securityContext容器安全上下文{capabilities: {drop: [ALL], add: [NET_BIND_SERVICE]}, readOnlyRootFilesystem: true, allowPrivilegeEscalation: false, runAsNonRoot: true, runAsUser: 65532}
nodeSelectorPod 调度的节点选择器{}
tolerationsPod 调度的容忍度[]
affinityPod 调度的亲和性默认配置软性 Pod 反亲和(preferredDuringSchedulingIgnoredDuringExecution),按主机名分散调度
gracefulShutdown.preStopSleepSeconds终止前 preStop 钩子中的睡眠时间;大于 0 时同时提升 terminationGracePeriodSeconds0
gateway.imagePullSecretsGateway 镜像拉取密钥列表[]
gateway.nameOverride覆盖 gateway 名称""
gateway.serviceAccount.annotationsGateway ServiceAccount 注解{}
gateway.serviceAccount.nameGateway ServiceAccount 名称""
gateway.podAnnotationsGateway Pod 注解{}
gateway.podSecurityContextGateway Pod 安全上下文{}
gateway.securityContextGateway 容器安全上下文{}
gateway.initContainer.enabled是否启用 Gateway 初始化容器false
gateway.initContainer.image.repository初始化容器镜像仓库busybox
gateway.initContainer.image.tag初始化容器镜像版本1.36.1
gateway.initContainer.image.pullPolicy初始化容器镜像拉取策略IfNotPresent
gateway.initContainer.securityContext初始化容器安全上下文{capabilities: {drop: [ALL], add: [SYS_ADMIN]}}
gateway.service.typesandbox-gateway Service 类型ClusterIP
gateway.service.portsandbox-gateway Service 端口7788
gateway.service.targetPortsandbox-gateway Service 目标端口7788
gateway.service.annotationsGateway Service 注解{}
gateway.service.labelsGateway Service 标签{}
gateway.nodeSelectorGateway Pod 调度的节点选择器{}
gateway.tolerationsGateway Pod 调度的容忍度[]
gateway.affinityGateway Pod 调度的亲和性{}
gateway.livenessProbeGateway 存活探针(TCP 端口 7788)initialDelay: 10s, period: 10s, timeout: 5s, failureThreshold: 3
gateway.readinessProbeGateway 就绪探针(TCP 端口 7788)initialDelay: 5s, period: 5s, timeout: 3s, failureThreshold: 3
gateway.podAntiAffinityGateway Pod 反亲和性soft, weight: 100, topologyKey: kubernetes.io/hostname
gateway.envoy.admin.addressEnvoy 管理接口地址127.0.0.1
gateway.envoy.admin.portEnvoy 管理接口端口9901
gateway.envoy.prometheus.enabled对外暴露 Envoy Prometheus 指标(代理 admin 的 /stats/prometheus)false
gateway.envoy.prometheus.addressEnvoy Prometheus 监听地址0.0.0.0
gateway.envoy.prometheus.portEnvoy Prometheus 监听端口9902
gateway.envoy.prometheus.pathEnvoy Prometheus 指标路径/metrics
gateway.envoy.listener.addressEnvoy 监听地址0.0.0.0
gateway.envoy.listener.portEnvoy 监听端口7788
gateway.envoy.logLevelEnvoy 日志级别warn
gateway.envoy.concurrencyEnvoy worker 线程并发数;为空时回退到 gateway.resources.cpu""
gateway.envoy.drainTimeSecondsEnvoy 关闭时的排水时间30
gateway.envoy.streamIdleTimeoutEnvoy 流空闲超时时间600s
gateway.envoy.connectTimeoutEnvoy 上游连接超时时间5s
gateway.envoy.useDownstreamProtocolConfig将下游协议配置应用于上游连接false
gateway.envoy.perConnectionBufferLimitBytes单连接缓冲区上限1048576
gateway.envoy.circuitBreakersEnvoy 熔断阈值enabled: true, maxConnections: 80000, maxPendingRequests: 32768, maxRequests: 80000, maxRetries: 5
gateway.envoy.tcpKeepaliveEnvoy 上游 TCP keepaliveenabled: false, keepaliveProbes: 3, keepaliveTime: 60, keepaliveInterval: 10
gateway.envoy.golangFilterGateway golang filter 库libraryId/pluginName: sandbox-gateway, libraryPath: /etc/envoy/sandbox-gateway.so
gateway.envoy.pluginConfig.hostHeaderName携带上游 host 的 HeaderHost
gateway.envoy.pluginConfig.sandboxHeaderName携带 Sandbox ID 的 Headere2b-sandbox-id
gateway.envoy.pluginConfig.sandboxPortHeader携带 Sandbox 端口的 Headere2b-sandbox-port
gateway.envoy.pluginConfig.defaultPort未携带 sandbox port header 时使用的默认端口"49983"
gateway.envoy.pluginConfig.enableAuth在 gateway plugin 中强制流量 access-token 认证true
gateway.envoy.pluginConfig.trafficAccessTokenHeader携带流量 access token 的 Headere2b-traffic-access-token
gateway.envoy.pluginConfig.enableJwtAuth启用 OIDC/JWT 校验;需要同时配置 tls.oidc.discoveryUrlfalse
gateway.envoy.pluginConfig.wakeTimeoutSeconds等待休眠 Sandbox 唤醒的超时时间60
enableTLS基于 cert-manager/trust-manager 的 TLS 总开关。会签发 Ingress 服务端证书、manager/gateway 的 runtime 客户端证书、peer 证书,并在 gateway envoy 配置中启用 runtime mTLS。共享根 CA 由 sandbox-controller chart 持有,必须安装在同一 Namespacefalse
tls.signingIssuerName由 sandbox-controller chart 创建的 CA Issuer(同一 Namespace);此处不创建sandbox-signing-issuer
tls.signingIssuerKind引用的 issuer 的 KindIssuer
tls.caCommonNameIngress 证书 Common Name;同时作为已签发证书的 subject organizationsandbox-ca
tls.caOrganization已签发证书的 subject organizationopenkruise
tls.certDuration叶子证书有效期2160h
tls.certRenewBefore叶子证书续期窗口360h
tls.ingressCertNameIngress 服务端 Certificate 资源;其 Secret 名称必须与 ingress.certSecretName 一致。仅由 enableTLS 即可提供,对明文 runtime 安全sandbox-manager-ingress-cert
tls.runtime.enabled签发 manager/gateway 的 runtime 客户端证书并启用 --runtime-client-cert-secret 以及 gateway 的 enable-runtime-mtls/transport_socket。对不支持 TLS 的 agent-runtime 会失败;依赖 enableTLS;需与 Controller chart 的 tls.runtime.enabled 同步设置false
tls.managerRuntimeClientCertNameManager runtime 客户端 Certificate 名称sandbox-manager-runtime-client
tls.managerRuntimeClientCertSecretNameManager runtime 客户端证书 Secret 名称sandbox-manager-runtime-client-cert
tls.managerRuntimeClientCommonNameManager runtime 客户端证书 Common Namesystem:sandbox-manager
tls.gatewayRuntimeClientCertNameGateway runtime 客户端 Certificate 名称sandbox-gateway-runtime-client
tls.gatewayRuntimeClientCertSecretNameGateway runtime 客户端证书 Secret 名称sandbox-gateway-runtime-client-cert
tls.gatewayRuntimeClientCommonNameGateway runtime 客户端证书 Common Namesystem:sandbox-gateway
tls.gatewayRuntimeMtlsDirgateway runtime mTLS Secret 的挂载目录;由 envoy transport_socket 引用/var/run/sandbox-gateway/runtime-mtls
tls.agentRuntimeServerSANagent-runtime 服务端证书携带的 SAN;用作 envoy SNI 并通过 auto_sni_san_validation 校验。必须与 Controller chart 保持一致agentruntime.sandbox.agents.kruise.io
tls.peer.enabledmanager↔gateway 控制面集群的 peer mTLS + memberlist gossip 加密。与 agent-runtime 数据链路相互独立;依赖 enableTLS 以及包含 openkruise/agents#967 的镜像(旧版 sandbox-manager 镜像遇到未知的 --peer-* 参数会崩溃)false
tls.peer.serverCertName / serverCertSecretNamemanager 与 gateway 共享的 peer TLS 服务端证书(仅服务端认证;SAN 固定为 tls.agentRuntimeServerSAN)sandbox-peer-server / sandbox-peer-server-cert
tls.peer.managerClientCertName / managerClientCertSecretName / managerClientCommonNameManager peer 客户端证书(仅客户端认证)sandbox-peer-manager-client / sandbox-peer-manager-client-cert / system:sandbox-manager
tls.peer.gatewayClientCertName / gatewayClientCertSecretName / gatewayClientCommonNameGateway peer 客户端证书(仅客户端认证)sandbox-peer-gateway-client / sandbox-peer-gateway-client-cert / system:sandbox-gateway
tls.peer.keySecretName用于 memberlist gossip 加密的已有 Secret(数据 key 为 key,恰好 32 字节);为空则禁用。cert-manager 无法创建该 Secret,需在带外提供,并由 manager 和 gateway 共同引用""
tls.peer.allowedClientCNs可选,逗号分隔的入站白名单,与客户端证书 CN 或 DNS SAN 匹配;为空表示接受 peer 服务端 CA 信任的所有客户端""
tls.oidc.discoveryUrlToken 签发方的绝对 HTTPS discovery URL;启用 JWT 认证时必填,为空时 verifier 初始化失败""
tls.oidc.caConfigMapName / caConfigMapKey存放用于校验签发方 TLS 证书的 CA 的 ConfigMap;默认指向 Controller chart 创建的 trust-manager Bundlesandbox-ca-bundle / ca.crt
tls.oidc.clockSkew可选的 token 时钟偏移覆盖(如 1m);为空时使用默认值""
tls.epe.enabled签发 traffic-extension(EPE)credential-provider 客户端证书;依赖 agentio.epe.mode=managed 和 agentio.epe.credentialProvider.mtls.source=filesfalse
tls.epe.certificateName / commonNameCertificate 资源 / Common Name;为空时默认为 <epe-fullname>-mtls-client-cert / system:<epe-fullname>""
tls.epe.issuerName / issuerKind / issuerGroup签发 EPE 客户端证书的 Issuer;命名空间内默认 Issuer 仅在 agentio 命名空间同样持有 CA Issuer 时可用sandbox-signing-issuer / Issuer / cert-manager.io
tls.epe.duration / renewBeforeEPE 证书有效期 / 续期窗口2160h / 360h
agentio.enabled部署内置的 Agentio 控制面false
agentio.global.registryAgentio 镜像的默认仓库;为空时继承 image.registry""
agentio.global.tagAgentio 镜像的默认 tag,可按组件覆盖0.2.0
agentio.global.imagePullPolicyAgentio 镜像的默认拉取策略IfNotPresent
agentio.global.imagePullSecretsAgentio 镜像的默认拉取密钥[]
agentio.global.namespaceAgentio 控制面 Namespacesandbox-system
agentio.global.createNamespace创建 Agentio 控制面 Namespacetrue
agentio.global.trustDomainAgentio 工作负载身份 trust domaincluster.local
agentio.global.clusterDomainKubernetes Service DNS 域名cluster.local
agentio.global.clusterIdAgentio 集群标识Kubernetes
agentio.global.caCertConfigMap分发 Agentio mesh 根 CA 的 ConfigMapagentio-ca-certs
agentio.agentiod.ca.trustBundleConfigMapName分发给 traffic proxy 的 CA trust bundleagentio-ca-root-cert
agentio.agentiod.replicaCountAgentio 控制面副本数1
agentio.agentiod.image.registryAgentio 控制面镜像仓库;为空时继承 agentio.global.registry""
agentio.agentiod.image.repositoryAgentio 控制面镜像仓库openkruise/agentiod
agentio.agentiod.image.tagAgentio 控制面镜像版本0.2.0
agentio.agentiod.image.digest可选的 digest 覆盖,优先级高于 tag""
agentio.agentiod.resources控制面资源请求500m CPU, 512Mi
agentio.epe.modeEPE 部署模式:disabled、managed 或 externalmanaged
agentio.epe.image.registryEPE 镜像仓库;为空时继承 agentio.global.registry""
agentio.epe.image.repositoryEPE 镜像仓库openkruise/agentio-epe
agentio.epe.image.tagEPE 镜像版本0.2.0
agentio.epe.image.digest可选的 digest 覆盖,优先级高于 tag""
agentio.egressGateway.modeGateway 模式:disabled、static 或 gatewayAPIstatic
agentio.egressGateway.image.registry出口网关代理镜像仓库;为空时继承 agentio.global.registry""
agentio.egressGateway.image.repository出口网关代理镜像仓库openkruise/proxyv2
agentio.egressGateway.image.tag出口网关代理镜像版本0.2.0
agentio.egressGateway.image.digest可选的 digest 覆盖,优先级高于 tag""
agentio.agentiod.config.valuesAgentio 配置的原始覆盖值{}

以上参数均可通过 --set key=value[,key=value] 在 helm install 或 helm upgrade 命令中指定。

Gateway 默认探针配置参考:

# 存活探针
gateway.livenessProbe:
tcpSocket:
port: 7788
initialDelaySeconds: 10
periodSeconds: 10
timeoutSeconds: 5
failureThreshold: 3

# 就绪探针
gateway.readinessProbe:
tcpSocket:
port: 7788
initialDelaySeconds: 5
periodSeconds: 5
timeoutSeconds: 3
failureThreshold: 3

Gateway 默认熔断器配置参考:

gateway.envoy.circuitBreakers:
enabled: true
maxConnections: 80000
maxPendingRequests: 32768
maxRequests: 80000
maxRetries: 5

镜像仓库​

镜像渲染格式为 <registry>/<repository>:<tag>,配置了 digest 覆盖时则为 <registry>/<repository>@<digest>。registry 默认取 chart 级别的 image.registry。Agentio 镜像的 registry 解析链更长:先取自身的 image.registry,然后 agentio.global.registry,最后 image.registry。Agentio 镜像默认使用固定 tag 0.2.0;可选的 digest 会覆盖 tag。

当 repository 的第一段路径已经是主机名(包含 . 或 :)时会去掉 registry 前缀,因此把 controller.repository 设为 myreg.io/openkruise/sandbox-manager 或把 image.repository 设为 myreg.io/openkruise/agent-sandbox-controller 无需同时清空 image.registry 也能正常工作。

TLS(cert-manager / trust-manager)​

所有证书签发都由 enableTLS(默认 false)控制,该开关要求集群安装 cert-manager(以及用于 CA Bundle 的 trust-manager)。共享根 CA(Issuer 和 CA Certificate)由 Sandbox Controller chart 持有,必须安装在同一 Namespace; Sandbox Manager chart 仅按名称引用 tls.signingIssuerName 这个 Issuer。

各开关相互独立,可以逐步启用:

  • enableTLS=true:签发 Ingress 服务端证书(tls.ingressCertName,接入 ingress.certSecretName)。外部客户端 → Ingress HTTPS 与 agent-runtime 无关,因此在 runtime 仍为明文的情况下也可安全生效。
  • tls.runtime.enabled=true:额外签发 manager、gateway 和 controller 的 runtime 证书,并启用 --runtime-client-cert-secret 以及 gateway 的 enable-runtime-mtls/transport_socket。这些客户端路径在不支持 TLS 的 agent-runtime 上会失败——只有 agent-runtime 镜像支持 runtime TLS 后才能启用,并与 Controller chart 的 tls.runtime.enabled 一起设置,以打通完整的 runtime 链路。
  • tls.peer.enabled=true:保护 manager↔gateway 的 route-sync/gossip 通道(peer mTLS,以及通过 tls.peer.keySecretName 可选的 memberlist gossip 加密)。它与 agent-runtime 数据链路相互独立,可以单独安全启用,但需要 包含 openkruise/agents#967 的 manager/gateway 镜像:旧版 sandbox-manager 遇到未知的 --peer-* 参数会崩溃。启用前请确认镜像版本。
  • tls.epe.enabled=true:签发 EPE credential-provider 客户端证书。需要 agentio.epe.mode=managed 且 agentio.epe.credentialProvider.mtls.source=files;证书会写入 EPE 挂载的同一个 files Secret,key 重映射为 client.crt/client.key/ca.crt。Mesh 工作负载证书(出口网关、traffic-proxy/ztunnel mTLS)不在此处签发—— 由 agentiod/pilot 按需签发 SPIFFE SVID。
  • gateway.envoy.pluginConfig.enableJwtAuth=true(配合 enableTLS):在 gateway 启用 OIDC/JWT 校验。需要 tls.oidc.discoveryUrl;verifier 通过 API server 从 tls.oidc.caConfigMapName ConfigMap 读取 CA,因此该 ConfigMap 必须存在于本 Namespace(默认指向 Controller chart 创建的 trust-manager Bundle)。

Agent Runtime 注入​

sandbox-injection-config ConfigMap 内置一个 agent-runtime 条目。只有通过在 Sandbox.spec.runtimes 中显式声明该 runtime 的 Sandbox 才会应用:

apiVersion: agents.kruise.io/v1alpha1
kind: Sandbox
metadata:
name: demo
spec:
runtimes:
- name: agent-runtime
# ... pod template

当声明了该 runtime 时,Controller 会向第一个业务容器注入一个名为 agent-runtime 的 native sidecar 容器(按 agentRuntime.image.* 构建,默认 openkruise/agent-runtime:v0.3.0)、ENVD_DIR/GODEBUG/POD_UID 环境变量、挂载到 /mnt/envd 的 envd-volume,以及一个 postStart 钩子。

要求:

  • Kubernetes >= 1.29。 agent-runtime 容器以 native sidecar(restartPolicy: Always 的 init container)方式注入,要求默认启用 SidecarContainers 特性。在更旧的集群上,注入的 Pod 会被拒绝或 sidecar 无法按预期重启。
  • 第一个业务容器镜像必须包含 bash。 注入的 postStart 钩子会在该容器内执行 bash /mnt/envd/envd-run.sh,因此不含 bash 二进制的镜像(例如纯 distroless 或 busybox 基础镜像)将无法启动。

Controller chart 有意只内置 traffic-proxy 和 agent-runtime 两个注入条目。TLS / helper runtime 和 CSI runtime 不包含在内;如果你的环境需要,请单独部署这些组件。


第三方依赖​

两个 chart 无需以下任何组件即可运行;每个组件只支撑某个特定功能,需要该功能时再安装组件并打开对应开关。

cert-manager / trust-manager​

  • 依赖的功能:TLS 终止。enableTLS=true 时,cert-manager 负责签发 Ingress 服务端证书以及 manager/gateway/controller 的 runtime 和 peer 证书,trust-manager 负责以 ConfigMap 分发共享 CA(ca.crt)。
  • 开启方法:在集群中安装 cert-manager(以及用于 CA Bundle 的 trust-manager),然后为两个 chart 都设置 enableTLS=true——根 CA Issuer 和 Certificate 由 Sandbox Controller chart 持有,Sandbox Manager chart 仅按名称 引用 Issuer。各开关的说明见 TLS(cert-manager / trust-manager)。

OpenKruise​

  • 依赖的功能:真实节点上的探针驱动自动暂停/恢复。启用 KruiseIntegration feature gate 后,Controller 会创建 OpenKruise PodProbeMarker 资源,由 kruise-daemon 在 Sandbox Pod 内执行 Sandbox.spec.probes 中定义的探针。 不启用该 gate 时,真实节点的探针 condition 会一直处于 Unknown,自动暂停决策按失败处理(fail closed)——虚拟 kubelet 节点上的探针仍可通过 kruise.io/podprobe annotation 工作。
  • 开启方法:在集群中安装 OpenKruise,然后安装或升级 Sandbox Controller 时启用该 gate: --set 'controller.featureGates=KruiseIntegration=true'。

Redis​

  • 依赖的功能:配额统计。quota.enabled=true 时,manager 将配额计数存储在 Redis 中。
  • 开启方法:部署一个 Redis 实例,然后安装或升级 Sandbox Manager 时加上 --set quota.enabled=true --set quota.redis.addr=<host:port>,按需再设置 quota.redis.db、 quota.redis.username 和 quota.redis.password。

MySQL​

  • 依赖的功能:E2B API Key 存储。e2b.keyStorage.mode=mysql 时,API Key 存储在 MySQL 中,而不是默认的 e2b-key-store Secret。
  • 开启方法:准备好数据库和 DSN,然后安装或升级 Sandbox Manager 时加上 --set e2b.keyStorage.mode=mysql --set e2b.keyStorage.mysql.dsn=<dsn> --set e2b.keyStorage.mysql.hashPepper=<pepper>。 DSN 和 pepper 均为必填,manager 启动时会校验。

Prometheus​

  • 依赖的功能:指标采集。
  • 开启方法:
    • Manager 和 gateway:--set prometheus.enabled=true 会为两者创建 ServiceMonitor;要求集群中已安装 Prometheus Operator CRD。
    • Gateway Envoy:--set gateway.envoy.prometheus.enabled=true 会对外暴露 Envoy admin 的 /stats/prometheus(端口 9902)。
    • Controller:chart 通过 metrics.rbac.create(默认 true)授予 /metrics nonResourceURL 的 get 权限; 将生成的 ClusterRole 绑定到你的 Prometheus 采集器 ServiceAccount。

Ingress Controller​

  • 依赖的功能:对外访问。需要通过 Ingress 暴露 manager API(api.<domain>)和 gateway(*.<domain>)时, ingress.className 是必填项。
  • 开启方法:安装 Ingress 控制器(例如 ALB 或 nginx),然后安装或升级 Sandbox Manager 时加上 --set ingress.className=<alb|nginx>。完整示例见使用 Ingress 暴露服务。

最佳实践​

自定义资源配置​

根据你的集群规模,建议调整以下资源参数:

Sandbox Controller 资源调整

helm install agents-sandbox-controller openkruise/agents-sandbox-controller \
-n sandbox-system \
--version 0.6.0 \
--set resources.limits.cpu=4 \
--set resources.limits.memory=8Gi \
--set resources.requests.cpu=2 \
--set resources.requests.memory=4Gi

Sandbox Manager + Gateway 资源调整

helm install agents-sandbox-manager openkruise/agents-sandbox-manager \
-n sandbox-system \
--version 0.6.0 \
--set e2b.domain=<your-domain> \
--set e2b.adminApiKey=<your-api-key> \
--set ingress.className=<your-ingress-class> \
--set controller.resources.cpu=4 \
--set controller.resources.memory=8Gi \
--set gateway.resources.cpu=4 \
--set gateway.resources.memory=8Gi

配置 E2B 域名和认证​

helm install agents-sandbox-manager openkruise/agents-sandbox-manager \
-n sandbox-system \
--version 0.6.0 \
--set e2b.domain=sandbox.example.com \
--set e2b.enableAuth=true \
--set e2b.adminApiKey=your-secure-api-key \
--set ingress.className=<your-ingress-class>

使用 Ingress 暴露服务​

helm install agents-sandbox-manager openkruise/agents-sandbox-manager \
-n sandbox-system \
--version 0.6.0 \
--set e2b.domain=<your-domain> \
--set e2b.adminApiKey=<your-api-key> \
--set ingress.className=nginx \
--set ingress.annotations."cert-manager\.io/cluster-issuer"=letsencrypt-prod \
--set ingress.certSecretName=sandbox-manager-tls

配置 Gateway 高可用​

helm install agents-sandbox-manager openkruise/agents-sandbox-manager \
-n sandbox-system \
--version 0.6.0 \
--set e2b.domain=<your-domain> \
--set e2b.adminApiKey=<your-api-key> \
--set ingress.className=<your-ingress-class> \
--set gateway.replicaCount=3 \
--set gateway.podAntiAffinity.type=hard \
--set gateway.resources.cpu=4 \
--set gateway.resources.memory=8Gi

启用 Gateway 初始化容器​

如果需要特殊的初始化操作(如 sysctl 调优等),可以启用初始化容器:

helm install agents-sandbox-manager openkruise/agents-sandbox-manager \
-n sandbox-system \
--version 0.6.0 \
--set e2b.domain=<your-domain> \
--set e2b.adminApiKey=<your-api-key> \
--set ingress.className=<your-ingress-class> \
--set gateway.initContainer.enabled=true \
--set gateway.initContainer.image.repository=busybox \
--set gateway.initContainer.image.tag=1.36.1

卸载​

注意:

  • helm uninstall 会删除 Deployment、Service、Webhook Configurations 等 chart 管理的资源,但 不会删除 CRD。 这是 Helm 的标准行为——CRD 位于 crds/ 目录下,Helm 只在首次安装时创建,卸载和升级时均不处理。
  • CRD 不被删除意味着已创建的 Sandbox、SandboxSet 等 CR 资源及其关联的 Pod 会被保留。
  • Namespace 也不会被自动删除。如需完全清理,请参考下方"完全清理"章节。

卸载顺序:先卸载 Sandbox Manager,再卸载 Sandbox Controller。

卸载 Sandbox Manager​

helm uninstall agents-sandbox-manager -n sandbox-system

卸载 Sandbox Controller​

helm uninstall agents-sandbox-controller -n sandbox-system

完全清理(可选)​

如需彻底清理所有资源,包括 CRD 和 Namespace:

# 删除所有 Sandbox 相关 CRD(会级联删除所有 Sandbox CR 和对应的 Pod)
kubectl get crd | grep agents.kruise.io | awk '{print $1}' | xargs kubectl delete crd

# 删除 Namespace
kubectl delete ns sandbox-system

⚠️ 警告:删除 CRD 将不可逆地销毁所有 Sandbox 实例及其关联 Pod,请确认数据已备份后再执行。


版本更新说明​

0.6.0 相比 0.3.0 的主要变化​

类别变更内容
新增 CRDController chart 新增 Commit(commits.agents.kruise.io)和 PoolAutoscaler(poolautoscalers.agents.kruise.io)CRD;Manager chart 新增 TrafficPolicy、GlobalTrafficPolicy、SecurityProfile 和 GlobalSecurityProfile CRD,用于 Sandbox 出入站控制。升级时 Controller CRD 必须手动更新;Manager chart 的 CRD 由 helm upgrade 自动更新
Chart 架构Manager Pod 不再运行 Envoy sidecar;数据面完全由 Sandbox Gateway Deployment 提供(Service 端口 7788),Manager Service 监听 8080 端口。所有镜像都通过 chart 级别的 image.registry 解析。Controller chart 不再支持 server-side apply
Checkpoint、Pause 与 Commit新增 CheckpointControl 生命周期,支持 PersistentContents 文件系统检查点和可选择的检查点标签;暂停会等待进行中的检查点完成;新增 Commit CRD,支持仓库认证和基于 nerdctl 的 commit/push job
成本优化Sandbox 回收(归还到池)避免冷启动;探针驱动的自动暂停(AutoPausePolicy)和流量触发唤醒恢复(OnIngressTraffic);SandboxSet 上的 PauseStrategy(Stop / Snapshot / CloudDisk);PoolAutoscaler 支持按容量和 cron 驱动的扩缩容
安全与出站控制TrafficPolicy / SecurityProfile 驱动的出站控制(协议和 scheme 匹配、内联 E2B L7 规则)、MCP 工具访问控制、Header 操作以及更严格的 CRD admission 校验
身份与 TokenFeatureGate 控制的 Security Identity Provider,在 Sandbox 生命周期中签发和传递 token;token 在 claim 时签发,恢复后重新签发;通过 SecurityTokenRefresh reconciler 主动轮换
Gateway 与传输Gateway JWT 校验,可选 runtime mTLS;CA bundle 注入框架;CSI 挂载和 /init 握手迁移到支持 TLS 的传输;traffic access token header 与 E2B SDK 对齐
升级与原地更新暂停的 Sandbox 可通过 SandboxUpdateOps(两阶段流程)和 CheckpointRestore 策略升级;claim 期间可以调整 Sandbox 内存;放宽了原地资源 resize 校验
E2B 兼容性支持 Claude Code;Pod IP 元数据;E2B >= v2.25.0 API Key 编码;命名的克隆 Sandbox;动态解析 Sandbox 域名;Volume API 和 Network API(Volume 管理接口暂时禁用);维度感知的 API Key 配额
Controller 与 SandboxSetSandboxSet 自动创建 SandboxTemplate;legacy revision hash 避免升级时重建 Sandbox;maxUnavailable 限定为启动失败预算;缩容候选按优先级排序
标识符与 CLI简短、稳定的 Sandbox ID 在缩短标识符长度的同时保持跨生命周期操作的唯一性;新增 okactl CLI 用于 Sandbox 操作;多架构镜像发布
可观测性新增异常 runtime 容器指标;Pod 创建失败和 Sandbox 生命周期的事件与 conditions;Controller 和 Manager 的生命周期链路追踪

详细变更请参考 Change Log。