envoy api 网关_在边缘,作为网关或在网格中构建控制平面以管理Envoy代理的指南...
envoy api 網(wǎng)關(guān)
最近, Envoy已成為流行的網(wǎng)絡(luò)組件。 馬特·克萊因( Matt Klein )在幾年前寫了一個(gè)博客,內(nèi)容涉及Envoy的動(dòng)態(tài)配置API,以及它如何成為Envoy的采用曲線向右移的部分原因。 他稱該博客為“通用數(shù)據(jù)平面API”。 由于有許多其他項(xiàng)目采用Envoy作為其產(chǎn)品的核心組件,因此可以說“ Envoy已成為應(yīng)用程序/ L7網(wǎng)絡(luò)解決方案的云原生體系結(jié)構(gòu)中的通用數(shù)據(jù)平面”,而不僅僅是建立標(biāo)準(zhǔn)化的API 。
此外,由于Envoy的通用數(shù)據(jù)平面API ,我們已經(jīng)看到了許多管理層的實(shí)現(xiàn),用于配置和驅(qū)動(dòng)基于Envoy的基礎(chǔ)架構(gòu)。 我們將深入研究為Envoy構(gòu)建控制平面所需的內(nèi)容,以便您可以使用此信息來評估哪種類型的基礎(chǔ)架構(gòu)最適合您的組織和用例。 因?yàn)檫@是一個(gè)廣泛的主題,所以我們將在接下來的幾天中分多個(gè)部分討論這個(gè)問題。 跟隨( @christianposta , @soloio_inc )進(jìn)入下一個(gè)條目。
在EnvoyCon / KubeCon上進(jìn)行了一些精彩的演講 ,一些組織分享了采用Envoy的經(jīng)驗(yàn),包括他們?nèi)绾螛?gòu)建自己的控制飛機(jī)。 人們選擇構(gòu)建自己的控制平面的一些原因:
- 是否具有基于具有預(yù)先存在的控制平面的不同數(shù)據(jù)平面的現(xiàn)有解決方案,并且需要對Envoy進(jìn)行改造
- 為不具有任何現(xiàn)有開源或其他Envoy控制平面(即VM,AWS ECS等)的基礎(chǔ)架構(gòu)進(jìn)行構(gòu)建
- 不需要使用Envoy的所有功能; 只是一個(gè)子集
- 首選針對Envoy配置的特定于域的API /對象模型,以使其更適合其工作流程/ worldview
- 其他控制飛機(jī)在各自組織準(zhǔn)備部署時(shí)還沒有處于成熟狀態(tài)
但是,僅僅因?yàn)槟承┰缙诓捎谜邩?gòu)建了自己的定制控制平面并不意味著您現(xiàn)在應(yīng)該做同樣的事情。 首先,為Envoy構(gòu)建控制平面的項(xiàng)目在去年已經(jīng)相當(dāng)成熟,在決定重新創(chuàng)建另一個(gè)控制平面之前,您應(yīng)該探索使用這些平面的方法。 其次,正如Datawire的人們發(fā)現(xiàn)的那樣, Daniel Bryant最近也明確指出, 為Envoy建造一架控制飛機(jī)并不是出于膽小 。
我參與 了幾個(gè)為Envoy構(gòu)建控制平面的開源項(xiàng)目 。 例如, Gloo是一個(gè)功能網(wǎng)關(guān) ,可以充當(dāng)功能非常強(qiáng)大的Kubernetes入口,API網(wǎng)關(guān)或功能網(wǎng)關(guān),以簡化從整體到微服務(wù)的過渡。 Gloo 有一個(gè)Envoy的控制面板,我們可以在本系列文章中引用它作為如何構(gòu)建一個(gè)簡單的抽象的示例,該抽象允許在您需要的控制點(diǎn)上實(shí)現(xiàn)可插拔性和可擴(kuò)展性。 您可以參考的其他固態(tài)控制面板實(shí)現(xiàn)是Istio和Heptio Contour ,我們將在整個(gè)博客系列中將其用作示例。 如果沒有其他問題,您可以了解Envoy控制面板有哪些選項(xiàng),并在必須沿途使用時(shí)使用它來指導(dǎo)實(shí)現(xiàn)。
在本博客系列中,我們將研究以下領(lǐng)域:
- 采用一種機(jī)制來動(dòng)態(tài)更新Envoy的路由,服務(wù)發(fā)現(xiàn)和其他配置
- 確定哪些組件構(gòu)成了控制平面,包括后備存儲(chǔ),服務(wù)發(fā)現(xiàn)API,安全組件等。 等
- 建立最適合您的用例和組織的任何特定于域的配置對象和API
- 考慮如何最好地使控制平面可在需要的地方插入
- 部署各種控制面板組件的選項(xiàng)
- 通過測試平面來考慮您的控制飛機(jī)
首先,讓我們來看一下使用Envoy的動(dòng)態(tài)配置API在運(yùn)行時(shí)更新Envoy來處理拓?fù)浜筒渴鹬械母摹?
使用xDS API動(dòng)態(tài)配置Envoy
在Envoy之上進(jìn)行構(gòu)建的主要優(yōu)勢之一是其數(shù)據(jù)平面API。 借助數(shù)據(jù)平面API,我們可以動(dòng)態(tài)配置Envoy的大多數(shù)重要運(yùn)行時(shí)設(shè)置 。 Envoy通過其xDS API進(jìn)行的配置最終在設(shè)計(jì)上是一致的 -也就是說,無法影響集群中所有代理的“原子更新”。 當(dāng)控制平面具有配置更新時(shí),它將通過xDS API使它們可用于數(shù)據(jù)平面代理,并且每個(gè)代理將彼此獨(dú)立地應(yīng)用這些更新。
以下是我們可以通過xDS動(dòng)態(tài)配置的Envoy運(yùn)行時(shí)模型的各個(gè)部分:
- 偵聽器發(fā)現(xiàn)服務(wù)API – LDS發(fā)布用于偵聽流量的端口
- 端點(diǎn)發(fā)現(xiàn)服務(wù)API-用于服務(wù)發(fā)現(xiàn)的EDS ,
- 路由發(fā)現(xiàn)服務(wù)API- RDS用于流量路由決策
- 群集發(fā)現(xiàn)服務(wù)-CDS,用于我們可以將流量路由到的后端服務(wù)
- 秘密發(fā)現(xiàn)服務(wù)–用于分發(fā)秘密(證書和密鑰)的SDS
該API是使用proto3協(xié)議緩沖區(qū)定義的,甚至還有一些參考實(shí)現(xiàn),您可以用來引導(dǎo)自己的控制平面:
- 去控制平面
- Java控制平面
盡管每個(gè)區(qū)域(LDS / EDS / RDS / CDS / SDS,統(tǒng)稱為“ xDS”)都是可動(dòng)態(tài)配置的,但這并不意味著您必須動(dòng)態(tài)配置所有內(nèi)容。 您可以將靜態(tài)定義的部分與動(dòng)態(tài)更新的部分組合在一起。 例如,要實(shí)現(xiàn)一種服務(wù)發(fā)現(xiàn)類型,其中endpoints應(yīng)該是動(dòng)態(tài)的,但是clusters在部署時(shí)是眾所周知的,則可以靜態(tài)定義clusters并使用Envoy的Endpoint Discovery Service 。 如果不確定在部署時(shí)將使用哪些上游群集,則可以使用“ 群集發(fā)現(xiàn)服務(wù)”動(dòng)態(tài)查找這些群集 。 關(guān)鍵是,您可以構(gòu)建一個(gè)工作流和流程,以靜態(tài)配置所需的零件,同時(shí)使用動(dòng)態(tài)xDS服務(wù)在運(yùn)行時(shí)發(fā)現(xiàn)所需的零件。 之所以看到不同的控制面板實(shí)現(xiàn),原因之一不是每個(gè)人都擁有一個(gè)完全動(dòng)態(tài)且可替代的環(huán)境,其中所有部分都應(yīng)該是動(dòng)態(tài)的。 在存在現(xiàn)有限制和可用工作流程的情況下,采用最適合您的系統(tǒng)的動(dòng)態(tài)級別。
對于Gloo,我們使用基于go-control-plane的控制平面來實(shí)現(xiàn)xDS API,以服務(wù)于Envoy的動(dòng)態(tài)配置。 Istio以及Heptio Contour也使用此實(shí)現(xiàn)。 該控制平面API利用gRPC流調(diào)用并將該API存根,因此您可以使用實(shí)現(xiàn)來填充它。 Turbine Labs的Rotor項(xiàng)目 ,是另一個(gè)不幸地不推薦使用但可以學(xué)到很多東西的項(xiàng)目 。 這是將Envoy的數(shù)據(jù)平面API與控制平面集成的一種高效方法。
gRPC流不是更新Envoy配置的唯一方法。 在早期版本的Envoy xDS API中 ,輪詢是確定新配置是否可用的唯一選項(xiàng)。 盡管這是可以接受的,并且滿足“最終一致”的配置更新標(biāo)準(zhǔn),但是在網(wǎng)絡(luò)和計(jì)算使用方面效率較低。 適當(dāng)調(diào)整輪詢配置以減少浪費(fèi)的資源也可能很困難。
最后,某些Envoy管理實(shí)現(xiàn)選擇生成靜態(tài)Envoy配置文件并定期為Envoy替換磁盤上的配置文件,然后對Envoy進(jìn)程進(jìn)行熱重載 。 在高度動(dòng)態(tài)的環(huán)境(例如Kubernetes,但實(shí)際上是任何基于臨時(shí)計(jì)算的平臺(tái))中,此文件生成,傳遞,熱重啟等的管理可能會(huì)變得笨拙。 Envoy最初是在執(zhí)行這樣的更新的環(huán)境中創(chuàng)建的(Lyft,創(chuàng)建它的地方),但是它們正逐步使用xDS API。
帶走
Gloo小組認(rèn)為,使用gRPC流和xDS API是為Envoy實(shí)施動(dòng)態(tài)配置和控制的理想方法。 同樣,如果不需要,并非所有Envoy配置都應(yīng)動(dòng)態(tài)提供,但是,如果您在高度動(dòng)態(tài)的環(huán)境(例如Kubernetes)中運(yùn)行,則動(dòng)態(tài)配置Envoy的選項(xiàng)至關(guān)重要。 其他環(huán)境可能沒有此需求。 無論哪種方式,用于動(dòng)態(tài)部件的g??RPC流API都是理想的。 這種方法的一些好處:
- 事件驅(qū)動(dòng)的配置更新; 當(dāng)配置在控制平面中可用時(shí),將配置推送給Envoy
- 無需輪詢更改
- 無需熱裝特使
- 沒有交通中斷
下一步是什么
在第一部分中,我們通過介紹xDS API和為Envoy提供動(dòng)態(tài)配置所需的其他選項(xiàng),建立了有關(guān)如何為Envoy構(gòu)建控制平面的一些基本上下文。 在接下來的幾天(將在幾天內(nèi)發(fā)布)中,將介紹如何將控制平面分解為可部署的組件,確定所需的組件,特定于域的配置對象模型的外觀以及如何考慮控件的可插入性。飛機(jī)。 在Twitter( @christianposta , @soloio_inc )或博客( https://blog.christianposta.com https://medium.com/solo-io )上關(guān)注
翻譯自: https://www.javacodegeeks.com/2019/02/control-plane-manage-envoy-proxy-edge.html
envoy api 網(wǎng)關(guān)
總結(jié)
以上是生活随笔為你收集整理的envoy api 网关_在边缘,作为网关或在网格中构建控制平面以管理Envoy代理的指南...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 动易怎么调用所有子栏目()
- 下一篇: apigee 安装_APIGEE – A