RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

既然有了Kubernetes,為什么還需要Istio?

馬哥Linux運(yùn)維 ? 來(lái)源:馬哥Linux運(yùn)維 ? 2023-12-11 17:28 ? 次閱讀

cb9fd798-9805-11ee-8b88-92fbcf53809c.jpg

如果您聽(tīng)說(shuō)過(guò)Service Mesh并嘗試過(guò)Istio,您可能會(huì)有以下問(wèn)題:

為什么 Istio 運(yùn)行在 Kubernetes 上?

Kubernetes 和服務(wù)網(wǎng)格在云原生應(yīng)用架構(gòu)中分別扮演什么角色?

Istio 在哪些方面對(duì)Kubernetes進(jìn)行了擴(kuò)展?它解決了什么問(wèn)題?

Kubernetes、Envoy 和 Istio 之間是什么關(guān)系?

本文將帶您了解 Kubernetes 和 Istio 的內(nèi)部工作原理。另外,我還會(huì)介紹 Kubernetes 中的負(fù)載均衡方法,并解釋為什么有了 Kubernetes 還需要 Istio。

Kubernetes 本質(zhì)上是通過(guò)聲明性配置進(jìn)行應(yīng)用程序生命周期管理,而服務(wù)網(wǎng)格本質(zhì)上是提供應(yīng)用程序間流量、安全管理和可觀察性。如果你已經(jīng)使用 Kubernetes 搭建了一個(gè)穩(wěn)定的應(yīng)用平臺(tái),那么如何為服務(wù)之間的調(diào)用設(shè)置負(fù)載均衡和流量控制呢?這就是服務(wù)網(wǎng)格發(fā)揮作用的地方。

Envoy 引入了xDS 協(xié)議,該協(xié)議受到各種開(kāi)源軟件的支持,例如Istio、MOSN等。Envoy 將 xDS 貢獻(xiàn)給服務(wù)網(wǎng)格或云原生基礎(chǔ)設(shè)施。Envoy 本質(zhì)上是一個(gè)現(xiàn)代版本的代理,可以通過(guò) API 進(jìn)行配置,并基于它衍生出許多不同的使用場(chǎng)景——例如 API 網(wǎng)關(guān)、服務(wù)網(wǎng)格中的 sidecar 代理和邊緣代理。

本文包含以下內(nèi)容:

kube-proxy 作用的描述。

Kubernetes 對(duì)于微服務(wù)管理的局限性。

介紹 Istio 服務(wù)網(wǎng)格的功能。

Kubernetes、Envoy 和 Istio 服務(wù)網(wǎng)格中一些概念的比較。

Kubernetes 與服務(wù)網(wǎng)格

下圖展示了 Kubernetes 和 Service Mesh(每個(gè) pod 一個(gè) sidecar 模型)中的服務(wù)訪問(wèn)關(guān)系。

cbae3630-9805-11ee-8b88-92fbcf53809c.jpg

流量轉(zhuǎn)發(fā)

Kubernetes 集群中的每個(gè)節(jié)點(diǎn)都會(huì)部署一個(gè) kube-proxy 組件,該組件與 Kubernetes API Server 通信,獲取集群中服務(wù)的信息,然后設(shè)置 iptables 規(guī)則,將服務(wù)請(qǐng)求直接發(fā)送到對(duì)應(yīng)的 Endpoint(屬于該集群的 pod)。同一組服務(wù))。

服務(wù)發(fā)現(xiàn)

cbb522c4-9805-11ee-8b88-92fbcf53809c.jpg

Istio 可以跟隨 Kubernetes 中的服務(wù)注冊(cè),還可以通過(guò)控制平面中的平臺(tái)適配器與其他服務(wù)發(fā)現(xiàn)系統(tǒng)對(duì)接;然后使用數(shù)據(jù)平面的透明代理生成數(shù)據(jù)平面配置(使用 CRD,存儲(chǔ)在 etcd 中)。數(shù)據(jù)平面的透明代理作為sidecar容器部署在每個(gè)應(yīng)用服務(wù)的pod中,所有這些代理都需要請(qǐng)求控制平面同步代理配置。代理是“透明的”,因?yàn)閼?yīng)用程序容器完全不知道代理的存在。該進(jìn)程中的 kube-proxy 組件也需要攔截流量,只不過(guò) kube-proxy 攔截進(jìn)出 Kubernetes 節(jié)點(diǎn)的流量,而 sidecar 代理攔截進(jìn)出 pod 的流量。

服務(wù)網(wǎng)格的缺點(diǎn)

