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

你可能感兴趣的:(Linkerd 2.2 发布,引入自动请求重试,支持自动注入)