Files
docker_practice/17_ecosystem/17.7_secure_runtime.md
2026-02-27 19:23:50 -08:00

54 lines
5.0 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## 17.7 安全容器运行时
本节介绍容器技术生态中的安全运行时机制主要探讨在隔离性和安全性上比标准 Linux 容器更进一步的方案重点介绍 Kata Containers gVisor
### 为什么需要安全容器
标准的 Linux 容器 DockerPodman 或基础的 containerd/runc 所提供的依赖于 Linux 内核的 **Namespace命名空间** **Cgroups控制组** 来实现进程级别的隔离与资源限制这种轻量级的虚拟化方式共享同一个宿主机的内核
尽管这种方式在性能和启动速度上拥有巨大优势但也带来了一个显著的缺点**隔离性Isolation不足**如果某个容器内的恶意进程利用了宿主机内核的漏洞完成了越狱Privilege Escalation它将对整个宿主机以及其上运行的所有其他容器造成毁灭性威胁
如果在公有云环境多租户场景或运行不可信的第三方代码时共享内核显然是不够安全的为了解决这一问题社区推出了安全容器Secure Containers/Sandboxed Containers的概念安全容器的核心理念是提供类似虚拟机的强隔离性同时保持类似容器的轻量快速启动和标准化管理
### 什么是 Kata Containers
[Kata Containers](https://katacontainers.io/) 是一个开源项目,由 OpenStack Foundation现更名为 OpenInfra Foundation托管。它将早期的两个项目——Intel Clear Containers 和 Hyper runV 结合而成。
Kata Containers 的核心思路是**使用轻量级的虚拟机Lightweight VM来运行每一个容器或者 Pod**
#### 工作原理
当使用 Kata Containers 它不是在宿主机上启动一个普通的独立进程而是调用一个精简高度优化的虚拟机管理程序 QEMUFirecracker Cloud Hypervisor启动一个小型的虚拟机容器内的应用进程运行在这个虚拟机拥有独立特制内核的沙箱中
- **高度隔离**因为拥有自己的独立内核即使容器内的应用利用内核漏洞溢出它也只能破坏虚拟机虚拟出来的内核根本无法触及宿主机真正的内核
- **兼容性**Kata Containers 完全实现了 OCIOpen Container Initiative规范和 CRIContainer Runtime Interface标准这意味着它可以作为 `containerd` `Docker` 的底层运行时无缝替换默认的 `runc`
- ** Kubernetes 集成** Kubernetes 你可以为一个特定的 Pod 指定 `runtimeClassName: kata`让高敏感的任务自动运行在虚拟机级别的隔离环境中
### 什么是 gVisor
[gVisor](https://gvisor.dev/) 是由 Google 开发并开源的一种不同流派的沙箱容器运行时方案。
它采取了与 Kata Containers 完全不同的技术路线它不是启动完整的虚拟机而是提供了一个 **应用态内核User-space Kernel**
#### 工作原理
gVisor 的核心组件是一个名为 **Sentry** 的用户空间进程Sentry 扮演了一个内核代理的角色
- 当容器内的应用想要进行系统调用System Call比如读写文件网络通信这些调用会被 Sentry 拦截并进行一层虚拟化处理然后再由 Sentry 把经过安全过滤和转换的请求转发给宿主机内核
- 因为 Sentry 在用户态实现了一套 Linux 系统调用接口它极大减少了应用直接接触底层操作系统内核的表面积这样就有效防御了利用底层内核漏洞突破隔离的攻击方式
- gVisor 同样兼容 OCI 规范其核心运行时组件称为 `runsc`可以作为底层运行时与 Docker Kubernetes 进行集成
### 总结与对比
| 特性 | 标准 Linux 容器 (runc) | Kata Containers | gVisor (runsc) |
| :--- | :--- | :--- | :--- |
| **隔离技术** | Namespace & Cgroups | 轻量级虚拟机 (独立内核) | 用户态内核 (系统调用拦截) |
| **安全性** | 较低共享宿主机内核 | 极高硬件级虚拟化隔离 | 减少内核攻击面 |
| **性能开销** | 极小原生进程 | 中等因轻量化而优于传统 VM | 中等到较高取决于系统调用频率开销 |
| **启动速度** | 极快毫秒/秒级 | 秒级之内 | 接近原生容器 |
| **兼容性** | 完美所有系统调用均支持原始实现 | 极好拥有完整内核 | 但在极少数复杂的未被拦截支持的系统调用中可能报错 |
如今诸如 AWS 这样的云厂商也推出了针对无服务器容器功能Serverless Containers的高度优化的轻量级虚拟机管理器 **Firecracker**可以看作是安全容器生态中与 Kata 类似方案的底层基石
对于普通的微服务开发来说可能不需要考虑使用安全容器但在提供多租户平台即服务PaaS运行无状态边缘计算函数FaaS等对安全隔离要求极高的场景中 Kata Containers gVisor 为代表的安全容器技术展现出了巨大的价值