Linkerd 2.2 发布,引入自动请求重试,支持自动注入

阅读数:2848 2019 年 2 月 18 日 17:44

Linkerd 2.2 发布,引入自动请求重试,支持自动注入

2 月 12 日 Linkerd 2.2 版本正式发布。这个版本主要引入了自动请求重试和超时,以及完全支持(非实验)的自动注入功能。它添加了一些新的 CLI 命令(包括 logs 和 endpoints),为 Linkerd 的控制平面提供诊断可见性。最后,它带来了两个令人兴奋的实验性功能:加密安全的客户端标识头和 CNI 插件,该插件可以避免在部署时需要 NET_ADMIN 内核功能。

此版本包括 Attest、Buoyant、Mesosphere、Microsoft、Nordstrom 等人的贡献。特别感谢所有提交问题、提交 PR、测试功能的人!

通过我们的周体验版本跟踪 2.x 分支的那些人已经看到了这些功能的实际应用。无论哪种方式,你都可以通过运行以下命令下载稳定的 2.2 版本:

复制代码
curl https://run.linkerd.io/install | sh

通过这种方式,体验所有的功能!

重试和超时

Linkerd 2.2 现在可以自动重试失败的请求,在应用程序出现部分故障时提高整体成功率。基于 2.1 版本中引入的服务配置文件模型,Linkerd 允许你为每个路由的基础配置此行为。

linkerd routes 的输出包括 ACTUAL_SUCCESS,线上请求的成功率,以及 EFFECTIVE_SUCCESS,调用者请求成功率,即在 Linkerd 完成重试之后。

当然,控制何时可以进行重试是安全使用重试的关键组成部分。Linkerd 2.2 允许你标记哪些路由是幂等(isRetryable),限制重试单个请求所花费的最长时间(timeout),以及配置可以重试的总体请求的百分比(retryBudget)。这些参数可以确保重试发生的安全性,并且不会在已经发生故障的系统中加重问题。

自动注入(取消注入和改进注入)

Linkerd 2.2 的自动注入是一个完全支持(非实验)的功能。自动注入功能允许 Kubernetes 集群在部署时自动添加(“注入”)Linkerd 的数据平面代理到应用程序 pods。将代理注入从客户端移植到集群上有助于确保所有 pods 统一地运行代理,无论它们如何部署。

Linkerd 2.2 还将自动注入的行为切换为选择加入而不是选择退出。这意味着,一旦启用,只有具有 linkerd.io/inject: enabled 注释的命名空间或 pods 具有自动注入行为。

最后,对于客户端(非自动)注入,如果它们已在清单中指定,Linkerd 2.2 改进了 linkerd inject 命令来升级代理的版本(之前的行为是完全跳过它们),并引入了 linkerd uninject 命令用于从给定的 Kubernetes 清单中删除 Linked 的代理。

使用 CNI 插件更好地处理 NET_ADMIN

Linkerd 2.2 引入了一个新的实验性 CNI 插件,可在用户部署的应用程序的安全上下文之外进行网络配置。这使得 Linkerd 更适合多租户集群,因为管理员可能不希望向用户授予内核功能(特别是 NET_ADMIN)。

背景:将 Linkerd 的数据平面代理注入到 pod 中需要设置 iptables 规则,以便进出 pod 的所有 TCP 流量自动通过其代理,无需任何应用程序配置。通常,这是通过作为部署者的服务账号运行的 Kubernetes Init Container 来完成的。在单租户群集中,这没有问题,但在多租户集群中,这可能会产生问题:修改 iptables 规则需要内核的 NET_ADMIN 功能,但授予此功能会允许租户控制整个主机的网络配置。

使用 Linkerd 的新 CNI 插件,网络配置在 CNI 级别完成,有效地消除了用户需要 NET_ADMIN 内核功能的要求。这使得在多租户、安全意识环境中运行 Linkerd 变得更加实用。

这个插件由我们 Nordstrom Engineering 的朋友们贡献,并受到 Istio 的 CNI 插件的启发。特别感谢 Cody Vandermyn 的这个功能。

客户端身份

Linkerd 2.2 引入了一种新的安全机制,用于对进入请求提供客户端身份。当启用—tls=optional 时,Linkerd 现在为每个请求增加了 l5d-client-id 头。应用程序代码可以使用这个头参数来实现授权,例如,要求对所有请求进行身份验证或限制对特定服务的访问。

这个头参数目前标记为实验性,但是为 Linkerd 提供全面的身份验证和授权机制迈出了关键的第一步。在未来几周,我们将发布 Linked 的路线图,用于在 Kubernetes 集群内安全地提供认证和通信加密。

Linkerd 的下一步计划

Linkerd 2.2 是来自全球各地贡献者的数月工作的结晶,我们非常高兴能够发布它!

在接下来的版本中,Linkerd 2.x 将继续完善可靠性、流量转移和安全性的相关功能(特别是围绕通信的身份和机密性)。从中期来看,我们也将努力减少 Linkerd 对 Kubernetes 的依赖。最后,Linkerd 1.x 继续积极开发,我们仍然致力于支持我们的 1.x 用户。

Linkerd 是一个社区项目,由 Cloud Native Computing Foundation 托管。如果你有功能请求、问题或评论,我们很乐意你能加入我们快速发展的社区!Linkerd 在 GitHub 上托管,我们在 Slack Twitter 邮件列表上拥有一个蓬勃发展的社区。快来加入吧!

查看英文原文: Announcing Linkerd 2.2

评论

发布