Fork me on GitHub

distroless 镜像介绍及 基于cbl-mariner的.NET distroless 镜像的容器

1、概述

容器改变了我们看待技术基础设施的方式。这是我们运行应用程序方式的一次巨大飞跃。容器编排和云服务一起为我们提供了一种近乎无限规模的无缝扩展能力。

根据定义,容器应该包含 应用程序 及其 运行时依赖项。然而,在现实中,它们包含的远不止这些。标准容器基础镜像包含标准 Linux 发行版中可以找到的包管理器、shell 和其他程序。

虽然这些都是构建容器镜像所必需的,但它们不应该成为最终镜像的一部分。例如,一旦你把包安装好了,就不再需要在容器中使用 apt 等包管理工具了。

这不仅使你的容器里充满了不必要的软件包和程序,而且还为网络罪犯提供了攻击特定程序漏洞的机会。

你应该始终了解容器运行时中存在什么,并且应该精确地限制其只包含应用程序所需的依赖项。

除了那些必要的,你不应该安装任何东西。一些领先的科技巨头,如谷歌、微软,有多年在生产中运行容器的经验,已经采用了这种方法。

谷歌和微软现在通过提供 Distroless 镜像向客户开放这种能力。谷歌和微软构建的这些镜像的目标是只包含你的应用程序及其依赖项,同时它们将没有常规 Linux 发行版的所有特性,包括 shell

这意味着虽然可以像以前一样运行应用程序的容器,但不能在容器运行的时候进入容器内。这是一个重大的安全改进,因为你现在已经为黑客通过 shell 进入你的容器关上了大门。

2、Microsoft CBL-Mariner

Microsoft CBL-Mariner 是一个免费的开源 Linux 发行版,适用于 Microsoft 的云基础设施和边缘产品和服务。该发行版的主要目标是在 Microsoft Azure 云平台上提供 Azure Kubernetes 服务。

此外,CBL-Mainer 在 Azure IoT Edge 中用于在 Windows IoT 上执行 Linux 工作负载,并在后端分发中用于托管 WSLg 的 Weston 合成器。

微软最近刚发布了CBL-Mariner 2.0 , CBL-Mariner 2.0 仅包含基本组件,专为低内存和磁盘空间使用以及快速下载速度而定制。在底层,CBL-Mariner 使用最新的 Microsoft LSG 5.15 内核。最重要的是,该发行版添加了功能齐全的 eBPF 支持,从而提高了可观察性、对 Kubernetes 设置的调试以及其他功能。

3、CBL-Mariner Distroless 基础镜像

微软为大多数流行的编程语言和平台提供了 Distroless 的基础镜像。

以下基础镜像是正式发布的版本:

• mcr.microsoft.com/cbl-mariner/distroless/base:2.0
• mcr.microsoft.com/cbl-mariner/distroless/debug:2.0
• mcr.microsoft.com/cbl-mariner/distroless/minimal:2.0

4、 .NET Distroless 镜像

官方运行时映像(例如mcr.microsoft.com/dotnet/runtimemcr.microsoft.com/dotnet/aspnet)非常大(runtime:6.0-bullseye-slim为 188 MB)。这不仅增加了整个地方的带宽和存储使用量以及启动时间,而且还增加了攻击面。而且这些映像默认以 root 身份运行。

虽然 Alpine 已经非常小,但它还包含像 sh 这样的二进制文件,这些二进制文件没有被 dotnet 运行时引用或使用。该请求更多的是关于安全问题而不是图像大小。如果我们尽可能多地删除基础镜像中的二进制文件,潜在的安全漏洞就会更少。

微软CBL-Mariner的.NET镜像参考我之前写的一篇简短介绍文章.NET 镜像之 cbl-mariner

微软目前只有针对CBL-Mariner Distroless .NET镜像支持,具体参考:https://github.com/dotnet/dotnet-docker/issues/3455。如下表所示 6.0.6-cbl-mariner2.0-distroless-amd64 最小只有25.6M

mcr.microsoft.com/dotnet/aspnet                    6.0.6-alpine3.16                        143cdbb3b431   7 days ago     100MB
mcr.microsoft.com/dotnet/aspnet                    6.0-cbl-mariner2.0-distroless           6c722a6801c2   7 days ago     116MB
mcr.microsoft.com/dotnet/runtime                   6.0.6-alpine3.16-amd64                  f141202484ea   7 days ago     79.7MB
mcr.microsoft.com/dotnet/runtime                   6.0.6-cbl-mariner2.0-distroless-amd64   14a849437c74   7 days ago     96.2MB
mcr.microsoft.com/dotnet/runtime-deps              6.0-cbl-mariner2.0-distroless           c8665469fafc   7 days ago     25.6MB
mcr.microsoft.com/dotnet/runtime-deps              6.0.6-cbl-mariner2.0-distroless-amd64   c8665469fafc   7 days ago     25.6MB

posted @ 2022-06-22 08:44  张善友  阅读(317)  评论(1编辑  收藏  举报