Envoy Gateway 通往 GA 之路

Envoy Gateway 通往 GA 之路

Envoy Gateway 正在稳步推进,下一个目标是发布 v1.0 版本,也就是宣布 GA(基本生产可用)。

这将是一个重要的里程碑,标志着 Envoy Gateway 准备好在生产环境中大规模部署。

我们的团队全力以赴,确保在 2024 年 3 月初,在法国巴黎举办 Kubecon 宣布项目的 GA,用户可以完全信赖地使用 Envoy Gateway。我会负责 Envoy Gateway GA 的项目管理,优先级设置,以及后续的版本发布。

我会通过以下的内容来阐述,Envoy Gateway 为 GA 做了哪些事。

Envoy Gateway 优势在哪?

现在我们谈到 API 网关和服务网格,Envoy 的身影已经出现在云原生网络中的各处,Envoy 在设计之初,就是为了微服务和云原生所设计,动态、高性能、现代化协议的支持、可观测性、高扩展性,这些都是 Envoy 为什么在市场上占有率逐年增加的原因。

而 Envoy Gateway 是 Envoy 社区发起的子项目,是和 Envoy 数据面走的最近的 API 网关实现,我们从四个方面来说:数据面、控制面、Gateway API、可维护性

数据面

从数据面来说,由于 Envoy Gateway 归属于 Envoy 社区,所以数据面所有的问题都能快速解决,能够获得来自 Envoy 维护者团队在数据面的支持。

同时从 Envoy Gateway 出发去推动一些 Envoy 的变更会容易很多,如 Bug 修复,新功能等,相辅相成,双向的促进。

控制面

从控制面来说,Envoy Gateway 维护者团队来自于众多 API 网关开源项目以及供应商的核心成员,比如 Istio、Emissary、Contour 的维护者,在构建 API 网关上有着丰富的经验。

Gateway API

Gateway API 在最近也宣布了 GA,它的重要性逐日递增。Envoy Gateway 维护者也在 Gateway API 项目中发挥了重要的作用,所以能够更快的在 Gateway API 中推动变更,维护者团队中 Arko 以及我,都是 Gateway API 的团队成员。

从技术角度来说,很多人可能会纳闷,既然实现 Gateway API 的不止 Envoy Gateway,那 Envoy Gateway 和其他实现有什么不同呢?

因为数据面的不同,所以 Gateway API 提供了灵活的扩展性,比如 GatewayClass 的 ParametersRefs,xRoute 的 extensionRef,以及 PolicyAttachment 机制。

正是因为这些扩展性,也使得不同的数据面在 Gateway API 实现了差异化。Envoy Gateway 也基于扩展机制,实现了 Envoy Specific 的 API,支持了更多其他数据面无法实现的功能比如 WASM 扩展等。

可维护性

同时因为项目的中立,以及对多方共同利益,在项目长远的可维护性上也有保证,也会得到来自 CNCF 以及 Envoy 社区的支持。

目前 Envoy Gateway 维护者团队的 Tetrate 公司,已经基于 Envoy Gateway 发布了他们的商业化产品 TEG,也有更多的公司/团队正在对 Envoy Gateway 进行生产检验。也有不少国外的公司也和我交流,希望 EG 能尽快确定 GA 的时间节点,想更快的在生产中投入使用。相信在 GA 后,这一趋势会进一步扩大。

稳定性和性能

为了达到这一目标,我们已经完成了所有 v1.0 Gateway API 上游特性的一致性测试(conformance),并且正在努力通过覆盖所有扩展特性的 e2e 测试,以确保所有功能的健壮性。

此外,我们已经实现了 60% + 的单元测试的代码覆盖率,这一覆盖率也会进一步增加。

与此同时,我们正在努力确保 Envoy Gateway 在大规模使用时能够满足的性能标准,团队围绕着性能不断的在优化,比如采用 Delta xDS,以及内部的 WatchableMap 设计,以及对 go-control-plane 的一些优化。

在 GA 前计划社区会发布一份详细的性能测试报告。

核心特性和扩展性

Envoy Gateway 的核心是对 Gateway API 的实现,我们已经实现了核心的 API 网关特性,并通过稳定的 API 暴露给用户。这包括对 HTTP, HTTP3(QUIC), gRPC, TCP, TLS 和 UDP 协议的支持,以及基于 ReferenceGrant 的跨命名空间访问控制和更多高级流量管理功能。具体来说,我们提供了以下关键特性:

  • 多协议支持:HTTP, HTTP3(QUIC), gRPC, TCP, TLS 和 UDP 协议。

  • 跨命名空间访问控制:基于 ReferenceGrant 实现了跨命名空间的资源引用。

  • 路由匹配:支持基于 Path、Header、Params、Method、Host 等多种方式进行路由匹配。

  • 流量控制:请求头改写、响应头改写、流量镜像、URL 改写、重定向、流量权重分发。

  • 安全性:支持 CORS、Basic Auth、JWT、OIDC,同时也可以基于 EnvoyPatchPolicy 实现 WAF 的能力

  • 熔断限流:Envoy Gateway 支持全局限流,可以限制到达特定服务的请求速率。同时也正在支持熔断的功能,它可以防止系统过载,并在后端服务不稳定时保护系统。
  • 超时重试:允许配置请求超时和重试策略。这意味着如果一个请求在指定的时间内没有完成,网关可以自动重试该请求,这有助于提高服务的可靠性。
  • KeepAlive:支持 Client 和 Server 两侧的 TCP KeepAlive,这有助于维持客户端和服务器之间的持久连接。
  • 故障注入:为了测试系统的弹性,Envoy Gateway 也正在支持故障注入功能。这包括可以有意地引入延迟、返回错误等,模拟后端服务的各种故障情况。这对于在开发和测试环境中进行混沌测试和验证服务的容错能力非常有用。
  • 负载均衡:内置多种负载均衡策略,如轮询、最少连接、随机、一致性哈希等。

  • 主动健康检查:提供健康检查机制,以确保流量只会被路由到健康的后端服务。

  • 可观测性:控制面和数据面都集成了丰富的指标和日志,方便监控和故障排查。

  • 动态配置:值得一提的是上述所有的能力,都是动态配置的,无需重启数据面。