由于 Kubernetes 每個(gè)節(jié)點(diǎn)上運(yùn)行有很多 pod,將原有的 kube-proxy 路由轉(zhuǎn)發(fā)功能放在每個(gè) pod 中會(huì)增加響應(yīng)延遲(由于 sidecar 攔截流量時(shí)的跳數(shù)更多)并消耗更多資源。為了以細(xì)粒度的方式管理流量,將添加一系列新的抽象。這會(huì)進(jìn)一步增加用戶的學(xué)習(xí)成本,但隨著技術(shù)的普及這種情況會(huì)慢慢得到緩解。

服務(wù)網(wǎng)格的優(yōu)點(diǎn)

kube-proxy 設(shè)置是全局的,無(wú)法對(duì)每個(gè)服務(wù)進(jìn)行精細(xì)控制,而服務(wù)網(wǎng)格通過(guò) sidecar 代理將流量控制從 Kubernetes 的服務(wù)層中取出,從而實(shí)現(xiàn)更大的彈性。

Kube-Proxy 的缺點(diǎn)

首先,如果轉(zhuǎn)發(fā)的 Pod 無(wú)法正常服務(wù),它不會(huì)自動(dòng)嘗試另一個(gè) Pod。每個(gè) pod 都有健康檢查機(jī)制,當(dāng) pod 出現(xiàn)健康問(wèn)題時(shí),kubelet 會(huì)重啟 pod,kube-proxy 會(huì)刪除相應(yīng)的轉(zhuǎn)發(fā)規(guī)則。此外,nodePort 類(lèi)型的服務(wù)無(wú)法添加 TLS 或更復(fù)雜的消息路由機(jī)制。

Kube-proxy 實(shí)現(xiàn)了 Kubernetes 服務(wù)的多個(gè) pod 實(shí)例之間的流量負(fù)載均衡,但是如何對(duì)這些服務(wù)之間的流量進(jìn)行細(xì)粒度控制——例如將流量按百分比劃分到不同的應(yīng)用程序版本(這些版本都是同一個(gè)應(yīng)用程序的一部分)服務(wù)但在不同的部署上),或者進(jìn)行灰度發(fā)布和藍(lán)綠發(fā)布?

Kubernetes 社區(qū)提供了一種使用 Deployment 進(jìn)行灰度發(fā)布方法,這本質(zhì)上是一種通過(guò)修改 pod 標(biāo)簽將不同 pod 分配給部署服務(wù)的方法。

Kubernetes Ingress 與 Istio 網(wǎng)關(guān)

如上所述,kube-proxy 只能在 Kubernetes 集群內(nèi)路由流量。Kubernetes 集群的 Pod 位于 CNI 創(chuàng)建的網(wǎng)絡(luò)中。入口(在 Kubernetes 中創(chuàng)建的資源對(duì)象)是為了集群外部的通信而創(chuàng)建的。它由位于 Kubernetes 邊緣節(jié)點(diǎn)上的入口控制器驅(qū)動(dòng),負(fù)責(zé)管理南北流量。Ingress 必須對(duì)接各種 Ingress Controller,例如nginx ingress 控制器。Ingress僅適用于HTTP流量,使用簡(jiǎn)單。它只能通過(guò)匹配有限數(shù)量的字段(例如服務(wù)、端口、HTTP 路徑等)來(lái)路由流量。這使得無(wú)法路由 MySQL、Redis 和各種 RPC 等 TCP 流量。這就是為什么你會(huì)看到人們?cè)谌肟谫Y源注釋中編寫(xiě) nginx 配置語(yǔ)言。直接路由南北流量的唯一方法是使用服務(wù)的 LoadBalancer 或 NodePort,前者需要云供應(yīng)商支持,后者需要額外的端口管理。

Istio Gateway 的功能與 Kubernetes Ingress 類(lèi)似,負(fù)責(zé)進(jìn)出集群的南北向流量。Istio Gateway 描述了一種負(fù)載均衡器,用于承載進(jìn)出網(wǎng)格邊緣的連接。該規(guī)范描述了一組開(kāi)放端口以及這些端口使用的協(xié)議、用于負(fù)載均衡的 SNI 配置等。Gateway 是一個(gè) CRD 擴(kuò)展,它也重用了 sidecar 代理的功能;詳細(xì)配置請(qǐng)參見(jiàn)Istio 網(wǎng)站。

Envoy

Envoy 是 Istio 中默認(rèn)的 sidecar 代理。Istio 基于 Enovy 的 xDS 協(xié)議擴(kuò)展了其控制平面。在談?wù)?Envoy 的 xDS 協(xié)議之前,我們需要先熟悉一下 Envoy 的基本術(shù)語(yǔ)。以下是 Envoy 中的基本術(shù)語(yǔ)及其數(shù)據(jù)結(jié)構(gòu)列表;請(qǐng)參閱Envoy 文檔了解更多詳細(xì)信息。

