写点什么

49 K8S 之 Envoy 代理程序

  • 2021 年 12 月 19 日
  • 本文字数:1260 字

    阅读完需:约 4 分钟

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)外部服务出口侦听器:管理由系统内部服务到系统外部服务的流量。


发布于: 2 小时前阅读数: 8
用户头像

InfoQ签约作者 2018.11.30 加入

热爱生活,收藏美好,专注技术,持续成长

评论

发布
暂无评论
49 K8S之Envoy代理程序