K8S 生态周报| Lima 已正式加入 CNCF

2022-12-07 14:38:08 浏览数 (1)

“「K8S 生态周报」内容主要包含我所接触到的 K8S 生态相关的每周值得推荐的一些信息。欢迎订阅知乎专栏「k8s生态」[1]。 ”

大家好,我是张晋涛。

上周太忙,缺席了一周。本周继续更新。

cert-manager 成为 CNCF 孵化级项目

本周我花时间写了篇文章,介绍 cert-manager 如何通过 Vault 进行证书签发, 并且在 Apache APISIX Ingress controller 中配合使用,为部署在 Kubernetes 中的服务提供 TLS 代理。(这篇文章过几天会发布出来)

写文章的时候 cert-manager 还是 CNCF sandbox 级别的项目,写完它就已经成为 CNCF incubating 级别的项目了。

cert-manager 可以说是当前云原生场景下,证书管理方面应用最多的软件了。它除了可用于证书管理,还可以与多种服务集成,进行证书的签发和续期。 并且它还积极的融入到了很多项目的生态中,比如和各类 Ingress controller 项目的集成,和服务网格相关的项目进行整合等。

目前该项目已经有 9.4k star ,300 名贡献者。

本次成为 CNCF incubating 级别的项目,是个里程碑,希望它继续扩展生态。

(而且我想起来我草稿箱里还有一篇未完成的关于 cert-manager 的文章,过段时间抽空完成后再发出来)

nerdctl 正式发布 v1.0

去年在我为大家介绍 Docker Desktop 的替代品 Lima 的文章中,曾为大家介绍过 nerdctl[2] 。

nerdctl 出现的原因是由于 containerd 项目的核心范围仅限于非面向用户的区域[3],因此用户很难直接与 containerd 进行交互。

nerdctl 的功能和用法几乎与 Docker CLI 相同,但是 nerdctl 还支持 Docker 中不存在的几个 containerd 的前沿功能。此类功能包括但不限于 延迟拉取(stargz) 和 运行加密镜像(ocicrypt)等。

到目前为止,nerdctl 已经开发了将近 2 年的时间,有超过 80 个贡献者和 4600 star ,以及大量的用户。这里我主要介绍几个 nerdctl 的重要阶段:

  • v0.3 (2020 年 12 月): nerdctl run --publish=<PORT>
  • v0.8 (2021 年 4 月): nerdctl compose up 支持 compose
  • v0.9 (2021 年 6 月): nerdctl run --gpus=<GPU> 支持 GPU
  • v0.13 (2021 年 11 月): nerdctl run --platform=<PLATFORM> 支持多平台
  • v0.19 (2022 年 4 月): nerdctl cp 支持文件复制
  • v0.22 (2022 年 7 月): nerdctl system prune 允许清理未使用的数据

到目前为止,nerdctl 已经实现了所有除了 swarm 相关的 Docker CLI 的命令,也额外实现了类似 nerdctl diff 之类的命令。

近期 nerdctl 有很多新的特性,比如:

  • 增加了多种日志驱动:journald , fluentd, syslog 和外部驱动;
  • 除了默认的 bridge CNI 外,还支持了 macvlanipvlan 网络驱动;
  • 支持了多种清理命令, nerdctl (container|image|volume|network|system) prune

目前 containerd 正在被越来越多的 Kubernetes 集群使用,所以一个好用的 CLI 也非常的重要。 不出意外的话,以后 nerdctl 的用户应该会变的更多,期待它发展的更好。

此外另一个很重要的事情是: Lima 已经正式加入 CNCF 成为 Sandbox 级别的项目。 Lima 实际运行的就是 containerdnerdctl ,这样也会加速 nerdctl 的发展。

Docker v20.10.20 发布

Docker 最近相继发布了 v20.10.19 和 v20.10.20,主要是一些 bugfix 和安全修复。这里我主要介绍一个比较有意思的 CVE-2022-39253 。

CVE-2022-39253

这个漏洞其实和 Docker 没有直接的关系。这个漏洞是 Git 的。

之所以在这里聊是因为 Docker 中进行 docker build 时,可以直接指向 Git 仓库进行构建。 在构建过程中,实际上会先将 Git 仓库拉入到本地的临时目录,并作为构建上下文传递给 Docker daemon 。

而且可以通过为指定的 Git 仓库后添加参数的方式来扩展具体构建使用的内容。比如:

2022-10-23.png

这次 Git 的 CVE-2022-39253 漏洞,是由于 Git 在 clone 的时候存在对本地仓库的优化,可以绕过 "Git aware" 的传输机制,然后可以通过硬链接的方式来节省空间。 但是攻击者可以通过诱导受害者在同一个机器上 clone 恶意仓库,并且利用这种硬链接的方式来将敏感信息暴露给恶意攻击者。

具体的修复方式包括避免使用 --recurse-submodules 和增加 protocol.file.allow=never 参数,以此来避免受漏洞的影响。

另外,这个漏洞也在 Git 的 2.37.4 之后的版本进行了修复。

其他修复

  • moby/moby#44122 通过更新 buildkit 的依赖,修复了执行 docker builder prunedocker system prune 期间可能出现的 panic ;
  • moby/moby#44238 修复了一个当已经开启 "live restore" 并进行了重启,当执行 docker volume prune 时,有可能会删掉仍然在使用的 volume ,解决办法是在 restore 的时候,先确保准备好了 volume ;
  • moby/moby#4b9902b 更新了 Docker daemon 在处理通过 digest pull 镜像时的处理逻辑,即使用 image:tag@digest 的形式。原先是直接通过内容寻址的方式直接获取镜像的,并没有利用到 tagdigest ,这有可能会被攻击者利用来运行已经存在于本地的镜像。现在 Docker daemon 将会检查 digest 是否与其名字匹配;

上游进展

  • kubeadm: Inherit dry-run flags for each sub-phases by chendave · Pull Request #112945 · kubernetes/kubernetes kubeadm 所有的阶段都支持了 dry-run 模式;
  • Add categories to kubectl api-resources wide output and add --categories flag by brianpursley · Pull Request #111096 · kubernetes/kubernetes 为 kubectl api-resources -o wide 的输出中增加了一列 "Categories";
  • add --concurrent-horizontal-pod-autoscaler-syncs flag to kube-controller-manager by zroubalik · Pull Request #108501 · kubernetes/kubernetes 为 kube-controller-manager 增加了 --concurrent-horizontal-pod-autoscaler-syncs 的参数,原先 HPA 中默认只有一个 worker,在大规模集群中处理效率很低。本次的 PR 可以通过此参数来自行配置 worker 数量,以便于提升效率;

参考资料

[1] k8s生态: https://zhuanlan.zhihu.com/container

[2] nerdctl: https://github.com/containerd/nerdctl

[3] containerd 项目的核心目标: https://containerd.io/scope/

0 人点赞