K8S 生态周报| runc v1.0-rc92 发布

「K8S 生态周报」内容主要包含我所接触到的 K8S 生态相关的每周值得推荐的一些信息。欢迎订阅知乎专栏「k8s生态」。 微软开源了 Open Service Mesh 微软近期开源了一个新的名为 Open Service Mesh 的项目并准备捐赠给 CNCF 。 OSM 主打轻量&可扩展,支持 Service Mesh Interface (SMI) 规范 附带开箱即用的可观察性功能。截至目前,已经发布了v0.2.0 版本。 主要特性如下: 支持 Service Mesh Interface (SMI) 的规范,主要包括 Traffic Access Control, Traffic Specs 和 Traffic Split 。剩下的 Traffic Metrics 正在开发中; 服务间的通信加密使用 mTLS ; 定义和执行服务间的访问控制策略; 通过 Prometheus 和 Grafana 完成器观察性; 可与外部证书管理服务进行集成; Envoy sidecar 自动注入; 关于 Open Service Mesh 更详细的内容,请参考我上一篇文章 初试 Open Service Mesh(OSM)

初试 Open Service Mesh(OSM)

微软近期开源了一个新的名为 Open Service Mesh 的项目并准备捐赠给 CNCF 。 基本介绍 Open Service Mesh (OSM) is a lightweight, extensible, Cloud Native service mesh that allows users to uniformly manage, secure, and get out-of-the-box observability features for highly dynamic microservice environments. Open Service Mesh(OSM)是一个轻量级,可扩展的云原生服务网格,它使用户能够统一管理,保护和获得针对高度动态微服务环境的开箱即用的可观察性功能。 OSM 在 Kubernetes 上运行基于 Envoy 的控制平面,可以使用 SMI API 进行配置。它通过以 sidecar 的形式注入 Envoy 代理来工作。 控制面负责持续配置代理,以配置策略和路由规则等都保持最新。代理主要负责执行访问控制的规则,路由控制,采集 metrics 等。(这和目前我们常见到的 Service Mesh 方案基本都一样的) 显著特性 基于 Service Mesh Interface (SMI) 的实现,主要包括 Traffic Access Control, Traffic Specs 和 Traffic Split 。剩下的 Traffic Metrics 正在开发中; 服务间的通信加密使用 mTLS ; 定义和执行服务间的访问控制策略; 通过 Prometheus 和 Grafana 完成器观察性; 可与外部证书管理服务进行集成; Envoy sidecar 自动注入; 上手体验 只做介绍未免太过无趣,而且说实话,这么多 service mesh 实现,不亲自上手试试看,感觉不出来太多差异的。

K8S 生态周报| Istio 已修复导致 Pod 崩溃的 bug

