在边缘,作为网关或在网格中构建控制平面以管理Envoy代理的指南

最近, Envoy已成为流行的网络组件。 马特·克莱因( Matt Klein )在几年前写了一个博客,内容涉及Envoy的动态配置API,以及它如何成为Envoy的采用曲线向右移的原因之一。 他称该博客为“通用数据平面API”。 由于有许多其他项目采用Envoy作为其产品的核心组件,因此可以说“ Envoy已成为应用程序/ L7网络解决方案的云原生架构中的通用数据平面”,而不仅仅是建立标准化的API 。

特使代理

此外,由于Envoy的通用数据平面API ,我们已经看到了许多管理层的实现,用于配置和驱动基于Envoy的基础架构。 我们将深入研究为Envoy构建控制平面所需的内容,以便您可以使用此信息来评估哪种类型的基础架构最适合您的组织和用例。 因为这是一个广泛的主题,所以我们将在接下来的几天中分多个部分讨论这个问题。 跟随( @christianposta , @soloio_inc )进入下一个条目。

在EnvoyCon / KubeCon上进行了一些精彩的演讲,其中一些组织分享了采用Envoy的经验,包括如何构建自己的控制飞机。 人们选择构建自己的控制平面的一些原因:

  • 是否具有基于具有预先存在的控制平面的不同数据平面的现有解决方案,并且需要对Envoy进行改造
  • 为不具有任何现有开源或其他Envoy控制平面(即VM,AWS ECS等)的基础架构进行构建
  • 不需要使用Envoy的所有功能; 只是一个子集
  • 对于Envoy配置,最好使用特定于域的API /对象模型,以使其更适合其工作流程/ worldview
  • 其他控制平面在各自组织准备部署时还没有处于成熟状态
特使代理

但是,仅仅因为某些早期采用者构建了自己的定制控制平面,并不意味着您现在应该做同样的事情。 首先,为Envoy构建控制平面的项目在去年已经相当成熟,在决定重新创建另一个控制平面之前,您应该探索使用这些平面的方法。 其次,正如Datawire的人们发现的那样, Daniel Bryant最近也明确指出, 为Envoy建造一架控制飞机并不是出于胆小 。

我参与 了几个为Envoy构建控制平面的开源项目 。 例如, Gloo是一个功能网关 ,可以充当功能非常强大的Kubernetes入口,API网关或功能网关,以简化从整体到微服务的过渡。 Gloo 有一个Envoy的控制面板,我们可以在本系列文章中引用它作为如何构建一个简单抽象的示例,该抽象允许您需要的控制点具有可插拔性和可扩展性。 您可以参考的其他固态控制面板实现是Istio和Heptio Contour ,我们将在整个博客系列中将其用作示例。 如果没有其他问题,您可以了解Envoy控制平面存在哪些选项,并在必须走这条路的情况下使用它来指导您的实现。

特使代理

在本博客系列中,我们将研究以下领域:

  • 采用一种机制来动态更新Envoy的路由,服务发现和其他配置
  • 确定哪些组件构成了控制平面,包括后备存储,服务发现API,安全组件等。 等
  • 建立最适合您的用例和组织的任何特定于域的配置对象和API
  • 考虑如何最好地使控制平面可在需要的地方插入
  • 部署各种控制平面组件的选项
  • 通过测试平面来考虑您的控制飞机

首先,让我们看一下使用Envoy的动态配置API在运行时更新Envoy来处理拓扑和部署中的更改。

使用xDS API动态配置Envoy

在Envoy之上进行构建的主要优势之一是其数据平面API。 借助数据平面API,我们可以动态配置Envoy的大多数重要运行时设置 。 Envoy通过其xDS API进行的配置最终在设计上是一致的 -也就是说,无法影响群集中所有代理的“原子更新”。 当控制平面具有配置更新时,它将通过xDS API使它们可供数据平面代理使用,并且每个代理将彼此独立地应用这些更新。

