这是探索为Envoy Proxy构建控制平面的系列文章的第2部分。

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

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

在本系列的上一篇文章中,我们探索了动态配置Envoy的过程,这是在云原生环境中运行Envoy的重要组成部分。 在本条目中,我们将研究支持控制平面可能需要的协作组件。

确定控制平面所需的组件

由于操作环境的范围千差万别,因此为Envoy实施控制平面所需的组件也可能如此。 例如,在一种极端情况下,如果您在构建时静态生成了Envoy文件并将其发送到Envoy,则可能需要以下组件:

  • 模板引擎
  • 数据存储/ VCS,用于进入模板的值
  • 可能/可能不与服务/应用程序一起存储的任何特定于服务的配置
  • 协调器将碎片拼凑在一起
  • 将这些交付给特使的方法
  • 一种触发配置文件的重新加载/热重启的方法

另一方面,如果您选择使用gRPC流xDS实现,则需要:

  • 核心xDS服务接口和实现
  • 用于将服务注册/注销服务到服务注册表的组件
  • 服务注册表
  • 描述Envoy配置的抽象对象模型(可选)
  • 数据存储区,用于保存配置

您最可能需要支持Envoy的其他辅助组件:

  • 证书/ CA商店
  • 统计收集引擎
  • 分布式跟踪后端/引擎
  • 外部认证
  • 限速服务

通常,您将需要考虑构建控制平面,以便组件独立运行并可以松散协作以提供控制平面的需求。 您要做的最后一件事是通过部署整体控制平面来支持Envoy进行微服务部署。 例如,在开源Gloo项目中,我们具有驱动控制平面的以下组件:


  • Gloo –一个事件驱动的组件,负责为核心xDS服务生成配置并为其提供服务以及自定义Envoy过滤器的配置
  • Discovery –一个可选组件,它知道如何与服务发现服务(领事,Kubernetes等)一起使用,以发现并发布上游集群和端点。 它还可以发现REST终结点(使用swagger),gRPC函数(基于gRPC反射)以及AWS / GCP / Azure云功能。 该组件创建配置(在Kubernetes上,用CustomResourceDefinitions表示), Gloo组件可用于构建通过xDS表示的规范Envoy配置。 我们将在本系列博客的后续部分中看到更多内容。
  • Gateway –该组件允许用户使用更舒适的对象模型根据其角色(例如,边缘网关,共享代理,本地群集入口等)配置Envoy代理。 控制平面的这一部分还生成配置, Gloo控制平面可用于通过xDS生成Envoy配置

如您所见,这些基本组件被部署为可协同工作的服务,以构建通过xDS服务的适当的Envoy配置。 Gloo通过使用这些松散协调的控制平面组件来实现Envoy配置,从而实现了其强大的发现功能,对功能的语义理解等。 当将Gloo部署到Kubernetes中时,存储和配置表示具有“ kube-native”的感觉:一切都由Custom Resource Definitions表示。 具体来说,所有面向用户的配置都是CRD以及驱动xDS端点的核心配置。 您可以只使用Kubernetes API和kubectl与Gloo进行交互。 但是,我们还提供了一个glooctl CLI工具来简化与Gloo控制平面的交互 -特别是这样,如果您不想这样做,就不必大惊小怪。 这样,Gloo非常专注于开发人员的经验,并且对开发人员(或任何人?)进行YAML攻击非常繁琐。

Istio还采用了类似的方法,即使用通过Kubernetes CRD配置的松散协调控制平面组件。 Istio的控制平面由以下组成:

  • Istio Pilot –核心xDS服务
  • Istio Galley –配置/存储抽象
  • Istio Citadel – CA /证书引擎
  • Istio Telemetry –遥测信号接收器
  • Istio Policy –可插拔策略引擎

Heptio Contour实际上只有两个组成其控制平面的组件,但是,由于它仅基于Kubernetes,因此它实际上利用了许多内置的Kubernetes设施,例如Kubernetes API /存储和CRD来驱动配置。

  • contour服务器
  • init-container引导程序

Contour使用init-container为Envoy生成一个静态引导程序配置文件,该文件指示在哪里可以找到xDS服务。 xDS服务器是控制平面中的第二个组件,默认情况下与数据平面一起部署,并带有单独部署的选项。 在本系列“部署控制面板组件”的第5部分中,我们将研究这种架构及其权衡。

带走

确定控制平面所需的核心组件。 不要尝试构建单一的整体式控制平面抽象,因为这将成为维护和更新的噩梦。 在松耦合架构中构建控制平面所需的组件。 如果您可以在Kubernetes之上构建,请这样做: Kubernetes为运行分布式系统(例如Envoy控制平面) 提供了非常强大的集成数据平面。 如果您确实在Kubernetes上构建了控制平面,则应该利用自定义资源定义来驱动控制平面的配置。 一些人选择使用Ingress定义 , 服务注释或配置图来构建其控制平面。 在Kubernetes CRD可用之前,这些可能是适当的解决方法,但此时您应该避免使用这些路径并坚持使用CRD。 就像Tim Hockin(Kubernetes的创始人)在最近的播客中说的那样 ,用于驱动Ingress Gateway资源的注释是一个糟糕的选择。

