Alpha 特性:API 优先级和公平性

上周,Kubernetes 官方博客介绍了 1.18 版本中的一个 Alpha 新特性:API 优先级和公平性(API Priority And Fairness),它允许集群管理员将控制平面的并发性划分为不同的加权优先级。

apiserver 有一个简单机制保护自己不受 CPU 和内存过载影响:对 mutating 和 readonly 请求的 max-in-flight 限制。除此之外,请求之间没有其他区分,这意味着可能会存在这样的情况:一个请求子集挤出其他请求

简而言之,Kubernetes 工作负载能对 apiserver 进行 DoS,导致其他重要流量间歇性地失败。最极端的一种情况就是一些损坏的节点或控制器可以将一个繁忙的集群推到崩溃边缘,将一个本地问题变成控制平面故障。

为了解决上述问题,Kubernetes v1.18 引入 API 优先级和公平性,旨在对每个 apiserver 中现有的进行中的 max-in-flight 请求处理程序进行归纳,使其更加智能和可配置。

  • 每个请求都通过流模式(Flow Schema)匹配。流模式声明与之匹配的请求的优先级,并为这些请求分配一个“流标识符(flow identifier)”。流标识符是系统如何确定请求是否来自相同的源;
  • 可以将优先级配置为以多种方式运行。每个优先级都有自己的独立并发池。优先级还引入了对不能立即得到服务的请求进行排队的概念;
  • 为了防止任何一个用户或命名空间独占一个优先级级别,可以将它们配置为具有多个队列。“洗牌分片(Shuffle Sharding)”用于将每个请求流分配给队列的一个子集;
  • 最后,当有处理请求的能力时,使用“公平排队(Fair Queuing)”算法来选择下一个请求。在每个优先级内,队列以公平性进行竞争。

根据测试结果,从可伸缩性和性能的角度看,API 优先级和公平性表现得超乎预期,详情可见:

https://github.com/kubernetes/kubernetes/pull/88177#issuecomment-588945806

安全漏洞:K8s & HAProxy

CVE-2019-11254

CVE-2019-11254 是 kube-apiserver 中的拒绝服务漏洞,允许授权用户发送恶意 YAML 负载导致 kube-apiserver 在解析 YAML 时会消耗过多的 CPU 周期,严重等级为中。受该漏洞影响的版本为 <= v1.15.9、 v1.16.0-v1.16.6 和 v1.17.0-v1.17.2。

集群管理员可以通过阻止未经身份验证或未经授权访问 kube-apiserver 避免漏洞影响,相关修复已发布:

  • v1.15.10 <https://github.com/kubernetes/kubernetes/releases/tag/v1.15.10 >
  • v1.16.7 < https://github.com/kubernetes/kubernetes/releases/tag/v1.16.7>
  • v1.17.3 < https://github.com/kubernetes/kubernetes/releases/tag/v1.17.3>

CVE-2020-11100CVE-2020-11100 指的是HAProxy 处理某些 HTTP/2 请求数据包的方式存在缺陷。攻击者可通过发送 HTTP/2 请求数据包破坏内存,从而导致崩溃或使用运行 HAProxy 的用户权限执行远程任意代码,Bug 等级为严重。

为了避免漏洞影响,工程师可以不启用对 HTTP/2 协议的支持:可通过在 haproxy 配置文件中搜索包含“h2”的行来检查是否已启用 http2。

Argo 加入 CNCF 孵化器

上周,CNCF 技术监督委员会(TOC)投票决定接受 Argo 作为孵化级别的托管项目

Argo 项目是一组基于 Kubernetes CRD 实现的 Workflow 开源工具,它基于 Kubernetes 的调度能力可实现工作流的控制和任务的运行,已被超过 100 个组织(包括 Adobe、Google、GitHub、IBM 等)积极地用于生产环境。Argo 包含四个子项目:

  • Argo Workflows:Kubernetes 的容器原生工作流引擎,支持 DAG 和基于步骤的工作流;
  • Argo Events:Kubernetes 的基于事件的依赖管理器;
  • Argo CD:支持基于声明式 GitOps 的 Kubernetes 资源部署,包括 Argo Events、服务和跨多个 K8s 集群的部署;
  • Argo Rollouts:支持声明式渐进交付策略,如灰度、蓝绿、和更一般的实验形式。

目前,Argo 已拥有 8300 余颗 GitHub star、425 位贡献者和 2800 名 Slack 成员。通过加入 CNCF,Argo 团队将继续致力于 Kubernetes 上的微服务和机器学习应用程序(MLOps)的持续和渐进交付,以发展 Argo 社区。

检测到大规模 K8s 集群挖矿攻击

上周,微软 Azure 安全中心宣布检测到一个新的专门针对 Kubernetes 的大规模加密货币挖矿攻击。