以下是我们可以通过xDS动态配置的Envoy运行时模型的各个部分:

  • 侦听器发现服务API – LDS发布用于侦听流量的端口
  • 端点发现服务API-用于服务发现的EDS ,
  • 路由发现服务API- RDS用于流量路由决策
  • 群集发现服务-CDS,用于我们可以将流量路由到的后端服务
  • 秘密发现服务–用于分发秘密(证书和密钥)的SDS
特使代理

该API是使用proto3协议缓冲区定义的,甚至还有一些参考实现,您可以用来引导自己的控制平面:

  • 去控制平面
  • Java控制平面

尽管每个区域(LDS / EDS / RDS / CDS / SDS,统称为“ xDS”)都是可动态配置的,但这并不意味着您必须动态配置所有内容。 您可以将静态定义的部分与动态更新的部分组合在一起。 例如,要实现一种服务发现类型,其中endpoints应该是动态的,但是clusters在部署时是众所周知的,则可以静态定义clusters并使用Envoy的Endpoint Discovery Service 。 如果您不确定在部署时将使用哪些上游群集,则可以使用“ 群集发现服务”动态查找这些群集 。 关键是,您可以构建一个工作流和流程,以静态配置所需的零件,同时使用动态xDS服务在运行时发现所需的零件。 之所以看到不同的控制平面实现,原因之一不是每个人都拥有一个完全动态且可替代的环境,其中所有部分都应该是动态的。 在存在现有约束和可用工作流程的情况下,采用最适合您的系统的动态级别。

对于Gloo,我们使用基于go-control-plane的控制平面来实现xDS API,以服务于Envoy的动态配置。 Istio以及Heptio Contour也使用此实现。 该控制平面API利用gRPC流调用并对API进行存根处理,以便您可以在其中填充实现。 Turbine Labs的Rotor项目是另一个不幸地不推荐使用但可以学到很多东西的项目 。 这是将Envoy的数据平面API与控制平面集成的一种高效方法。

gRPC流并不是更新Envoy配置的唯一方法。 在早期版本的Envoy xDS API中 ,轮询是确定新配置是否可用的唯一选项。 尽管这是可以接受的,并且满足“最终一致”配置更新的条件,但是它在网络和计算使用方面均效率较低。 适当调整轮询配置以减少浪费的资源也可能很困难。

最后,某些Envoy管理实现选择生成静态Envoy配置文件,并定期为Envoy替换磁盘上的配置文件,然后对Envoy进程进行热加载 。 在高度动态的环境(例如Kubernetes,但实际上是任何基于临时计算的平台)中,此文件生成,传递,热重启等的管理可能会变得笨拙。 Envoy最初是在执行这样的更新的环境中创建的(Lyft,创建它的地方),但是它们正逐步使用xDS API。

带走

Gloo小组认为,使用gRPC流和xDS API是为Envoy实施动态配置和控制的理想方法。 同样,如果不需要,并非所有Envoy配置都应动态提供,但是,如果您在高度动态的环境(例如Kubernetes)中运行,则动态配置Envoy的选项至关重要。 其他环境可能没有此需求。 无论哪种方式,用于动态部件的g​​RPC流API都是理想的。 这种方法的一些好处:

  • 事件驱动的配置更新; 当配置在控制平面中可用时,将配置推送到Envoy
  • 无需轮询更改
  • 无需热装特使
  • 没有交通中断

下一步是什么

