envoy api 网关_为Envoy构建控制平面的指南-特定于域的配置API

envoy api 网关

建立您的控制平面交互点和API表面

一旦考虑了哪些组件可能构成控制平面体系结构(请参见上一章),您将要确切考虑用户将如何与控制平面进行交互,甚至更重要的是, 用户将是谁? 要回答这个问题,您必须决定基于Envoy的基础架构将扮演什么角色以及流量如何遍历您的体系结构。 可能是

  • API管理网关(北/南)
  • 简单的Kubernetes边缘负载均衡器/反向代理/入口控制(北/南)
  • 共享服务代理(东西方)
  • 每辆服务车(东/西)

例如,Istio项目旨在成为平台服务网格,平台操作员可以在其上构建工具来驱动控制。 用于配置Envoy的Istio的特定于域的配置对象围绕以下对象:

  • 网关 –定义一个共享代理组件(具有群集入口功能),该组件指定可用于负载平衡和路由流量的协议,TLS,端口和主机/授权
  • VirtualService –有关如何与特定服务进行交互的规则; 可以指定诸如路由匹配行为,超时,重试等内容
  • DestinationRule –关于如何与特定服务交互的规则,包括断路,负载平衡,mTLS策略,服务的子集定义等
  • ServiceEntry –将服务显式添加到Istio的服务注册表中

在Kubernetes中运行,所有这些配置对象都实现为CustomResourceDefinitions 。

Heptio / VMWare Contour旨在用作Kubernetes入口网关,并具有简化的特定于域的配置模型,同时具有CustomResourceDefinition(CRD)风格和Kubernetes入口资源

  • IngressRoute是Kubernetes CRD,它提供一个位置来指定Contour代理的配置
  • 入口资源支持 ,如果您喜欢这种事情,则可以使用它在Kubernetes入口资源上指定注释

在Gloo项目中,我们已决定将可用的配置对象分为两个级别:

  • 面向用户的配置可为用户使用案例提供最佳的人机工程学,并保留可扩展性的选项(下一节将对此进行详细介绍)
  • 提取Envoy的低层配置,但不明确打算直接用于用户操作。 较高级别的对象将转换为该较低级别的表示形式,最终将其转换为Envoy xDS API。 下一节将清楚说明其原因。

对于用户来说,Glo专注于拥有自己的路由配置的团队,因为路由的语义(以及可用的转换/聚合功能)在很大程度上受到API和微服务开发人员的影响。 对于面向用户的API对象,我们使用:

  • 网关 –指定特定侦听器端口上可用的路由和API端点,以及每个API附带的安全性
  • VirtualService –将API路由分组为一组“虚拟API”,这些路由可以路由到支持的功能(gRPC,http / 1,http / 2,lambda等); 使开发人员可以控制路由如何进行不同的转换 ,以尝试使前端API与后端中存在的功能脱钩(以及后端可能引入的任何重大更改)

Gloo中面向用户的API对象驱动较低级别的对象,这些对象随后用于最终派生Envoy xDS配置。 例如,Gloo的较低级别的核心API对象是:

  • 上游 –捕获有关后端群集的详细信息以及在其上公开的功能。 您可以将Gloo上游与Envoy集群松散地联系起来,这有很大的不同:上游可以理解特定端点上可用的实际服务功能(换句话说,了解/foo/bar/bar/wine包括它们的预期参数和参数结构,而不仅仅是hostname:port )。 一秒钟内会更多。
  • 代理 –代理是抽象我们可以应用于Envoy的所有配置的主要对象。 这包括侦听器,虚拟主机,路由和上游。 较高级别的对象(VirtualService,网关等)用于驱动此较低级别的代理对象。

Gloo控件的两个配置级别之间的划分使我们能够扩展Gloo控制面板功能,同时保留用于配置Envoy的简单抽象。 下一节将对此进行说明。

