专栏首页CNCF如何高效地编写Envoy过滤器!第1部分

如何高效地编写Envoy过滤器!第1部分

作者:Venil Noronha

Envoy是一个可编程的L3/L4和L7代理,支持当今的服务网格解决方案,包括Istio、AWS App mesh、Consul Connect等。Envoy的核心提供几个过滤器,提供了一组丰富的特性,用于观察、保护和将网络流量路由到微服务。在这一系列的文章中,我们将了解Envoy过滤器的基础知识,并学习如何通过实现定制过滤器来扩展Envoy以创建有用的特性!

介绍

Envoy提供一组API,允许用户和控制平面静态和动态地配置代理。通过配置侦听器(Listener),用户可以通过代理启用流量流,然后使用几个过滤器(Filter)增强数据流。使用这些过滤器的组合,Envoy可以测量、转换和执行更高阶的访问控制操作。

顾名思义,侦听器允许Envoy侦听配置地址上的网络流量。然后,每个侦听器定义一组位于数据路径中的过滤器,共同组成过滤器链(filter chain)。通过组合和安排一组过滤器,用户可以配置Envoy来转换协议消息、生成统计信息、执行RBAC等。Envoy提供了许多内置的过滤器,它还提供了API让你创建自己的过滤器!

过滤器的类型

Envoy目前提供了三种类型的过滤器,它们组成一个层次过滤器链。

  • 侦听器过滤器(Listener Filters)
  • 网络过滤器(Network Filters)
  • HTTP过滤器(HTTP Filters)

侦听器过滤器

侦听器过滤器在初始(预)连接阶段访问原始数据并操作L4连接的元数据。例如,TLS检查器过滤器(TLS Inspector Filter)标识连接是否经过TLS加密,并解析与该连接关联的TLS元数据。

网络过滤器

网络过滤器访问和操作L4连接上的原始数据,即TCP数据包。例如,TCP代理过滤器(TCP Proxy Filter)将客户端连接数据路由到上游主机,它还生成连接统计数据。

HTTP过滤器

HTTP过滤器在L7上运行,并由最终的网络过滤器(即HTTP连接管理器,HTTP Connection Manager)创建。这些过滤器访问和操作HTTP请求和响应。例如,gRPC-JSON转码器过滤器(gRPC-JSON Transcoder Filter)为gRPC后端提供了一个REST API,并将请求和响应转换为相应的格式。

请注意,Envoy正在不断发展,我们正在增加对QUIC协议的支持。这意味着过滤器API现在正在增强,并将很快支持UDP过滤器!

Envoy过滤器的好处

如前所述,Envoy过滤器为用户提供了几个好处。

  1. 可以创建一个中间层,以便在与不兼容的服务器通信时优雅地处理客户端。
  2. 你可以以透明和一致的方式度量API和服务的使用情况。
  3. 代理可以执行协议转换,允许不同的协议互操作。
  4. 代理可以通过过滤器做出智能路由决策(例如速率限制)。
  5. 这些过滤器可以通过一个称为过滤器状态(Filter State)的机制彼此共享数据。通过共享状态,像MySQL过滤器这样的过滤器可以与另一个过滤器(像RBAC过滤器)共享所访问的资源和执行的操作有关的信息,从而提供高阶RBAC解决方案。请注意,当前版本的MySQL过滤器依赖于动态元数据(Dynamic Metadata)来共享状态,现在不提倡使用动态元数据来共享状态,而是提倡使用过滤器状态。

总结

Envoy通过内置过滤器提供了丰富的特性,可以通过侦听器配置快速利用这些特性。过滤器链(filter chain)范式是一种强大的机制,Envoy允许用户通过扩展它的API来实现自己的过滤器。

在下一篇文章中,我们将了解Envoy的过滤器API,并学习如何创建自己的过滤器!

. . .

本文是与Envoy的高级维护人员Harvey Tuch合作撰写的。想了解更多关于服务网格的内容,请到我的个人博客venilnoronha.io。

免责声明:我的帖子是我自己的,不一定代表VMware的立场、策略或观点。

本文分享自微信公众号 - CNCF(lf_cncf),作者:CNCF

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-06-04

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 使用Let’s Encrypt在Kubernetes上保护Istio的Ingress服务

    这是我在kubernetes之上部署Istio系列文章中的第三篇,内容是关于我们试图通过Vamp Lamia实现的更多细节以及我们为什么选择Istio的原因,可...

    CNCF
  • 在Kubernetes集群中扩展CoreDNS

    我正在分享在Kubernetes(1.12)中使用CoreDNS(1.2.5)运行的一些测试结果,以便为将CoreDNS调整到您的集群提供一些参考点。除了在默认...

    CNCF
  • Kubernetes服务发现入门:如何高效管理服务?

    愈发复杂的应用程序正在依靠微服务来保持可扩展性和提升效率。Kubernetes为微服务提供了完美的环境,并能够让其与Kubernetes的工具组件和功能兼容。当...

    CNCF
  • Vue.js入门教程-过滤器

    (1)过滤器(Filters)提供了一种 执行文本转换的方法,比如说都转换成大写字母或者几乎做任何我们想做的事情。

    WEBING
  • Vue教程08(过滤器的使用)

    概念:   Vue.js 允许你自定义过滤器,可被用作一些常见的文本格式化。过滤器可以用在两个地方:mustache 插值和 v-bind 表达式。过滤器应该...

    用户4919348
  • 2.2.1、Google Analytics高级应用——过滤器的应用

    过滤器用于限制和修改数据视图中包含的数据。可以使用过滤器实现以下目的:排除来自特定IP地址的流量,仅包含某个子网域或目录中的数据,或者将动态网页网址转换为可读的...

    GA小站
  • 快速学习-主页面访问权限控制

    cwl_java
  • 【JAVA】如何利用TODO任务标签高效管理代办代码

    日常协同开发中,模块分配顺序、开发效率不一致的情况下会出现某一模块开发时需要调用其他开发人员所写模块未准备或者不清晰,代码搁置的情况下为了方便下次解决搁置代码、...

    ZhangXianSheng
  • 服务网关和 Zuul0 简介1 实践

    网关是具体核心业务服务的看门神,相比具体实现业务的系统服务来说它是一个边缘服务,主要提供动态路由,监控,弹性,安全性等功能,下面我们从单体应用到多体应用的演化过...

    JavaEdge
  • JDK1.9-Filter过滤器

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明...

    cwl_java

扫码关注云+社区

领取腾讯云代金券