劫持容器化环境用来挖矿并不是新事物,通常情况下,这些攻击一般发生在带有已知漏洞的易受攻击的容器(例如 Web 应用程序)中。但这次微软发现的新型攻击攻击规模惊人:在短短两个小时内,一个恶意容器就能被部署在数十个 Kubernetes 集群上

这类攻击的原理是让容器从公共存储库运行镜像kannix / monero-miner,然后通过该镜像运行加密恶意软件 Monerominer。由于该容器是由kube-control部署的,根据配置文件,每个集群会执行 10 个 Pod 副本。

在部署挖矿容器的同时,该恶意攻击还会枚举包括 Kubernetes secrets 在内的集群资源,这可能导致连接字符串、密码等信息被暴露。有趣的是,该攻击使用的身份是system:serviceaccount:kube-system:kubernetes-dashboard,也就是仪表板服务帐户,这表明恶意容器由 Kubernetes 仪表板部署,资源枚举也由仪表板服务帐户启动

攻击者可以使用以下三种方法利用 Kubernetes 仪表板:

  • 暴露的仪表板:集群所有者将仪表板暴露给了 Internet,攻击者通过扫描发现了它;
  • 攻击者可以访问集群中的单个容器,并通过集群内部网络访问仪表板;
  • 使用云或集群凭证获取权限。

为了避免这类攻击,集群所有者应避免 Kubernetes 仪表板暴露,并在集群中启用 RBAC,向服务帐户授予有限的权限,并设置只允许使用受信任的镜像。

何时使用 Jenkins vs.Jenkins X

如今,DevOps 团队可以使用 Jenkins 或 Jenkins X 自动化 CI/CD 管道,但是它们之间有重要的区别。

Jenkins 是一个著名且经过实际测试的 CI 工具,它不是软件交付生命周期中的第一步,但它提供了在整体过程中许多步骤的自动化技术,可以自动化从开发到运维的一系列复杂事件。Jenkins 的一大特点在于配置的灵活性,这种灵活性来自一系列插件,这些插件可与其他工具集成以进行构建管理、源代码管理等。

而 Jenkins X 最初是用于 Kubernetes CD 的 Jenkins 子项目。它专门用于管理 Kubernetes 容器编排系统,可以贯穿整个 DevOps 管道,基于 Jenkins 引擎全面自动化构建软件的过程。

对于 CI/CD 自动化,Jenkins 更加灵活,这意味着 DevOps 团队可以将其用于更广泛的任务,例如将不同工具集成到工作管道中。而选择 Jenkins X 这意味着为追求方便、简单牺牲一定的灵活性(及其许多插件)。

两者最大的区别之一是 GUI 与命令行管理方法。如果团队仅在命令行上使用 Jenkins X,他们就无法像使用 Jenkins 一样访问图形界面来配置其环境的各个部分,因此对于尚不习惯仅采用命令行工作的 DevOps 团队,Jenkins X 的学习曲线可能更陡峭。

总体而言,在 Jenkins 和 Jenkins X 之间选择哪个具体取决于工作负载。如果管理对象是 Kubernetes,最好使用 JenkinsX;如果拥有大量旧系统或需要在不同平台上工作,应首选 Jenkins。如果 DevOps 工具链出现在 IT 组织内的各个小组中,每个小组在从代码创建到生产运营的过程中都是用不同的工具和流程,那么灵活的 Jenkins 会比 Jenkins X 更合适。

本周 K8s 开源项目推荐

helm-monitor

  • 这是一种工具,用于监控 Kubernetes Helm 并基于 Prometheus、Elasticsearch 和 Sentry 的指标执行自动回滚。
  • github.com/ContainerSolutions/helm-monitor

kubedoom

  • 混沌工程工具,通过玩 Id's DOOM 杀死 Kubernetes Pod!
  • github.com/storax/kubedoom

Kured

  • 这是一个 Kubernetes 守护程序集,当基础 OS 的软件包管理系统指示需要执行某些操作时,该节点将执行安全的自动节点重新启动。
  • github.com/weaveworks/kured

Weathervane

  • 这是一个应用程序级性能基准工具,可用于研究内部部署和基于云的 Kubernetes 集群的性能特征。
  • github.com/vmware/weathervane

kubenav

  • 这是一款移动和桌面应用程序,可帮助管理 Kubernetes 集群并了解集群中的最新情况。
  • github.com/kubenav/kubenav

Kubevious

  • 这是一款开源软件,可为 Kubernetes 提供可用的高度图形化界面,并为操作员提供了避免和识别配置和操作错误的提示。
  • github.com/kubevious/kubevious

原文请点击:https://mp.weixin.qq.com/s/MRe-XBrnKaQcg8leO61sXA