在前面的三个示例(Istio,Contour,Gloo)中,每个各自的控制平面都公开了一组特定于域的配置对象,这些对象以用户为中心,但最终转换为Envoy配置并通过xDS数据平面API公开。 这使Envoy与用户的预设工作方式及其工作流程脱钩。 尽管我们已经看到了一些示例,这些示例为抽象化Envoy创建了更多针对用户和工作流的特定于域的配置,但这并不是构建Envoy控制平面的唯一方法。 Booking.com上有一个很好的演讲 ,介绍他们如何与Envoy配置保持更紧密的距离,并使用引擎将所有不同团队的配置片段合并到实际的Envoy配置中。

除了考虑特定于域的配置外,您还应该考虑API /对象模型的特定接触点。 例如,Kubernetes非常注重YAML和资源文件。 您可以构建更特定于域的CLI工具(例如OpenShift使用oc CLI进行操作 ,例如Istio 使用istioctl进行处理,以及Gloo 使用glooctl进行处理

带走

当您构建Envoy控制面板时,您会考虑到特定的意图或一组体系结构/用户。 您应该考虑到这一点,并构建正确的,符合人体工学的,针对特定领域的API,以适合您的用户并改善操作Envoy的工作流程。 Gloo团队建议您探索现有的 Envoy控制平面实施方案,并且仅在没有其他合适的方案时才构建自己的方案。 正如我们将在下一节中看到的那样,可以构建一个完全可扩展的控制平面,以适应许多不同的用户,工作流和操作约束。

翻译自: https://www.javacodegeeks.com/2019/02/envoy-domain-specific-configuration-api.html

envoy api 网关

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

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

相关文章

异步非阻塞_细说同步异步、阻塞非阻塞

同步、异步同步、异步分别指的是一种通讯方式,当 cpu 不需要执行线程上下文切换就能完成任务,此时便认为这种通讯方式是同步的,相对的如果存在cpu 上下文切换,这种方式便是异步。这里通过一个去食堂打饭的示例来理解什么是同步、异…

如何将网页部署到maven_如何通过Rultor将Maven工件部署到CloudRepo

如何将网页部署到maven在我以前的文章中 ,我描述了如何在Amazon S3中设置私有Maven存储库并通过Rultor进行部署。 如果您熟悉管理Amazon Web Services(AWS), S3和AWS Identity and Access Management(IAM)的…

macOS下如何使用命令启动数据库/停止数据库/重启数据库(MySQL)

文章目录启动数据库手动启动数据库自启动数据库查看数据库服务是否启动重启数据库服务停止数据库服务注意使用 sudo 执行命令会报错,所以不要使用 sudo: sudo mysql.server start . ERROR! The server quit without updating PID file (/usr/local/var/…

table 多行 宽度不一致_layui table 中固定列的行高和table行高不一致

Pipe(点积叉积的应用POJ1039)Pipe Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 9723 Accepted: 2964 Description ...cocos2d-x之CCMotionStreak类——2013-08-25 16在游戏的实现过程中,有时会需要…

java rest框架_比较Java REST文档框架

java rest框架决定在记录REST API时选择哪种Java框架可能很麻烦。 在本博文中,我们将简要比较我们自己使用的REST Web服务的三个文档框架,以及它们如何与Spring框架(这是Foreach中最常用的Java框架)集成。 这些是RESTful API建模语…

数据库的事务学习

文章目录事务四大特征多事务并发存在的问题事务隔离级别查询数据库的隔离级别设置数据库隔离级别1.事务里面的语句出错时并不会主动回滚,需要用户主动执行回滚指令 2.事务开始后,如果没有主动执行回滚或者提交指令,事务始终在执行中 3.事务执…

注解动态赋值_Java注解是如何玩转的,面试官和我聊了半个小时

作者:wind瑞 来自:JavaQ面试官:自定义的Java注解是如何生效的? 小白:自定义注解后,需要定义这个注解的注解解析及处理器,在这个注解解析及处理器的内部,通过反射使用Class、Method、…

阿里云服务器如何创建快照备份数据

文章目录创建快照快照收费你申请了阿里云服务器,其实就是申请了一个云盘,这个云盘安装了操作系统,你可以远程访问这个系统并使用该系统。我们可以给云盘创建快照,从而达到备份服务器数据的目的。创建快照 快照收费 如果您计划不再…

shebang_Java 11:运行单文件程序和“ shebang”脚本

shebang在Java 11中,对java启动器进行了增强,可以直接运行单文件源代码程序,而不必先编译它们。 例如,考虑以下仅添加其参数的类: import java.util.*; public class Add {public static void main(String[] args) {…

iShot快捷键

快捷键说明Option A选择截图区域Option Z截图光标下的窗口Option X截图整个屏幕Option D延时截图Option W开始录屏/结束录屏

日期格式化为yyyymmdd_Excel小技巧——如何将多行日期快速转换为数字文本

Hello~大家好,本来计划这一期给大家介绍一下如何根据身份证号快速获得性别信息的小技巧,但是在上一节内容如何将数字快速转换成日期格式发布后,就有朋友私信问我,可不可以再介绍一下将日期快速转换成数字文本的方法呢?…

顽皮狗 多线程分享_谁去过顽皮,谁去过尼斯? 圣诞老人为您提供Java 11建议!...

顽皮狗 多线程分享有没有想过圣诞老人如何为世界各地的孩子们提供节日礼物? 有20亿个孩子,每个孩子都有自己的愿望清单,他会在24小时内完成。 这意味着平均每个孩子43微秒,他需要检查每个孩子是否顽皮或好。 您无需再怀疑了。 我…

2021新交规超速处罚规定

1.时速超过限定时速不到10%的,给予警告; 2.在限速为50公里以下的道路,时速超过限定时速10%以上不到20%的(必须低于时速55公里),处50元罚款;超过限定时速20%以上不到50%的,处100元罚…

处理接口超时_架构设计|异步请求如何同步处理?

本文创意来自一次业务需求,这次需要接入一个第三方外部服务。由于这个服务只提供异步 API,为了不影响现有系统同步处理的方式,接入该外部服务时,应用对外屏蔽这种差异,内部实现异步请求同步。全文摘要:异步…

使用Spring Boot和MongoDB构建一个React式应用程序

“我喜欢编写身份验证和授权代码。” 〜从来没有Java开发人员。 厌倦了一次又一次地建立相同的登录屏幕? 尝试使用Okta API进行托管身份验证,授权和多因素身份验证。 如果您要处理大量流数据,React式应用程序可让您更好地扩展。 它们是非阻塞…

jax-ws和jax-rs_JAX-RS和OpenAPI对Hypermedia API的支持:任重而道远

jax-ws和jax-rs或早或晚,大多数积极使用REST(ful) Web服务和API的开发人员偶然发现了这种真正的外星事物,即HATEOAS : 超文本作为应用程序状态的引擎 。 对HATEOAS是什么及其与REST的关系的好奇最终将导致发现Richards…

如何下载MySQL的JDBC驱动包

1.打开 MySQL 官网:https://www.mysql.com/ 2.点击 DOWNLOADS,把页面滚动到最下面,点击 MySQL Community (GPL) Downloads 3.点击 Connector/J 4.点击 General Availability(GA) Releases,在 Select Operating System 下拉列表选…

IntelliJ IDEA for Mac如何添加jar包/如何导入jar包/导包

文章目录如何将 jar 包添加到已存在的资源库中将 jar 包添加到项目级别的资源库中将 jar 包添加到全局级别的资源库中将 jar 包添加到模块级别的资源库中创建资源库创建模块级别的资源库创建项目级别的资源库创建全局级别的资源库给某个模块单独添加 jar 包模块的依赖标签页&am…

r2dbc_使用Spring Data R2DBC进行异步RDBMS访问

r2dbc不久之前,发布了JDBC驱动程序的React性变体。 称为R2DBC。 它允许将数据异步流传输到已预订的任何端点。 通过将R2DBC之类的React性驱动程序与Spring WebFlux结合使用,可以编写一个完整的应用程序,以异步方式处理数据的接收和发送。 在本…

python中布尔类型是特殊的_Python中的特殊方法以及应用详解

前言Python 中的特殊方法主要是为了被解释器调用的,因此应该尽量使用 len(my_object) 而不是 my_object.__len__() 这种写法。在执行 len(my_object) 时,Python 解释器会自行调用 my_object 中实现的 __len__ 方法。除非有大量的元编程存在,直…