我可以将 Envoy 与 Linkerd 一起使用吗?

Can I use Envoy with Linkerd?

大多数服务网格使用 Envoy 作为 sidecar 代理,但这似乎不是 Linkerd 的默认选项。我们已经在使用 Envoy 作为入口,并且真的不想在组合中添加新的代理。我们可以将 Linkerd 与 Envoy 一起使用吗?

这个问题我听过好几次了,我觉得这里有两个问题:

  1. 可以将 Linkerd 与 Envoy 一起用作 Ingress 控制器吗?
  2. Linkerd 控制平面是否支持使用 Envoy 作为数据平面代理?

第一个问题的答案是,你绝对可以使用 Linkerd with Envoy 作为 Ingress controller。 Ambassador and Contour 是使用 Envoy 作为路由入口流量代理的开源项目的两个示例。

将 Linkerd 与任何入口控制器集成需要一些特定于每个入口控制器的配置。您还需要确保运行入口控制器容器的 Pod 注入了 Linkerd 代理,以便入口控制器和服务工作负载之间的流量是 Linkerd 服务网格的一部分。

第二个问题的答案,也就是我想你问的那个问题是,Linkerd 提供了自己的开箱即用代理,名为 linkerd2-proxy,专门用于管理 Kubernetes 中的微服务工作负载. Linkerd 控制平面提供 API 端点,旨在与 linkerd2-proxy 一起使用,因此 Envoy 无法开箱即用。

也就是说,Linkerd 是一个开源项目,理论上您可以在 Linkerd 控制平面组件和 Envoy XSD API 之间编写一个适配器。在我的脑海中,我想不出一个常见的用例,在这个用例中构建这个适配器的努力会给 Linkerd 带来额外的价值。

William Morgan 写了一篇很棒的 blog post,描述了为什么 Linkerd 团队决定编写自己的代理而不是使用 Envoy。 tl;dr 是 Envoy 是一个通用代理,而 linkerd2-proxy 是专门为以最有效、最不引人注目的方式处理微服务流量而构建的。