前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >K8S 生态周报| runc 修复多个漏洞,影响 Docker、containerd 和 Kubernetes

K8S 生态周报| runc 修复多个漏洞,影响 Docker、containerd 和 Kubernetes

作者头像
Jintao Zhang
发布2022-12-07 14:35:17
4350
发布2022-12-07 14:35:17
举报
文章被收录于专栏:MoeLoveMoeLove

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

大家好,我是张晋涛。

runc v1.1.4 发布

runc 是一个底层容器运行时,我在之前已经写过很多篇文章介绍它了,感兴趣的小伙伴可以翻翻历史文章。上周它发布了 v1.1.4 版本, 这是 v1.1 系列的第 4 个 patch 版本。当前该项目正在积极的进行 v1.2 版本的开发。

大多数人都不会直接操作 runc 来启动容器,但是 runc 却是 Docker, containerd 等主流容器工具的底层依赖。本次 runc 新版本中修复的问题, 同样的也都会出现在 Docker 和 containerd 环境中。

具体包含如下内容:

  • libct: fix mounting via wrong proc fd by kolyshkin · Pull Request #3510 · opencontainers/runc

这个 bug 确实存在挺长时间了,但由于触发的条件比较严格,所以一直未发现。究其原因是 mountFd 未被清理,并且它可能被用于后续的挂载操作所使用。

这里介绍下它的触发条件:

  • userns 和 mountns 都被使用;
  • cgroupns 未被使用;
  • 使用 cgroup v1 ;
  • /sys/fs/cgroup 的挂载在 bind mount 之后;

本身这些条件要同时都满足就概率比较小,加上现在 containerd,Docker,Kubernetes,runc 等都已经支持了 cgroup v2 ,并且在逐步完成往 cgroup v2 的迁移,所以被这个 bug 影响的可能性相对较小。

  • Fix error from runc run on noexec fs by kolyshkin · Pull Request #3522 · opencontainers/runc

这个 PR 修正了 runc run 命令在 noexec fs 上的权限问题。本质上来说它替换了 exec.LookPath 函数, 使用了如下函数进行替代。

代码语言:javascript
复制
func Eaccess(path string) error {
 err := unix.Faccessat2(unix.AT_FDCWD, path, unix.X_OK, unix.AT_EACCESS)
 if err != unix.ENOSYS && err != unix.EPERM { //nolint:errorlint // unix errors are bare
  return err
 }

 // Faccessat2() not available; check if we are a set[ug]id binary.
 if os.Getuid() == os.Geteuid() && os.Getgid() == os.Getegid() {
  // For a non-set[ug]id binary, use access(2).
  return unix.Access(path, unix.X_OK)
 }

 // For a setuid/setgid binary, there is no fallback way
 // so assume we can execute the binary.
 return nil
}

这里值得注意的一点是 faccessat2 使用 AT_EACCESS 是从 Linux v5.8 才开始提供支持的,不过这里通过 Go 的封装进行解决了。

  • [1.1] Fix failed exec after systemctl daemon-reload (regression in 1.1.3) by kolyshkin · Pull Request #3554 · opencontainers/runc

此处修正了一处自 v1.1.3 起存在的一个 bug,可能导致在 systemctl daemon-reload 后,runc exec 失败的情况。

代码语言:javascript
复制
exec failed: unable to start container process: open /dev/pts/0: operation not permitted: unknown

这是由于 runc v1.1.3 中不再添加 DeviceAllow=char-pts rwm 规则了,当执行 systemctl daemon-reload 后, 会导致重新应用 systemd 的规则,进而导致这条规则的缺失。

该问题不仅仅会影响 runc,包括 containerd 和 Docker 都受到了影响,以及一些使用它们作为容器运行时的 Kubernetes 集群也受到了影响。解决办法是升级到 runc 的 v1.1.4 或者 containerd v1.6.8 版本即可。

以上就是 runc 新版本中值得关注的变更。建议仔细检查,尽早进行修复

Linkerd 2.12 正式发布

Linkerd 是 Service Mesh 领域中很重要的组成部分,近期发布了 v2.12 版本,其中有两个很重要的特性:

  • 支持了 Gateway API (中的 HTTPRoute) ,具体信息可参考:https://buoyant.io/blog/linkerd-and-the-gateway-api
  • 支持更细粒度的单路由策略,详情可参考:https://linkerd.io/2.12/tasks/configuring-per-route-policy/

我觉得上面的文章写的挺好的,我想聊的事情,在那篇文章中基本都聊到了,就不再重复了。

额外一点,Gateway API 被越来越多的厂商支持,整体而言是个好事情,可以促进 Gateway API 逐步达到毕业标准。

上游进展

  • Fix rollout history bug by brianpursley · Pull Request #111093 · kubernetes/kubernetes

在执行 kubectl rollout history 的时候可以传递 --revision=3 拿到指定版本的信息。但是如果指定了 output format ,则 --revision 可能会失效。通过此 PR 便可解决此问题,但要到 v1.26 才会携带。

  • Expose a pending pods summary in scheudler's dummper output by Huang-Wei · Pull Request #111726 · kubernetes/kubernetes

调度程序可以 dump 出更多信息。

  • Revert "promote LocalStorageCapacityIsolationFSQuotaMonitoring to beta" by rphillips · Pull Request #112076 · kubernetes/kubernetes

由于 OpenShift 团队发现在使用它的时候存在一些问题, 将 LocalStorageCapacityIsolationFSQuotaMonitoring 重新回退到 Alpha 阶段。

以上就是本期的全部内容, 好了,我们下期再见!


参考资料

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-09-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 MoeLove 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • runc v1.1.4 发布
  • Linkerd 2.12 正式发布
  • 上游进展
    • 参考资料
    相关产品与服务
    容器服务
    腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档