Bottlerocket 1.8 可用,基于隔离容器的发行版

Linux 发行版 Bottlerocket 1.8.0 已发布,由 Amazon 参与开发,用于高效、安全地启动隔离容器。 该发行版的工具和控制组件是用 Rust 编写的,并在 MIT 和 Apache 2.0 许可证下分发。 它支持在 Amazon ECS、VMware 和 AWS EKS Kubernetes 集群上运行 Bottlerocket,以及创建允许使用各种容器编排和运行时工具的自定义构建和版本。

该发行版提供了一个自动更新的不可分割的系统映像,其中包括 Linux 内核和最小的系统环境,仅包括运行容器所需的组件。 该环境包括 systemd 系统管理器、Glibc 库、Buildroot 构建工具、GRUB 引导加载程序、wicked 网络配置器、隔离容器的 Containerd 运行时、Kubernetes 容器编排平台、aws-iam-authenticator 和 Amazon ECS代理。

容器编排工具位于一个单独的管理容器中,该容器默认启用并通过 API 和 AWS SSM 代理进行管理。 基础镜像缺少命令 shell、SSH 服务器和解释语言(例如,没有 Python 或 Perl)——管理工具和调试工具被放置在单独的服务容器中,默认情况下处于禁用状态。

与 Fedora CoreOS、CentOS/Red Hat Atomic Host 等类似发行版的主要区别在于,主要侧重于在加强系统保护免受可能威胁的背景下提供最大的安全性,从而使利用操作系统组件中的漏洞变得更加困难并增强容器隔离。 容器是使用标准 Linux 内核机制创建的 - cgroup、命名空间和 seccomp。 为了实现额外的隔离,该发行版在“强制”模式下使用 SELinux。

根分区以只读方式挂载,/etc 设置分区挂载在 tmpfs 中,重启后恢复到原始状态。 不支持直接修改 /etc 目录中的文件,例如 /etc/resolv.conf 和 /etc/containerd/config.toml - 要永久保存设置,您必须使用 API 或将功能移至单独的容器中。 dm-verity 模块用于以加密方式验证根分区的完整性,如果检测到在块设备级别修改数据的尝试,系统将重新启动。

大多数系统组件都是用 Rust 编写的,它提供内存安全功能,以避免由于释放后内存访问、空指针取消引用和缓冲区溢出而导致的漏洞。 默认构建时,编译模式“-enable-default-pie”和“-enable-default-ssp”用于启用可执行文件地址空间 (PIE) 的随机化,并通过金丝雀替换防止堆栈溢出。 对于用 C/C++ 编写的软件包,还需要附加标志“-Wall”、“-Werror=format-security”、“-Wp,-D_FORTIFY_SOURCE=2”、“-Wp,-D_GLIBCXX_ASSERTIONS”和“-fstack-clash”启用保护”。

在新版本中:

  • 管理和控制容器的内容已更新。
  • 隔离容器的运行时已更新到containerd 1.6.x分支。
  • 确保在更改证书存储后重新启动协调容器操作的后台进程。
  • 可以通过“引导配置”部分设置内核引导参数。
  • 使用 dm-verity 监视根分区的完整性时启用忽略空块。
  • 已提供在 /etc/hosts 中静态绑定主机名的功能。
  • 已提供使用 netdog 实用程序生成网络配置的功能(已添加generate-net-config 命令)。
  • 已经提出了支持 Kubernetes 1.23 的新发行版选项。 通过禁用 configMapAndSecretChangeDetectionStrategy 模式,减少了 Kubernetes 中 pod 的启动时间。 添加了新的 kubelet 设置:provider-id 和 podPidsLimit。
  • 已提议使用 NVIDIA 驱动程序提供适用于 Amazon Elastic Container Service (Amazon ECS) 的新版本分发工具包“aws-ecs-1-nvidia”。
  • 添加了对 Microchip 智能存储和 MegaRAID SAS 存储设备的支持。 Broadcom 芯片上对以太网卡的支持已得到扩展。
  • 更新了 Go 和 Rust 语言的包版本和依赖项,以及第三方程序的包版本。 Bottlerocket SDK已更新至版本0.26.0。

来源: opennet.ru

添加评论