溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Ambassador 0.52 新特性:會(huì)話親和性、負(fù)載均衡控制、gRPC-Web

發(fā)布時(shí)間:2020-08-07 22:29:54 來源:ITPUB博客 閱讀:309 作者:EAWorld 欄目:互聯(lián)網(wǎng)科技

Ambassador 0.52 新特性:會(huì)話親和性、負(fù)載均衡控制、gRPC-Web

本文由公眾號(hào)EAWorld翻譯發(fā)表,轉(zhuǎn)載需注明出處。

作者:Richard Li 

譯者:白小白 

原文:http://t.cn/E6cZoyG

現(xiàn)時(shí)的云原生應(yīng)用由多種異構(gòu)的服務(wù)或者微服務(wù)組成,服務(wù)間、服務(wù)與客戶端之間的通信需要跨越浩繁的通信協(xié)議和拓?fù)浣Y(jié)構(gòu)。Ambassador就是部署在這樣不斷增長的異構(gòu)的工作負(fù)載環(huán)境之下,也因此我們對(duì)于這種境況有著直接的認(rèn)知。

我們著力于將Ambassador打造成全球最棒的云原生API網(wǎng)關(guān)。為此,我們很興奮可以發(fā)布Ambassador的0.52版本,并在新版中新增了如下的新能力:

  • 支持gRPC-Web協(xié)議。gRPC-Web基于原生的gRPC,其設(shè)計(jì)主旨服務(wù)于瀏覽器/服務(wù)器通信。在此要對(duì) Gert van Dijk 和 Rotem Tamir 的工作表示感謝。

  • 支持先進(jìn)的負(fù)載均衡控制。現(xiàn)在的Ambassador可以原生支持向物理IP地址的流量路由,而非DNS主機(jī)名稱。

  • 支持會(huì)話親和性(即粘滯會(huì)話)。Ambassador可以基于Cookie、HTTP頭或者來源IP地址,將來自同一個(gè)終端用戶的HTTP請(qǐng)求歸集到一個(gè)特定的Kubernetes Pod里。

由于實(shí)施了一些架構(gòu)遷移的工作,對(duì)會(huì)話親和性和先進(jìn)的負(fù)載均衡控制的支持還屬于搶先版本狀態(tài),稍后將會(huì)介紹。

一、gRPC-Web支持

今時(shí)今日的云服務(wù)通過大批的通信協(xié)議進(jìn)行暴露。Ambassador幾乎支持流行的7層協(xié)議的每一層,包括HTTP,HTTP/2,gRPC,WebSocket,以及最新支持的gRPC-Web。并且,即使開發(fā)者所使用的協(xié)議并不被直接支持,Ambassador也支持原生的TCP路由方式。

gRPC-Web協(xié)議面向前端開發(fā)者提供了很多的便利:高性能,雙向的流式通信以及廣泛的類庫支持。由于瀏覽器的限制 ,gRPC-Web并不與gRPC直接兼容。但可以設(shè)置服務(wù)端代理來解決在gRPC-Web請(qǐng)求和gRPC HTTP/2響應(yīng)之間的翻譯轉(zhuǎn)換問題。

感謝Envoy對(duì)于gRPC-Web的支持,Ambassador現(xiàn)在可以通過設(shè)置 enable_grpc_web: True注解來支持gRPC-Web。需要注意的是,這是一個(gè)全局設(shè)定。

二、先進(jìn)的負(fù)載均衡控制

Ambassador一直提供廣泛的路由選項(xiàng),可以基于主機(jī)、HTTP方法、HTTP頭,可以采用正則表達(dá)式等等。我們知道,對(duì)路由施加靈活的細(xì)粒度的控制 對(duì)適應(yīng)廣泛的使用場(chǎng)景至關(guān)重要。但目前Ambassador僅為運(yùn)維人員提供了有限的控制,來將請(qǐng)求路由到不同的endpoint。過去,Ambassador直接將請(qǐng)求路由到Kubernetes service,由后者將請(qǐng)求分發(fā)到不同的Pod。這種方案工作良好,便于推理和測(cè)試。對(duì)Kubernetes service的Curl請(qǐng)求遵循與Ambassador請(qǐng)求同樣的路由路徑。

Kubernetes網(wǎng)絡(luò)

在一個(gè)典型的Kubernetes集群中,由kube-proxy路由Kubernetes service請(qǐng)求。稍顯困擾的是,kube-proxy并不是典型形態(tài)的代理,只是基于iptables規(guī)則為service實(shí)現(xiàn)虛擬IP的一個(gè)進(jìn)程。這種架構(gòu)為路由帶來了額外的復(fù)雜性:不僅引入了少量的延遲,而且iptables并不是為路由設(shè)計(jì)的,因此負(fù)載均衡策略受限于輪詢的調(diào)度模型。

盡管存在實(shí)現(xiàn)的復(fù)雜性,這樣的方案仍舊為Ambassador使用者提供了壓倒性的優(yōu)勢(shì):簡(jiǎn)便性。服務(wù)發(fā)現(xiàn)和負(fù)載均衡都交給Kubernetes解決,可以很直接的使用類似Curl這樣的常規(guī)工具進(jìn)行路由的測(cè)試。

Ambassador 0.52的負(fù)載均衡