cbbfb478-9805-11ee-8b88-92fbcf53809c.jpg

基本術(shù)語(yǔ)

以下是您應(yīng)該了解的 Enovy 基本術(shù)語(yǔ)。

Downstream:下游主機(jī)連接 Envoy,發(fā)送請(qǐng)求,接收響應(yīng);即發(fā)送請(qǐng)求的主機(jī)。

Upstream:上游主機(jī)接收來(lái)自 Envoy 的連接和請(qǐng)求并返回響應(yīng);即接收請(qǐng)求的主機(jī)。

Listener:Listener 是一個(gè)命名的網(wǎng)絡(luò)地址(例如端口、UNIX 域套接字等);下游客戶端可以連接到這些偵聽(tīng)器。Envoy 向下游主機(jī)公開(kāi)一個(gè)或多個(gè)偵聽(tīng)器以進(jìn)行連接。

Cluster:集群是 Envoy 連接的一組邏輯上相同的上游主機(jī)。Envoy 通過(guò)服務(wù)發(fā)現(xiàn)來(lái)發(fā)現(xiàn)集群的成員?;蛘撸梢酝ㄟ^(guò)主動(dòng)健康檢查來(lái)確定集群成員的健康狀態(tài)。Envoy 通過(guò)負(fù)載均衡策略決定集群中的哪個(gè)成員來(lái)路由請(qǐng)求。

Envoy 中可以設(shè)置多個(gè)監(jiān)聽(tīng)器,每個(gè)監(jiān)聽(tīng)器可以設(shè)置一個(gè)過(guò)濾器鏈(過(guò)濾器鏈表),并且過(guò)濾器是可擴(kuò)展的,以便我們可以更輕松地操縱流量的行為——例如設(shè)置加密、私有 RPC 等。

xDS 協(xié)議由 Envoy 提出,是 Istio 中默認(rèn)的 sidecar 代理,但只要實(shí)現(xiàn)了 xDS 協(xié)議,理論上就可以在 Istio 中用作 sidecar 代理——比如螞蟻集團(tuán)開(kāi)源的MOSN。

cbd7f330-9805-11ee-8b88-92fbcf53809c.jpg

Istio 是一個(gè)功能非常豐富的服務(wù)網(wǎng)格,包括以下功能。

流量管理:這是Istio最基本的功能。

策略控制:?jiǎn)⒂迷L問(wèn)控制系統(tǒng)、遙測(cè)捕獲、配額管理、計(jì)費(fèi)等。

可觀察性:在 sidecar 代理中實(shí)現(xiàn)。

安全身份驗(yàn)證:Citadel 組件執(zhí)行密鑰和證書(shū)管理。

Istio 中的流量管理

Istio 中定義了以下 CRD 來(lái)幫助用戶進(jìn)行流量管理。

網(wǎng)關(guān):網(wǎng)關(guān)描述了運(yùn)行在網(wǎng)絡(luò)邊緣的負(fù)載均衡器,用于接收傳入或傳出的 HTTP/TCP 連接。

VirtualService:VirtualService 實(shí)際上將 Kubernetes 服務(wù)連接到 Istio 網(wǎng)關(guān)。它還可以執(zhí)行其他操作,例如定義一組在尋址主機(jī)時(shí)應(yīng)用的流量路由規(guī)則。

DestinationRule:DestinationRule 定義的策略決定流量經(jīng)過(guò)路由后的訪問(wèn)策略。簡(jiǎn)而言之,它定義了流量的路由方式。其中,這些策略可以定義為負(fù)載均衡配置、連接池大小和外部檢測(cè)(用于識(shí)別并驅(qū)逐負(fù)載均衡池中不健康的主機(jī))配置。

EnvoyFilter:EnvoyFilter 對(duì)象描述代理服務(wù)的過(guò)濾器,可以自定義 Istio Pilot 生成的代理配置。這種配置一般初級(jí)用戶很少使用。

ServiceEntry:默認(rèn)情況下,Istio 服務(wù)網(wǎng)格中的服務(wù)無(wú)法發(fā)現(xiàn)網(wǎng)格之外的服務(wù)。ServiceEntry 允許將其他條目添加到 Istio 內(nèi)的服務(wù)注冊(cè)表中,從而允許網(wǎng)格中自動(dòng)發(fā)現(xiàn)的服務(wù)訪問(wèn)并路由到這些手動(dòng)添加的服務(wù)。

Kubernetes、xDS、Istio

回顧了 Kubernetes 的 kube-proxy 組件、xDS 和 Istio 中流量管理的抽象之后,現(xiàn)在讓我們僅在流量管理方面對(duì)這三個(gè)組件/協(xié)議進(jìn)行比較(請(qǐng)注意,這三個(gè)組件并不完全相同)。

要點(diǎn)

Kubernetes 的本質(zhì)是應(yīng)用程序生命周期管理,特別是部署和管理(伸縮、自動(dòng)恢復(fù)、發(fā)布)。

Kubernetes 為微服務(wù)提供了可擴(kuò)展且高彈性的部署和管理平臺(tái)。

服務(wù)網(wǎng)格基于透明代理,通過(guò) sidecar 代理攔截服務(wù)之間的流量,然后通過(guò)控制平面配置管理它們的行為。

服務(wù)網(wǎng)格將流量管理與 Kubernetes 解耦,無(wú)需 kube-proxy 組件來(lái)支持服務(wù)網(wǎng)格內(nèi)的流量;通過(guò)提供更接近微服務(wù)應(yīng)用程序?qū)拥某橄髞?lái)管理服務(wù)間流量、安全性和可觀察性。

xDS 是服務(wù)網(wǎng)格配置的協(xié)議標(biāo)準(zhǔn)之一。

服務(wù)網(wǎng)格是 Kubernetes 中服務(wù)的更高級(jí)別抽象。

概括

如果說(shuō)Kubernetes 管理的對(duì)象是 Pod,那么 Service Mesh 管理的對(duì)象就是服務(wù),所以只要用 Kubernetes 來(lái)管理微服務(wù),然后應(yīng)用 Service Mesh 就可以了。如果您甚至不想管理服務(wù),那么可以使用像Knative這樣的無(wú)服務(wù)器平臺(tái)。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 網(wǎng)關(guān)
    +關(guān)注

    關(guān)注

    9

    文章

    4444

    瀏覽量

    51055
  • 網(wǎng)格
    +關(guān)注

    關(guān)注

    0

    文章

    139

    瀏覽量

    16014
  • kubernetes
    +關(guān)注

    關(guān)注

    0

    文章

    224

    瀏覽量

    8710

原文標(biāo)題:既然有了Kubernetes,為什么還需要 Istio?