「K8S 生态周报」内容主要包含我所接触到的 K8S 生态相关的每周值得推荐的一些信息。欢迎订阅知乎专栏「k8s生态」。 Istio 1.6.7 发布 Istio 1.6.7 是为了解决在 1.6.6 中引入的一个 bug。 该 bug 可能会导致 在使用 Istio 1.6.6 时,某些 Pod 进入 CrashLoopBackOff 状态,无法正常提供服务。 修复后的核心代码如下,这里主要是增加另一个返回值 expectpod 。 通过此方法获取 Pod 时,Pod 有两种情况可能为空: 该 endpoint 未关联 Pod,这时 expectpod 为 false; 该 endpoint 已关联 Pod,但未找到 Pod,这时 expectpod 为 true 而这种情况发生的最主要原因可能是由于最终一致性,或者乱序事件等。 建议如果打算升级 Istio 的读者,直接跳过 1.6.6 版本,以免影响到服务。 func getPod(c *Controller, ip string, ep *metav1.ObjectMeta, targetRef *v1.ObjectReference, host host.Name) (rpod *v1.Pod, expectPod bool) { pod := c.

K8S 生态周报| NGINX Ingress Controller又添新特性

「K8S 生态周报」内容主要包含我所接触到的 K8S 生态相关的每周值得推荐的一些信息。欢迎订阅知乎专栏「k8s生态」。 Conftest 正式加入 Open Policy Agent 项目 conftest 是一个非常实用的 CLI 工具,可以用于测试/验证配置文件是否符合预期。例如,可以通过如下内容来定义规则: package main deny[msg] { input.kind = "Deployment" not input.spec.template.spec.securityContext.runAsNonRoot = true msg = "Containers must not run as root" } deny[msg] { input.kind = "Deployment" not input.spec.selector.matchLabels.app msg = "Containers must provide app label for pod selectors" } 使用此规则去检查一个未符合预期规则的 Deployment 的配置文件: (MoeLove) ➜ conftest test deployment.yaml FAIL - deployment.yaml - Containers must not run as root FAIL - deployment.

K8S 生态周报| Traefik v2.3.0-rc2 发布

「K8S 生态周报」内容主要包含我所接触到的 K8S 生态相关的每周值得推荐的一些信息。欢迎订阅知乎专栏「k8s生态」。 Traefik v2.3.0-rc2 发布 关于 Traefik 的系列介绍可以参考之前周报的内容:Traefik v2.2.0-rc1 发布。本周它又发布了 v2.3.0-rc2 版本,我们一起来看看有哪些值得关注的内容吧! #6696 为 Traefik 在 terminating 时,添加自定义的 HTTP 状态码; 具体而言,可通过以下几种方式进行添加: 配置文件(YAML) ping: terminatingStatusCode: 204 命令行参数 --ping.terminatingStatusCode=204 环境变量 TRAEFIK_PING_TERMINATINGSTATUSCODE=204 现在默认的状态码是 503 增加此配置的好处在于,当 Traefik 处于 terminating 状态时,可通过设置自定义的状态码来实现优雅终止。 #6875 使用 parser 从文件中取动态配置; 值得注意的是: 如果从之前版本升级至 v2.3 那一定需要注意的是如果动态配置中存在未知的其他字段,则返回错误。 #7041 Traefik 提供了 Plugins 特性的支持。可以通过此机制,让 Traefik Pilot 连接到 Traefik ,以此来将其 SaaS 能力暴露给用户。同时 Traefik Pilot 可以监控连接到它的任意 Traefik 实例,并支持发出报警。

K8S 生态周报| Helm v3.3.0-rc.1 发布

「K8S 生态周报」内容主要包含我所接触到的 K8S 生态相关的每周值得推荐的一些信息。欢迎订阅知乎专栏「k8s生态」。 Helm v3.3.0-rc.1 发布 这是 Helm v3.3.0 的预发布版本,在此次版本中,重点在修复 helm lint 相关的错误,以及提升整体的稳定性和其他一般性 bug 的修复。我主要介绍几个值得注意的内容: #8277 将 warning 信息从写入 stdout 修改为写入 stderr ,这样可大大方便将 helm 用于 pipeline 中。比如 helm template 与 kubectl 组合使用; #8220 修复了当 chart 数量很多时,helm chart list 可能报错的问题; #8158 修复了 --repository-cache 不能被 repo add 和 repo update 识别的问题, 现在可以通过 repository-cache 自行指定 cache 目录; #7875 增加了 --insecure-skip-tls-verify 参数,用于在 pull/install 等阶段,跳过证书校验; #8011 增加了 lint 规则,以便于检查资源名称是否符合 K8S 的要求。 以上便是我认为此版本中值得关注的内容,更多关于此版本的详细信息,请参考其 ReleaseNote

K8S 生态周报| runc v1.0.0-rc91 发布

「K8S 生态周报」内容主要包含我所接触到的 K8S 生态相关的每周值得推荐的一些信息。欢迎订阅知乎专栏「k8s生态」。 runc v1.0.0-rc91 发布 如果不出意外的话,这将会是 runc v1.0 正式发布前的倒数第二个 rc 版。 本次有很多值得关注的变更。 首先是期待已久的 hooks 的变更,这是少数与规范有关的变更,当然它也是一直没有发布 v1.0 的原因之一。现有的使用 hook 的用户不受影响,比如说 NVIDIA Docker 用户,但是 runc 提供了其他的 hook ,比如 createRuntime 等。 其次是对 cgroup v2 的支持(我已经多次介绍过); 修复了一个小的安全漏洞 很早之前 runc 中默认将所有的设备都设置成了允许,这意味着需要用户自己去设置要去拒绝哪个设备访问。在 runc 的众多用户,均已经很早就修复了此问题。所以此问题在 runc 中被忽略掉了,直到现在才修复。 更多关于此版本的信息,请参考其 ReleaseNote Envoy v1.14.3 发布 此次 v1.14.3 版本的主题是安全修复。本次修复了如下安全漏洞: CVE-2020-12603 CVE-2020-12604 CVE-2020-12605 CVE-2020-8663 CVE-2020-8663 这些安全漏洞基本都是通过发送特定数据包,引起服务端大量消耗资源。 同时,此次的这些安全修复,也都影响到了 Istio ,所以 Istio 在本周也发布了 v1.

K8S 生态周报| Docker v19.03.12 发布

「K8S 生态周报」内容主要包含我所接触到的 K8S 生态相关的每周值得推荐的一些信息。欢迎订阅知乎专栏「k8s生态」。 Docker CE v19.03.12 发布 在 Docker v19.03.11 发布时,我在「K8S 生态周报| 几乎影响所有 k8s 集群的漏洞」 一文中曾介绍过,该版本主要是为了修复一个通过使用 IPv6 RA 消息进行地址欺骗的安全漏洞 CVE-2020-13401。 解决办法也很简单,直接将 /proc/sys/net/ipv6/conf/*/accept_ra 设置成 0 ,这样便可确保不接收 RA 消息,从而避免遭受攻击。 但是,在 v19.03.11 的修复中,当无法禁用 RA 消息时,会直接报错,导致 docker daemon 无法启动 (比如在容器内的只读文件系统上)。所以此次 v19.03.12 的一个最主要修复,就是无法禁用 RA 消息时,只是会记录一条日志,而不是直接报错。 - return fmt.Errorf("libnetwork: Unable to disable IPv6 router advertisement: %v", err) + logrus.WithError(err).Warn("unable to disable IPv6 router advertisement") 对此版本感兴趣的小伙伴,可以直接更新。 containerd v1.3.5 发布 此次 v1.3.5 版本,有可能是 v1.

K8S 生态周报| CoreDNS 发布 v1.7.0

「K8S 生态周报」内容主要包含我所接触到的 K8S 生态相关的每周值得推荐的一些信息。欢迎订阅知乎专栏「k8s生态」。 CoreDNS v1.7.0 发布 CoreDNS 本周发布了 v1.7.0 版本, 这是一个向后不兼容的版本。 主要包含了以下几个方面: #3776更好的 metrics 名称,其修改了大量的 metrics 名称,Dashborad 之类的都需要修改了。 例如: coredns_request_block_count_total -> coredns_dns_blocked_requests_total #3794 federation 插件已经被移除 (v1 Kubernetes federation); 从 kubernetes 插件中删除了一些代码, 所以它不会作为外部插件构建; #3534 新的 dns64 插件,由外部转为内置插件,该插件提供了 DNS64 IPv6 地址转换机制; #3737 plugin/kubernetes: 移除了已经过期的 resyncperiod 和 upstream 选项; 以上便是此版本中值得注意的变更,更多详细内容请参看其 ReleaseNote Helm v3.2.4 发布 这是一个安全更新版本,主要是为了修正一个漏洞,该漏洞影响了 v3.2.4 之前所有 Helm v3 版本。漏洞号为 CVE-2020-4053 此漏洞的具体影响范围是,当通过 HTTP 的方式从远程来安装一个 Plugin 的时候,可能会发生文件目录的遍历攻击。攻击者可能会在恶意插件中包含相对路径,以此来将攻击文件复制到预期的文件目录之外。 这是一种很常见的攻击方法,在之前的「K8S 生态周报」文章中,我也介绍过类似的利用这种文件目录遍历的漏洞。

K8S 生态周报| Trivy 发布新版本

「K8S 生态周报」内容主要包含我所接触到的 K8S 生态相关的每周值得推荐的一些信息。欢迎订阅知乎专栏「k8s生态」。 Trivy 发布 v0.9.x 版本 Trivy 是一款由 Aqua Security 开源的镜像漏洞安全扫描程序,对 CI 友好。 在之前的「K8S 生态周报」中,我曾介绍过这款工具。本周其发布了 v0.9.x 系列版本,以下是一些值得注意的变更: 支持 GitHub Advisory 数据库了,相当于扩充了它的漏洞库,可以大幅提升 Trivy 的准确度; 支持文件系统扫描,可以直接在已启动的容器中,扫描容器的文件系统; 可内置在 Dockerfile 中,在构建镜像的过程中,直接进行漏洞扫描, 例如: $ cat Dockerfile FROM alpine:3.7 RUN apk add --no-cache curl \ && curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/master/contrib/install.sh | sh -s -- -b /usr/local/bin \ && trivy filesystem --exit-code 1 --no-progress / \ && trivy --reset && rm -f /usr/loca/bin/trivy && apk del curl $ docker build -t vulnerable-image 支持直接扫描 Git 仓库(当前只允许扫描公开仓库);