在Ambassador 0.52版本中,我們引入了一套新的負(fù)載均衡控制機(jī)制。相關(guān)的控制選項(xiàng)是可選的,所以如果不做任何設(shè)置的變動(dòng),將以原本行之有效的方式來實(shí)施負(fù)載均衡控制。如果設(shè)置了AMBASSADOR_ENABLE_ENDPOINTS環(huán)境變量,將會(huì)啟用新的控制機(jī)制:

  • Ambassador會(huì)監(jiān)視所有Kubernetes endpoint的狀態(tài)變更,而不僅僅關(guān)注Kubernetes service本身。

  • 有了這些狀態(tài)信息,Ambassador可以基于設(shè)置來使用不同的負(fù)載均衡算法,繞過Kube-proxy將請(qǐng)求直接路由到Kubernetes endpoint。

以下的示例映射表展現(xiàn)了我們?nèi)绾翁砑觢oad_balancer注解:

apiVersion: ambassador/v1
kind: Mappingname: qotm_mapping
prefix: /qotm/
service: qotm
load_balancer:
policy: round_robin

需要注意的是,可以在Ambassador模塊中添加注解,來使默認(rèn)的負(fù)載均衡策略全局有效。

會(huì)話親和性

除了默認(rèn)的round_robin策略,Ambassador 0.52還可以基于ringhash策略支持會(huì)話親和性(即“粘滯會(huì)話”)。在此過程中需要為路由指定客戶端的唯一標(biāo)識(shí)??梢灾С秩我獾腍TTP頭,Cookie或者實(shí)際的來源IP地址。

搶先版本

我們?cè)?.52中將先進(jìn)的負(fù)載均衡控制機(jī)制作為搶先版本發(fā)布,以進(jìn)行更廣泛的測(cè)試并收集反饋。我們尤其感興趣的是,在不同的工作負(fù)載和Kubernetes集群環(huán)境下,啟用這一特性有怎樣的效果。我們希望 endpoint數(shù)多于service數(shù),這樣就可以對(duì)Kubernetes的API服務(wù)器產(chǎn)生持續(xù)增長的工作負(fù)載。我們熱切的期待你的反饋,無論是積極的或者是負(fù)面的都可以,只要是關(guān)于這一特性的。

三、Ambassador 0.52版本的其他改變

在新版的Ambassador中,我們還提供了對(duì)大量的用戶反饋Bug的修復(fù),并提供了諸多的加強(qiáng)。

  • Ambassador現(xiàn)在支持HTTP/1.1請(qǐng)求和gRPC后端服務(wù)之間的橋接。

  • 在使用HTTP API的時(shí)候,為extauth過濾器添加了一個(gè)tracing header。(在使用gRPC API的時(shí)候,已經(jīng)添加了這樣的tracing header)

  • 允許extauth建立原本不存在的header(#1313)。

  • 可以使用Lua過濾器,在映射中嵌入簡(jiǎn)單的腳本。鳴謝Liam Costello的貢獻(xiàn)。

  • 啟動(dòng)性能改進(jìn)。

  • 使用C YAML解析器代替Python實(shí)現(xiàn)以改進(jìn)解析性能(#1294,#1318)

  • 加入xff_num_trusted_hops設(shè)置。如果用戶使用了如CloudFlare這樣的CDN服務(wù),并且依賴X-Forwarded-For header來應(yīng)對(duì)流量限速的使用場(chǎng)景,提供這樣的設(shè)置將十分重要。

更新的核心設(shè)置文檔覆蓋了上面提到的新的選項(xiàng)(如Lua,gRPC HTTP/1.1 橋接等)。

四、即將到來的0.60中的重大變更

Ambassador 0.60將默認(rèn)在8080端口偵聽明文HTTP請(qǐng)求(取代原來的80端口),在8443端口偵聽HTTPS請(qǐng)求(取代原來的443端口),以便在沒有Root權(quán)限的情況下簡(jiǎn)化Ambassador的運(yùn)行。如果你的現(xiàn)存服務(wù)依賴上述默認(rèn)端口,需要修改相關(guān)的配置文件,Ambassador 0.52會(huì)在診斷服務(wù)中提出警報(bào)。

五、安裝Ambassador 0.52

可以通過下面的Docker標(biāo)簽獲得Ambassador 0.52版本:

quay.io/datawire/ambassador:0.52.0。

通過標(biāo)簽更新現(xiàn)有的部署清單,kubectl會(huì)將0.52版本安裝到集群中。

也可以通過Helm安裝:


helm install stable/ambassador


、升級(jí)到Ambassador 0.52

Ambassador的更新依賴Kubernetes的部署。在更新Ambassador之前,需要將Kubernetes部署清單指向quay.io/datawire/ambassador:0.52.0然后基于更新后的清單運(yùn)行kubectl。Kubernetes會(huì)以滾動(dòng)更新的方式將Ambassador更新到0.52版本。

、后續(xù)

如果你在更新過程中遇到任何問題,可以發(fā)issue或者加入我們的Slack求助。

提交Issue的地址:https://github.com/datawire/ambassador/ 加入Slack的地址:http://d6e.co/slack

如果Ambassador工作良好,我們也很樂于得到這樣的消息。可以在文末或者在我們的推特賬號(hào)@getambassadorio留言。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI