容器服务
对比项 | Sidecar 方案 | Hidecar 方案(VCI 采用) |
对比项 | Sidecar 方案 | Hidecar 方案(VCI 采用) |
可见性 | 对 kubectl 可见,可使用 exec 命令进入容器。 | 对 Virtual Kubelet 和终端用户完全不可见,无法使用 exec。 |
攻击面 | 特权容器暴露给用户,攻击面较大。 | 特权组件对用户隐藏,攻击面显著减少。 |
凭证安全 | AK/SK 等凭证经 Base64 编码传递,业务容器一定程度上可窥探 Sidecar 进程。 | Hidecar 独立托管存储凭证,业务容器无法访问其进程与文件系统。 |
维度 | 预挂载 | 动态挂载 |
维度 | 预挂载 | 动态挂载 |
mountPath | 模板中固定,不可修改。 | 动态指定,可为容器内任意绝对路径。 |
新增 Volume | 不支持新增,仅支持替换模板中已声明的卷。 | 支持运行时追加新 Volume 与 volumeMount。 |
subPath | 支持 | 支持 |
挂载组件形态 | VCI Sidecar 容器(非特权,完成后退出)。 | Hidecar 影子容器(特权,但对用户不可见)。 |
支持存储类型 | EFS | TOS |
执行链路 | gRPC 直连替换 Endpoint,链路短。 | CSI 挂载 + 双向传播 + 软链接,链路较长。 |
多容器支持 | 支持模板中声明的多个容器。 | 当前仅支持单个主容器。 |
风险维度 | 预挂载 | 动态挂载 |
风险维度 | 预挂载 | 动态挂载 |
容器逃逸风险 | 无风险,Sidecar 以非特权、非 root、主动丢弃所有 Capabilities(capabilities.drop=ALL)模式运行,无宿主机目录暴露风险。 | Hidecar 以特权模式运行并使用双向挂载传播,底层仍具备特权操作能力,但 Hidecar 对终端用户完全不可见、不可执行 exec 命令,终端用户无法直接接触目标容器或其宿主机目录,因此显著减少业务侧攻击面。 风险主要来自容器运行时本身的潜在漏洞,建议配合运行时安全监控。 |
跨租户数据隔离 | 强隔离,挂载点由平台管控替换,业务容器无法干预挂载目标。 | 系统对 subPath 做路径遍历校验,存储凭证由 Hidecar 独立托管,业务容器无法访问。 建议配合存储层目录级权限(如ObjectSet/接入点策略),实现最小权限隔离。 |
挂载点可靠性 | 可靠性较高,挂载点在容器启动时建立,Sidecar 完成替换后退出,无后续依赖。 | 挂载依赖 CSI 组件持续运行和软链接机制。当前版本不支持动态挂载与容器原地重启(in-place update)和可写层持久化同时使用,容器重启后需重新创建 Sandbox。 |
性能开销 | 开销低,gRPC 直连替换 Endpoint,单次操作毫秒级。 | 开销相对较高,需执行 CSI 挂载流程(含 FUSE 文件系统挂载),耗时更长,预热池需额外运行 Hidecar 和 Init 容器。 |
故障影响面 | 挂载失败仅影响当前 Sandbox 认领,自动清理 Sandbox 实例后走冷启动。 | 挂载失败会自动清理 Sandbox 实例并降级冷启动。Hidecar 对用户不可见,避免了用户误操作或恶意访问导致的故障扩散。 说明 动态挂载模式采用 Hidecar 方案后,用户侧已无法接触特权组件,安全性大幅优于可见 Sidecar 方案。但存储凭证(AK/SK)的权限粒度仍是安全基线,建议将凭证权限限制到具体挂载点或目录级别,避免使用超权限凭证,同时配合容器运行时安全监控(如异常 mount 系统调用检测),做深度防御。 |
使用场景 | 推荐方案 |
使用场景 | 推荐方案 |
挂载目录在 SandboxTemplate 阶段可确定,仅需在 SandboxClaim 认领沙箱实例时切换不同存储卷或子目录。 | 使用预挂载模式,性能与安全性表现优异。 |
多租户共享同一存储实例,通过 subPath 隔离不同租户目录。 | 使用预挂载模式 + subPath 模式,一个 PV 服务多个子目录,无需为每个租户创建 PV。 |
多云部署,已有业务 Pod Annotation 中包含 mountPath 且短期内无法改造。 | 使用动态挂载模式,兼容 Kruise 协议,Hidecar 保障安全。 |
挂载目录在运行沙箱时才能确定,无法在 SandboxTemplate 中提前声明。 | 使用动态挂载模式。 |
运行沙箱时需要追加 SandboxTemplate 中未声明的新存储卷。 | 使用动态挂载模式。 |