该系列的下一个条目实际上已经发布: 为Envoy构建控制平面的指南第3部分-特定于域的配置API

翻译自: https://www.javacodegeeks.com/2019/03/control-plane-envoy-identify-components-2.html

为特使建立控制平面的指南第2部分-识别组件相关推荐

  1. 为特使建立控制平面的指南-部署权衡

    部署控制平面组件 构建并设计了控制平面后,您将需要确切确定如何部署其组件. 在这里,您可以选择将控制平面与数据平面共置一处以集中控制平面. 这里还有一个中间立场:部署与控制平面位于同一位置的某些组件, ...

  2. 为特使建立控制平面的指南-识别组件

    确定控制平面所需的组件 由于操作环境的范围千差万别,因此为Envoy实施控制平面所需的组件也可能如此. 例如,在一种极端情况下,如果您在构建时静态生成了Envoy文件并将其发送到Envoy,则需要以下 ...

  3. 为特使构建控制平面的指南-为可插入性构建

    Envoy是一个非常强大的软件,每天都会向社区提出新的用例和新的贡献 . 尽管Envoy的核心非常稳定,但它基于可插入的过滤器体系结构,因此人们可以为不同的L7协议编写新的编解码器或添加新的功能. 目 ...

  4. latex如何使节标题居左_为使节构建控制平面的指南第3部分-特定于域的配置API...

    latex如何使节标题居左 这是探索为Envoy Proxy构建控制平面的系列文章的第3部分. 在本博客系列中,我们将研究以下领域: 采用一种机制来动态更新Envoy的路由,服务发现和其他配置 确定哪 ...

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

    envoy api 网关 建立您的控制平面交互点和API表面 一旦考虑了哪些组件可能构成控制平面体系结构(请参见上一章),您将要确切考虑用户将如何与控制平面进行交互,甚至更重要的是, 用户将是谁? 要 ...

  6. 为使节构建控制平面的指南第3部分-特定于域的配置API

    这是探索为Envoy Proxy构建控制平面的系列文章的第3部分. 在本博客系列中,我们将研究以下领域: 采用一种机制来动态更新Envoy的路由,服务发现和其他配置 确定哪些组件构成了控制平面,包括后 ...

  7. 为Envoy构建控制平面的指南-特定于域的配置API

    建立您的控制平面交互点和API表面 一旦仔细考虑了哪些组件可能构成控制平面体系结构(请参见上一章),您将要确切考虑用户将如何与控制平面进行交互,甚至更重要的是, 用户将是谁? 要回答这个问题,您必须决 ...

  8. Envoy Proxy构建控制平面指南

    作者:Christian Posta 译者:殷龙飞 审阅:孙海洲 原文:medium.com/solo-io/gui- [编者案] Envoy 作为最受欢迎的早期网络组件,现在已经可以说是云原生架构中 ...

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

    envoy api 网关 最近, Envoy已成为流行的网络组件. 马特·克莱因( Matt Klein )在几年前写了一个博客,内容涉及Envoy的动态配置API,以及它如何成为Envoy的采用曲线 ...

最新文章

  1. python编程基础(一):编程思想
  2. 查找_排序_思维导图
  3. torch.unsqueeze()和torch.unsqueeze()
  4. express中response.js 提供的sendFile方法的调试
  5. 基本线程同步(三)在同步的类里安排独立属性
  6. Tomcat无需输入项目名,直接用域名访问项目
  7. MySQL: InnoDB 还是 MyISAM?
  8. 初学者python笔记(面向对象编程、类与对象)
  9. 用Arduino远程控制车库门开关
  10. Autojs对接图灵机器人
  11. Linux系统的关机重启命令
  12. Debian回收站无法删除解决
  13. 凯撒密码加密算法python_信息安全与密码学的关系
  14. 谷歌 AI 团队用 GAN 模型合成异形生物体
  15. 小程序加载不出来图片
  16. html+css唯品会的登录页面
  17. angular实现双向绑定
  18. 【Vue3 | 实现精美待办】01.项目启航
  19. 高级shell编程笔记(第十三章 系统与管理命令)
  20. 【vue】vue安装卡住/报错

热门文章

  1. POJ2352-Stars【树状数组】
  2. Codeforces Round #657 (Div. 2)
  3. 【最小生成树】水箱(P5952)
  4. codeforces E. Game with String 概率
  5. select count(*)底层究竟干了啥么?
  6. 一次动态代理的填坑之旅
  7. 两步验证杀手锏:Java 接入 Google 身份验证器实战
  8. C++描述杭电OJ 2016.数据的交换输出 ||
  9. ps中对齐,历史记录,图层
  10. 数组中一种数出现奇数次和两种数出现奇数次