扩展性方面,我们引入了 Envoy Gateway Extension Manager(基于 gRPC 的方式动态 Patch Envoy 的 xDS 资源) 和 EnvoyPatchPolicy(基于 CRD 的方式去 Patch Envoy 的 xDS 资源),用于对 Envoy 有更多定制化需求的供应商,解锁 Envoy 的所有能力。

同时正在开发 WASM/Go/Lua 插件策略,以便用户可以更安全和方便的根据自己的需求动态扩展网关功能。

灵活部署和多租户支持

Envoy Gateway 提供了灵活的部署模式,包括支持单个或多个的 GatewayClass,以及合并 Gateway 的部署模式,同时也支持指定命名空间和集群范围的 Watch 模式。EG 还支持在不同命名空间中部署多租户 Envoy Gateway。

并且 Envoy Gateway 已经实现了基于 MCS API 的多集群支持。

运维和可观测性

为了确保 Envoy Gateway 的顺利运行和维护,我们提供了一系列的日常运维工具和特性。安装过程已经被简化,可以通过 Helm 或 Yaml 进行,以适应不同用户的需求。EG 重视可观测性,为数据平面和控制平面提供了丰富的监控和日志记录功能,这对于确保系统的健康和及时响应潜在问题至关重要。

此外,egctl 命令行工具的核心功能已经就绪,它将为用户提供一个强大的接口来管理和配置 Envoy Gateway。我们正在努力扩展其功能,以覆盖更多的运维场景。

尽管我们已经在自定义 Envoy Kubernetes 资源方面取得了进展,但我们认识到还有一些关键领域需要改进完善,例如故障排查和升级流程(包括 CRD、Envoy Proxy 和 Envoy Gateway)。

完善文档

我们正在编写更全面的文档,以确保所有功能、操作和相关信息都被详细记录,这将帮助用户更好地理解和使用 Envoy Gateway。我们的目标是创建一个易于访问和理解的文档库,以支持用户和开发者社区。

GA 后 Envoy Gateway 也会考虑支持文档本地化,我也会发起对 Envoy Gateway 中文本地化的工作。

团队合作

团队合作是我们成功的关键。所有与 GA(正式发布)相关的问题都在我们的项目 Envoy Gateway: The Road to GA 下进行管理,该板块包括 Backlog, Todo, In Progress, Review 和 Done 等部分。

此外,所有相关问题都被标记为 road-to-ga,以便于识别和跟踪。

市场推广和品牌建设

我们计划通过在 CNCF 以及 blog.envoyproxy.iogateway.envoyproxy.io 上发布博客文章来提高 Envoy Gateway 的市场知名度。这些文章将介绍 Envoy Gateway 的特性、优势以及如何在不同场景下使用它。

最后,我们正在设计一个符合 CNCF 标准的 Envoy Gateway logo,这将有助于提升项目的品牌形象,并在社区中建立更强的识别度。

说到最后

所有对 GA 的记录,我总结了一个 GitHub Issue: https://github.com/envoyproxy/gateway/issues/2249 ,感兴趣的伙伴可以在上面跟踪 GA 的状态。

总的来说,Envoy Gateway 在多方的努力下,它正在迅速成长,上图可以看到参与到 Envoy Gateway 贡献的公司,包括:Tetrate、腾讯、华为、VMware、Google、Ambassador、Intel、Apple、Lyft、RedHat 等。

我们致力于提供一个稳定、可扩展且易于管理的 API 网关解决方案。我们期待社区的反馈和参与,共同推动 Envoy Gateway 向前发展,请期待 Envoy Gateway 的 GA,以及 GA 后更长久的发展。

comments powered by Disqus

Related Posts

Envoy Gateway 中使用 HTTP3/QUIC

Envoy Gateway 中使用 HTTP3/QUIC

本文介绍如何在 Envoy Gateway 中使用 HTTP3/QUIC

Read More
Envoy Gateway 快速开始

Envoy Gateway 快速开始

本文介绍如何快速部署 Envoy Gateway,以及通过一个简单的例子,来展示如何通过 Envoy Gateway 访问 kubernetes 集群中的服务。

Read More
浅谈 Golang 代码覆盖率

浅谈 Golang 代码覆盖率

本文浅谈一下 Golang 代码测试覆盖率的一些细节与原理.

Read More