在第一部分中,我们通过覆盖xDS API和为Envoy提供动态配置所需的其他选项,建立了有关如何为Envoy构建控制平面的一些基本上下文。 在接下来的几天(将在几天内发布)中,将介绍如何将控制平面分解为可部署的组件,确定所需的组件,特定于域的配置对象模型的外观以及如何考虑控件的可插入性。飞机。 在Twitter( @christianposta , @soloio_inc )或博客( https://blog.christianposta.com https://medium.com/solo-io )上关注

翻译自: https://www.javacodegeeks.com/2019/02/control-plane-manage-envoy-proxy-edge.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/345525.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java编译器分析_Java反编译器的剖析

java编译器分析简单地说,反编译器尝试将源代码转换为目标代码。 但是有很多有趣的复杂性-Java源代码是结构化的; 字节码当然不是。 而且,转换不是一对一的:两个不同的Java程序可能会产生相同的字节码。 我们需要应用试探法以合理地…

各种各样的数

数的类别 数可以被分类为数系的集合内。对于以符号表示数的不同方式,则请看记数系统。 自然数 主条目:自然数 最常用的数为自然数,有些人指正整数,有些人则指非负整数。前者多在数论中被使用,而在集合论和计算机科学…

JDK 11上的JavaFX

在第11版发布之后,人们对JavaFX与JDK的解耦感到百感交集。 我们中的许多人认为现在是时候告别JavaFX并改用另一种GUI技术了,而另一些人对此情况感到高兴。 他们认为,将JavaFX与Oracle分离开来,并致力于将其开发为开源社区驱动的项…

HMM(隐马尔可夫模型)

1.什么是熵(Entropy) 简单来说,熵是表示物质系统状态的一种度量,用它老表征系统的无序程度。熵越大,系统越无序,意味着系统结构和运动的不确定和无规则;反之,,熵越小,系统越有序&am…

Java NIO教程

1.简介 Java NIO是从Java 1.4引入的库。 自从Java NIO推出以来,它提供了另一种方法来处理I / O和网络事务。 它被认为是Java网络和Java IO库的替代方法。 开发Java NIO的目的是使输入和输出的事务异步和非阻塞。 阻塞和非阻塞IO的概念将在后面的部分中介绍。 目录…

关于判断函数凸或凹以及最优化的问题

大部分情况下都转换为凸优化问题&#xff0c;并通过最优化方法来求解&#xff0c;因此了解相关知识就显得尤为重要了。 主要内容&#xff1a; 问题引出凸集凸函数凸优化最优化 1、问题引出 在n维空间中&#xff0c;对于任意两个点&#xff0c;对于0<μ<1&#xff0c;…

javafx弹出式窗口_JavaFX 8的弹出式编辑器

javafx弹出式窗口在过去的几个月中&#xff0c;我很高兴与JavaFX 8一起使用&#xff0c;以便为计划和调度应用程序实现复杂的用户界面。 所需的功能之一是执行“就地”编辑的方法&#xff0c;即快速编辑用户选择对象的某些基本属性的方法。 遵循“如果您无法创新&#xff0c;就…

随机访问MAC协议 知识梳理(ALOHA,CSMA,CSMA/CD,CSMA/CA)

0、随机访问MAC的协议 数据链路层动态随机分配信道时对随机访问MAC协议&#xff1a;ALOHA&#xff0c;CSMA&#xff0c;CSMA/CD&#xff0c;CSMA/CA ALOHA&#xff0c;CSMA&#xff0c;CSMA/CD的区别仅在于是否对信道进行监听和是否有碰撞检测&#xff1a; 1、ALOHA&#xf…

认识CUBA平台的CLI

毫无疑问&#xff0c;软件开发人员&#xff08;尤其是Java开发人员&#xff09;的世界充满了键盘狂热者&#xff0c;最好是一次单击即可键入10-15个字母。 而且我们的社区也不例外&#xff0c;因此经常有人问我们“如何在没有CUBA Studio的情况下启动项目&#xff1f;”之类的问…

将matlab中数据输出保存为txt或dat格式

一、将matlab中数据输出保存为txt或dat格式的三种方法。 第一种方法&#xff1a;save&#xff08;最简单基本的&#xff09; 具体的命令是&#xff1a;用save *.txt -ascii x x为变量 *.txt为文件名,该文件存储于当前工作目录下&#xff0c;再打开就可以打开后,数据有可能是以…

马尔可夫链笔记

1 引言 之前学习了伯努利过程和泊松过程&#xff0c;它们是无记忆性&#xff0c;不依赖于过去的状态&#xff0c;今天学习了马尔可夫链&#xff0c;它会依赖于过去的过程&#xff0c;更准确的说是依赖于过去的某种状态。 2 离散时间的马尔可夫链&#xff08;Markov Chain, MC…

「协方差」与「相关系数」的概念

一、协方差&#xff1a; 可以通俗的理解为&#xff1a;两个变量在变化过程中是同方向变化&#xff1f;还是反方向变化&#xff1f;同向或反向程度如何&#xff1f; 你变大&#xff0c;同时我也变大&#xff0c;说明两个变量是同向变化的&#xff0c;这时协方差就是正的。 你…

垃圾收集 java_关于Java垃圾收集

垃圾收集 java本文讨论的是使用的最流行的框架之一带来的开销–我敢打赌&#xff0c;几乎没有应用程序不使用java.util.Collections。 本文基于以下事实&#xff1a;框架为例如集合的初始大小提供了默认值。 因此&#xff0c;我们有一个假设&#xff0c;即大多数人不会费心地自…

Latex \bibliographystyle+修改字体字号的大小

1. bibliography style LaTeX 标准选项及其样式共有以下8种&#xff1a; plain &#xff0c;按字母的顺序排列&#xff0c;比较次序为作者、年度和标题. unsrt &#xff0c;样式同plain&#xff0c;只是按照引用的先后排序. alpha &#xff0c;用作者名首字母年份后两位作标号…

boxplot

1. 简介 箱形图&#xff0c;又称为盒须图、盒式图、盒状图或箱线图&#xff0c;是一种用作显示一组数据分散情况资料的统计图。箱形图于1977年由美国著名统计学家约翰图基&#xff08;John Tukey&#xff09;发明。它能显示出一组数据的最大值、最小值、中位数、上下四分位数及…

Java 11的期望

过去的几年对Java世界一直是动荡不安的&#xff0c;在相当多的发行版中添加了各种各样的功能。 在开发人员社区中&#xff0c;人们逐渐意识到Java的开发速度不够快。 在最初的20年中&#xff0c;Java平台和Java开发工具包&#xff08;JDK&#xff09;经历了庞大&#xff0c;不…

martingale与Markov Process的关系

鞅过程与马尔科夫过程是什么关系&#xff1f; 1.鞅代表的是公平游戏&#xff0c;马尔可夫过程侧重过程无记忆性 总而言之&#xff1a;鞅和马尔可夫过程没有包含的关系。因为鞅代表的是公平游戏&#xff0c;而马尔可夫过程侧重过程无记忆性。两者没有内在联系。 注&#xff1…

LaTeX双栏模板插入通栏公式(跨栏插图)

1. 利用带星号的浮动体环境 带星号的浮动体figure和table环境可以在双栏模板中使用&#xff0c;例如我们以IEEEtran为例&#xff0c;插入通栏公式 \documentclass{IEEEtran} \usepackage{amsmath&#xff0c;lipsum} \begin{document} \lipsum[1] \begin{figure*} \begin{ali…

renew process 更新过程

一个泊松过程可以分解成一系列 i.i.di.i.di.i.d 的指数分布随机变量相加&#xff0c;如果把指数分布换成其他 i.i.di.i.di.i.d 的分布就得到了更新过程。 更新过程本身是泊松过程的一种扩长&#xff0c;同时更新过程也可以发展出一套更新理论&#xff0c;包括更新方程等。 htt…

离散时间信号,连续时间信号,模拟信号,数字信号区别

连续时间信号 &#xff1a; 在时间t 上是连续的值 时间连续&#xff0c; 幅值连续。 定义为模拟信号。时间连续&#xff0c; 幅值离散。 比如脉冲信号。 离散时间信号 &#xff1a; 在时间t上 是离散的值 时间离散&#xff0c; 幅值连续。 &#xff08;在任意两个离散时间点…