Bottlerocket,一个为运行容器而构建的开源Linux发行版

2020-09-02 05:25:32

随着我们的客户越来越多地采用容器来运行他们的工作负载,我们发现需要一个从头设计的Linux发行版来运行容器,重点放在安全、操作和可管理性的规模化上。客户需要一个操作系统,使他们能够自动管理数千台运行Containers的主机。

来认识一下Bottlerocket,这是一个为运行容器而构建的新的开源Linux发行版。Bottlerocket旨在提高您的集装箱化基础设施的安全性和运营性。其内置的安全强化功能有助于简化安全合规性,其事务更新机制允许使用容器协调器自动更新操作系统(OS)并降低运营成本。

Bottlerocket是在GitHub上开发的一个开放源码项目,有一个公开的路线图。我们期待着在GitHub上围绕Bottlerocket建立一个社区,并欢迎您的功能请求、错误报告或贡献。

我们开始设计和构建Bottlerocket是基于我们从客户如何使用Amazon Linux来运行容器以及从运行AWS Fargate等服务中学到的东西。在设计过程的每一步,我们都针对安全性、速度和易维护性对Bottlerocket进行了优化。

Bottlerocket只包含运行容器所需的软件,从而降低了安全攻击面,从而提高了安全性。它在强制模式下使用Security-Enhanced Linux(SELinux)来增强容器和主机操作系统之间的隔离,此外还使用标准的Linux内核技术来实现容器化工作负载(如控制组(Cgroup)、命名空间和seccomp)之间的隔离。

此外,Bottlerocket使用设备映射器的验证目标(dm-verity),这是Linux内核的一个特性,它提供完整性检查,以帮助防止攻击者在操作系统上持续威胁,例如覆盖核心系统软件。Bottlerocket中的现代Linux内核包括eBPF,这减少了许多低级系统操作对内核模块的需求。Bottlerocket的大部分是用Rust编写的,Rust是一种现代编程语言,有助于确保线程安全并防止与内存相关的错误,如可能导致安全漏洞的缓冲区溢出。

Bottlerocket还实施了一种操作模型,通过阻止与生产服务器的管理连接进一步提高了安全性。它适用于对任何单个主机的控制有限的大型分布式环境。对于调试,您可以使用Bottlerocket的API(通过用户数据或AWS系统管理器调用)运行“管理容器”,然后使用SSH登录以进行高级调试和故障排除。管理容器是Amazon Linux 2容器映像,包含用于故障排除和调试Bottlerocket的实用程序,并以提升的权限运行。它允许您安装和使用标准调试工具,如traceroute、strace、tcpdump。登录到单个Bottlerocket实例的操作旨在成为高级调试和故障排除的罕见操作。

Bottlerocket使管理节点和自动更新群集中的节点变得更容易,从而大规模提高了运营和可管理性。与旨在支持以各种格式打包的应用程序的通用Linux发行版不同,Bottlerocket是专门为运行容器而构建的。对其他通用Linux发行版的更新是在逐个软件包的基础上应用的,它们的软件包之间复杂的依赖关系可能会导致错误,这使得该过程具有自动化的挑战性。

一旦拥有此AMI ID,您就可以启动EC2实例并将其连接到现有的EKS或ECS集群。要使用Bottlerocket的Kubernetes变体连接到EKS集群,您需要在启动EC2实例时提供如下用户数据:

[settings.kubernetes]api-server=";您的EKS API服务器端点此处";cluster-Certificate=";您的base64编码群集证书此处";cluster-name=";您的群集名称此处";

要使用Bottlerocket的ECS变体连接到ECS群集,您可以提供如下用户数据:

有关入门的更多说明,请参阅EKS指南和ECS指南。

除了使用AWS提供的Bottlerocket AMI之外,您还可以使用自己的更改生成自定义版本的Bottlerocket。为此,您可以派生GitHub存储库,进行更改,然后遵循我们的构建指南。作为先决条件,您必须首先设置构建环境。构建系统基于Rust语言。我们建议您使用Rustup安装最新的稳定锈蚀。为了组织构建任务,我们在构建过程中使用Cargo-make和Cargo-Deny。要获得这些,请运行以下命令:

Bottlerocket使用Docker协调包和映像构建。我们推荐使用Docker 19.03或更高版本。您需要使用能够访问Docker API的用户帐户安装并运行Docker。这通常是通过将您的用户帐户添加到扩展坞组来启用的。

所有包都将依次构建,然后编译成build/目录中的img文件。

接下来,要注册在Amazon EC2上使用的Bottlerocket AMI,您需要设置aws-cli并运行:

我们诚邀您加入我们的行列,进一步增强Bottlerocket。请参阅瓶口问题列表和瓶口路线图。我们欢迎投稿。检查现有问题是开始投稿的一种很好的方式。有关详细信息,请参阅我们的投稿人指南。

我们希望您使用Bottlerocket来运行您的容器,并期待您的反馈!