K8S 生态周报| Istio 即将发布重大安全更新,多个版本受影响

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

Istio 即将发布重大安全更新,多个版本受影响

Istio 产品安全工作组近期发现 Istio 中存在一些安全漏洞,其中 最高级别的漏洞被评级为高严重性。 鉴于当前 Istio 的漏洞披露政策,所以目前我们不会透露具体的漏洞细节。

在一周后的 2 月 22 日,将会发布 Istio v1.11.7、v1.12.3 和 v1.13.1 版本修正这些安全漏洞。届时会再更新漏洞的详细内容。

请参考官方通告

此外,本周 Istio 也发布了 v1.13.0 正式版, 在 v1.13.1 版本发布前,我不建议大家将自己所用的 Istio 升级到 v1.13.0

虽然不建议现在升级,但我们也可以关注下 v1.13.0 带来的一些值得关注的变更:

v1.13.0 版本中为东西向流量提供了基于主机名的多网络网关支持。主机名可以在控制面中被解析,解析记录可被用作 endpoint。 如果你不需要这个行为,或者想要恢复到之前版本中的默认行为,可以为 istiod 添加 RESOLVE_HOSTNAME_GATEWAYS=false 的配置。

此外,它还支持重写 gRPC 探针,以及通过 proxyMetadata 提供了在 Envoy 工作线程间的重平衡,并且通过学习 Kubernetes 的探测 行为,改善了 istio-agent 健康检查的探测,这样它就不会再重用连接了。请参考 #36390

同时我们会发现在这个版本中它对 Telemetry API 的支持增加了不少,尤其是它为 access log 支持了 Common Expression Language (CEL) filter 。如果你觉得对 CEL 有些陌生,那么你可以看下我之前的文章 《K8S 生态周报| Kubernetes v1.23.0 正式发布,新特性一览》 ,其中就介绍到了在 Kubernetes v1.23 中对 CEL 的支持。(这样看起来 CEL 的储备很正确)

最后,就是 Istio 终于把 iptables 相关处理代码中对 22 端口硬编码的部分去掉了,可以通过 ISTIO_LOCAL_EXCLUDE_PORTS 进行配置。这段代码其实存在很久了,这是 Istio 为了兼容在虚拟机 VM 上的用例专门加的。

更多关于 Istio v1.13.0 版本的信息请参考其 ReleaseNote

Kyverno v1.6.0 正式发布

Kyverno 是 Kubernetes 上原生的策略引擎,它主要的实现原理是利用 Kubernetes 提供的 Admission controller 机制。关于 Kubernetes Admission controller 机制可以参考我之前的文章:《搞懂 Kubernetes 准入控制(Admission Controller)》

这个版本提供了很多有趣的功能,我挑几个特别值得关注的特性吧:

  • 基于 sigstore Cosign 的镜像验证策略规则已进入到 beta 阶段。关于 Cosign 如何使用,可以参考我之前的文章 云原生时代下的容器镜像安全(上)。 在这个版本中其实增加了包括 keyless, annotation 等相关的很多增强,这个特性也非常的方便;

  • 可以在 Kyverno 策略中直接使用 OCI 容器镜像相关的元信息了,比如检查镜像的 label,挂载卷以及一些其他的配置。 比如,一种常见的使用场景是我们希望容器镜像不要过大,那么就可以使用如下的策略文件来限制集群内使用体积过大的容器镜像了。

如下策略文件表示仅允许使用体积小于 2Gi 的容器镜像,如果镜像过大,则直接拒绝。

apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
  name: images
spec:
  validationFailureAction: enforce
  rules:
  - name: only-allow-small-images
    match:
      resources:
        kinds:
        - Pod
    preconditions:
      all:
      - key: "{{request.operation}}"
        operator: NotEquals
        value: DELETE
    validate:
      message: "images with size greater than 2Gi not allowed"  
      foreach:
      - list: "request.object.spec.containers"
        context: 
        - name: imageSize
          imageRegistry: 
            reference: "{{ element.image }}"
            # Note that we need to use `to_string` here to allow kyverno to treat it like a resource quantity of type memory
            # the total size of an image as calculated by docker is the total sum of its layer sizes
            jmesPath: "to_string(sum(manifest.layers[*].size))"
        deny:
          conditions:
            all:
            - key: "2Gi"
              operator: LessThan
              value: "{{imageSize}}"

此外,这个版本中还增加了很多有用的函数,可用于进行数据处理。

更多详细内容可参考其 ReleaseNote

Trivy v0.23.0 正式发布

Trivy 是一款简单易用的漏洞扫描工具,关于 Trivy 我之前已经写过很多篇文章了,这里就不赘述了。近期它发布了 v0.23.0 版本,这个版本中有一些值得关注的内容:

  • Trivy DB 原先是通过使用 https://github.com/aquasecurity/trivy-db 项目的 GitHub Release 进行下载的,但是目前如果出现大量重复下载,会触发 GitHub 的限流策略。所以现在选择将 Trivy DB 切换为使用 GitHub Container Registry 进行托管了。这样一方面可以规避掉 GitHub 限流的问题,另一方面也可以可以利用 ghcr.io 提供的数据分析工具等。 需要注意的是,这是一个破坏性变更。

  • Trivy 现在可以直接从 Azure 的 ACR 下载镜像并进行扫描了,不再需要安装 az 工具,或者预先下载镜像了;

更多详细内容可参考其 ReleaseNote

上游进展

  • #107695 · kubernetes/kubernetes 这个 PR 实际上是对 Kubelet 管理的 Static Pod 生命周期部分的一个修正。我们都知道 Static Pod 的生命周期是不受 kube-apiserver 影响的,并且是由 Kubelet 管理的。但是之前几个相关的 issue 和 PR 都并没有覆盖到重启 Pod 时候需要名称完全相同。这个 PR 中对其逻辑进行了修正,增加了 Pod 的完整名称;

  • #107775 · kubernetes/kubernetes 如果调度过程中,Pod 抢占失败,则在 event 中为其增加详细内容。这对于我们去调试问题来说是非常有帮助的;

  • #107317 · kubernetes/kubernetes 当前 Kubernetes 仓库中 in-tree 的 dockershim 组件的代码已经删除,其他相关组件比如 kubelet 中的清理也基本完成了。这个 PR 中完成了 kubeadm 对于移除 in-tree dockershim 的相关支持和逻辑,主要是变更默认的容器运行时的配置,访问地址等。关于 Kubernetes 移除 in-tree 的 dockershim 相关内容的详细内容可查看我之前的文章 《K8S 弃用 Docker 了?Docker 不能用了?别逗了!》。我在本周五( 2 月 18 日)晚上,也会做一场直播,和 SUSE Rancher 的两位小伙伴一起聊聊关于 Kubernetes 移除 dockershim 后,企业用户如何处理的话题。

题外话

最近一段时间没有持续更新,感谢大家的关注。这段时间主要是两方面的原因,一方面是在进行个人的休整,另一方面也是事情较多。

不过,从这篇开始,「K8S 生态周报」将会正常的恢复每周更新啦!希望不断更!


欢迎订阅我的文章公众号【MoeLove】

TheMoeLove

加载评论