文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    為什么HTTP,還需要RPC協(xié)議?

    為什么HTTP,還需要RPC協(xié)議呢?在進(jìn)行說(shuō)明之前,首先我們需要了解什么是HTTP協(xié)議,什么是RPC協(xié)議。什么是HTTP協(xié)議?HTTP是一種廣泛使用的網(wǎng)絡(luò)傳輸協(xié)議,它定義
    的頭像 發(fā)表于 08-14 10:05 ?978次閱讀
    為什么<b class='flag-5'>有</b><b class='flag-5'>了</b>HTTP,<b class='flag-5'>還需要</b>RPC協(xié)議?

    單片機(jī)還需要學(xué)匯編嗎

    單片機(jī)還需要學(xué)匯編嗎
    發(fā)表于 07-14 19:49

    為什么USB串口還需要TX,RX串口?

    ARDUNIO是干什么的?為什么USB串口還需要TX,RX串口?
    發(fā)表于 09-24 06:13

    如何在Arm上利用Istio搭建一個(gè)基于Kubernetes的Service Mesh平臺(tái)

    基于Kubernetes的Service Mesh平臺(tái)。流程環(huán)境要求準(zhǔn)備配置環(huán)境編譯生成鏡像搭建Kubernetes 環(huán)境配置安裝Istio環(huán)境要求a. 至少兩臺(tái)Arm64主機(jī)(歡迎使用Raspberry Pi)b.
    發(fā)表于 03-30 10:59

    搭建基于Arm的kubernetes+Istio開(kāi)發(fā)環(huán)境

    1、如何在Arm平臺(tái)上利用Istio搭建一個(gè)基于Kubernetes的Service Mesh平臺(tái)隨著云計(jì)算的普及,越來(lái)越多的公司、組織及個(gè)人開(kāi)發(fā)者開(kāi)始將業(yè)務(wù)轉(zhuǎn)移至云服務(wù)提供商(如Ali,GKE
    發(fā)表于 07-12 15:39

    阿里云Kubernetes Service Mesh實(shí)踐進(jìn)行時(shí)(1): Istio初體驗(yàn)

    用于連接/管理以及安全化微服務(wù)的開(kāi)放平臺(tái),提供一種簡(jiǎn)單的方式用于創(chuàng)建微服務(wù)網(wǎng)絡(luò),并提供負(fù)載均衡、服務(wù)間認(rèn)證以及監(jiān)控等能力,并且關(guān)鍵的一點(diǎn)是并不需要修改服務(wù)本身就可以實(shí)現(xiàn)上述功能。Istio主要提供以下
    發(fā)表于 07-24 17:14 ?261次閱讀

    AI的普及之路 還需要這些東西

    現(xiàn)階段AI的落地應(yīng)用成為AI比拼的新賽道,開(kāi)啟萬(wàn)里長(zhǎng)征的第一步。但細(xì)究落地的背后含義,其實(shí)就是一場(chǎng)將AI觸角延伸至B端及C端的過(guò)程,而這會(huì)走像PC一樣的普及之路嗎?如果真要讓AI普及,還需要哪些“神助攻”?
    發(fā)表于 11-23 15:19 ?1639次閱讀

    如何去做嵌入式_還需要具備這6點(diǎn)知識(shí)

    我們知道要入門(mén)嵌入式,進(jìn)行嵌入式的學(xué)習(xí),尤其是未來(lái)想要從事嵌入式硬件相關(guān)的工作,但是做嵌入式并不是只靠硬件還需要軟件,那么還需要具備一下這6點(diǎn)知識(shí)。
    的頭像 發(fā)表于 01-19 15:57 ?5780次閱讀

    以消費(fèi)者為中心的央行數(shù)字貨幣還需要多長(zhǎng)的時(shí)間

    以消費(fèi)者為中心的央行數(shù)字貨幣還需要多長(zhǎng)的時(shí)間
    發(fā)表于 02-06 20:31 ?5643次閱讀

    企業(yè)ERP已經(jīng)報(bào)表還需要BI做什么呢?

    在企業(yè)做信息化工作的朋友在談及商業(yè)智能BI時(shí),常常會(huì)存在以下困惑:“BI什么用?我用Excel也能做……”,“企業(yè)ERP已經(jīng)報(bào)表,還需要BI做什么呢?” 眾所周知,ERP體現(xiàn)
    的頭像 發(fā)表于 04-12 17:16 ?2066次閱讀
    企業(yè)ERP已經(jīng)<b class='flag-5'>有</b>報(bào)表<b class='flag-5'>了</b>,<b class='flag-5'>還需要</b>BI做什么呢?

    Kubernetes中如何實(shí)現(xiàn)灰度發(fā)布

    Kubernetes 作為基礎(chǔ)平臺(tái),提供強(qiáng)大的容器編排能力。但是在其上部署業(yè)務(wù)和服務(wù)治理上,仍然會(huì)面對(duì)一些復(fù)雜性和局限性。在服務(wù)治理上,已經(jīng)許多成熟的 ServiceMesh 框架用于擴(kuò)充其能力
    的頭像 發(fā)表于 09-22 11:33 ?3398次閱讀

    使用變壓器變壓的電源還需要濾波器嗎

    使用變壓器變壓的電源還需要濾波器嗎
    的頭像 發(fā)表于 08-31 14:03 ?1041次閱讀
    使用變壓器變壓的電源<b class='flag-5'>還需要</b>濾波器嗎

    既然ODR能控制管腳高低電平,為什么還需要BSRR寄存器呢?

    既然ODR能控制管腳高低電平,為什么還需要BSRR寄存器呢? 為什么需要BSRR寄存器 在單片機(jī)中,為了控制端口的輸出狀態(tài),我們需要使用特定的寄存器。其中,ODR寄存器負(fù)責(zé)直接控制端口
    的頭像 發(fā)表于 10-24 11:49 ?2611次閱讀

    MES、ERP,為什么還需要QMS?

    ? MES、ERP,質(zhì)量管理為什么還需要QMS? ?在制造業(yè),質(zhì)量管理始終是企業(yè)管理中永恒的主題。品質(zhì)管理要想做得更好,企業(yè)必須掌握足夠多、足夠有用的數(shù)據(jù)和信息,實(shí)現(xiàn)質(zhì)量管理信息化。很多中小企業(yè)
    的頭像 發(fā)表于 08-02 10:09 ?281次閱讀
    <b class='flag-5'>有</b><b class='flag-5'>了</b>MES、ERP,為什么<b class='flag-5'>還需要</b>QMS?

    暢玩《黑神話:悟空》,除了“官配”硬件還需要注意這些......

    暢玩《黑神話:悟空》,除了“官配”硬件還需要注意這些......
    的頭像 發(fā)表于 08-30 14:58 ?426次閱讀
    暢玩《黑神話:悟空》,除了“官配”硬件<b class='flag-5'>還需要</b>注意這些......
    RM新时代网站-首页