49 K8S 之 Envoy 代理程序
Contour 是 Kubernetes Ingress 控制器的另一款开源实现,它以高性能的 Envoy 代理程序作为数据平面,支持开箱即用的动态配置和多种高级路由机制,支持 TCP 代理,并且提供了自定义资源类型 HTTPProxy 资源以扩展 IngressAPI,以更丰富的功能集部分解决了 Ingress 原始设计中的缺点,是 Ingress 控制器较为出色的实现之一。
Envoy 是专为大型现代 SOA 架构设计的应用代理和通信总线,使用 C++语言编写,是高性能的 HTTP/HTTPS 协议代理,支持负载均衡、超时、重试、熔断、限流和回退等多种高级路由功能,支持 HTTP/2 和 gRPC,而且能够作为 HTTP/1.1 和 HTTP/2 之间的双向透明代理机制。Envoy 原生支持动态配置和服务发现机制,能够通过 xDS API 从控制平面(管理服务器)获取配置信息,同时提供了良好的可观测性,未来甚至会作为 UPDA(Universal Data Plane API)的标准实现之一。
Envoy 通过侦听器监听网络套接字以接收客户端请求,并且支持在一个进程上启用任意数量的侦听器,从而赋予用户按需配置 Envoy 监听一至多个套接字的能力。每个侦听器都应独立配置一些网络(L3/L4)过滤器,在接收到请求后,侦听器负责实例化指定过滤器链中的各个过滤器,并由这些过滤器处理后续的相关事件。一般说来,用户可根据不同的过滤器链配置侦听器以完成不同代理任务,例如 HTTP 代理、TCP 代理、TLS 客户端认证、限速等。
Envoy 的集群管理器负责管理配置的所有上游集群,包括获知上游主机健康可用状态、负载状态、连接类型以及适用的上游通信协议(HTTP/1.1、HTTP/2)等,并向前端的过滤器堆栈暴露 API,允许过滤器根据请求及处理结果按需建立与上游集群的 L3/L4 或 L7 的通信连接。一旦在配置中定义了集群,集群管理器需要知道如何解析集群中的成员,即端点配置信息。目前,Envoy 支持的端点配置支持包括静态配置、严格 DNS、逻辑 DNS、原始目标和 EDS 几种。
Envoy 内置了一个层次化的动态配置 API 用于集中式管理配置信息,该 API 可借助服务发现服务(Service Discovery Service,即服务发现自身作为一种服务)机制支持多种服务发现方式包括:
1)端点发现服务(Endpoint Discovery Service,EDS)
2)集群发现服务(Cluster Discovery Service,CDS)
3)路由发现服务(Route Discovery Service,RDS)
4)密钥发现服务(Secret Discovery Service,SDS)
5)侦听器发现服务(Listener Discovery Service,LDS)
6)健康发现服务(Health Discovery Service,HDS)
7)聚合发现服务(Aggregated Discovery Service,ADS)
Envoy4 种工作模式:
1)边缘代理:工作在整个系统架构的前端,接收来自外部客户端的请求,并将它们路由到相应的后端服务;除了必要的高级路由功能之外,处理 TLS/SSL 连接也是其必要的功能之一。
2)服务入站侦听器:负责接收并分发某特定服务的入站流量,可能会涉及应用程序的多个端口,并实现诸如重试、缓冲和熔断一类的功能。
3)服务出站侦听器:负责管控离开某特定服务的流量,协调服务间通信,实现诸如负载均衡和速率限制之类的功能;此监听器支持 HTTP/1.1 或 HTTP/2,具体取决于应用程序的功能。
4)外部服务出口侦听器:管理由系统内部服务到系统外部服务的流量。
版权声明: 本文为 InfoQ 作者【穿过生命散发芬芳】的原创文章。
原文链接:【http://xie.infoq.cn/article/b751c3fab4488dcb791bc4f32】。文章转载请联系作者。
评论