什么是服務(wù)網(wǎng)格,為什么 Kubernetes 需要它?

企業(yè)現(xiàn)在熱衷于采用微服務(wù)架構(gòu),因為它具有敏捷性和靈活性。容器和作為首選的容器編排工具—Kubernetes的興起使得從單體架構(gòu)向微服務(wù)架構(gòu)的轉(zhuǎn)變變得更加容易。然而,在大規(guī)模使用微服務(wù)架構(gòu)時出現(xiàn)了一系列新的挑戰(zhàn):

  • DevOps和架構(gòu)師很難管理服務(wù)之間的流量
  • 由于微服務(wù)部署在多個集群和云中,數(shù)據(jù)走出了(防火墻)邊界,變得容易受到攻擊;
  • 安全性成為一個重大問題 對網(wǎng)絡(luò)拓撲的整體可見性對于SRE來說成為一場噩夢
  • 實施新的安全工具,或者調(diào)整現(xiàn)有的API網(wǎng)關(guān)或Ingress控制器,只是一種臨時解決方案,無法完全解決上述問題。

架構(gòu)師需要的是一種徹底的基礎(chǔ)設(shè)施實現(xiàn),以應(yīng)對不斷增長的網(wǎng)絡(luò)、安全和可觀察性挑戰(zhàn)。而這就是服務(wù)網(wǎng)格的概念所涉及的地方。

什么是服務(wù)網(wǎng)格?

服務(wù)網(wǎng)格(Service Mesh)是一種將服務(wù)之間的通信從應(yīng)用層解耦到基礎(chǔ)設(shè)施層的技術(shù)。在服務(wù)網(wǎng)格中,通過代理服務(wù)之間的流量來實現(xiàn)基礎(chǔ)設(shè)施層的抽象。

image.png

代理作為一個Sidecar容器與應(yīng)用程序一起部署。流入和流出服務(wù)的流量被代理攔截,并提供高級流量管理和安全功能。此外,服務(wù)網(wǎng)格還提供對整個網(wǎng)絡(luò)拓撲的可觀察性。在服務(wù)網(wǎng)格架構(gòu)中,代理的集合被稱為數(shù)據(jù)平面(data plane),負責(zé)配置和管理數(shù)據(jù)平面代理的控制器被稱為控制平面(control plane)。Kubernetes為什么需要服務(wù)網(wǎng)格?—在開始階段,大多數(shù)DevOps只需要處理少量的服務(wù)。隨著應(yīng)用程序規(guī)模的擴大和服務(wù)數(shù)量的增加,網(wǎng)絡(luò)和安全管理變得復(fù)雜起來。繁瑣的安全合規(guī)性—從不同云供應(yīng)商的多個集群中部署的應(yīng)用程序通過網(wǎng)絡(luò)相互通信。對于這種流量來說,遵守某些標(biāo)準(zhǔn)以防止入侵者進入并確保安全通信至關(guān)重要。問題在于安全策略通常是針對單個集群的,并不能跨集群邊界工作。這就需要一種能夠在多個集群中強制執(zhí)行一致安全策略的解決方案。混亂的網(wǎng)絡(luò)管理—DevOps工程師通常需要控制服務(wù)之間的流量,例如進行金絲雀部署。他們還希望通過注入故障和實施斷路器來測試系統(tǒng)的彈性和可靠性。要實現(xiàn)對網(wǎng)絡(luò)的這種細粒度控制,DevOps工程師需要在Kubernetes和云環(huán)境中創(chuàng)建大量的配置和腳本。缺乏對網(wǎng)絡(luò)的可視化—隨著應(yīng)用程序分布在網(wǎng)絡(luò)上并進行相互通信,SRE(Site Reliability Engineer)很難跟蹤網(wǎng)絡(luò)基礎(chǔ)設(shè)施的健康狀況和性能。這嚴(yán)重影響了他們識別和解決網(wǎng)絡(luò)問題的能力。通過實施服務(wù)網(wǎng)格,可以解決上述問題,提供一些功能,使得管理部署到Kubernetes的應(yīng)用程序變得輕松無痛。

Service Mesh在Kubernetes中的關(guān)鍵特性

Service Mesh充當(dāng)了一個集中化的平臺,用于在Kubernetes中部署的微服務(wù)的網(wǎng)絡(luò)、安全和可觀察性。集中化的安全性 通過使用服務(wù)網(wǎng)格,可以更容易地實現(xiàn)安全合規(guī)性,因為可以從一個中心平面進行配置,而不是針對每個服務(wù)進行配置。服務(wù)網(wǎng)格平臺可以強制執(zhí)行跨集群邊界工作的一致性安全策略。 服務(wù)網(wǎng)格提供了細粒度的身份驗證、授權(quán)和訪問控制。

  • 身份驗證:mTLS實現(xiàn)、JWT
  • 授權(quán):可以設(shè)置策略來允許、拒絕或?qū)魅胝埱髨?zhí)行自定義操作
  • 訪問控制:可以在方法、服務(wù)和命名空間級別設(shè)置RBAC策略
  • 高級網(wǎng)絡(luò)和彈性測試
  • 服務(wù)網(wǎng)格提供了對服務(wù)之間流量流向的細粒度控制。

DevOps工程師可以將流量分割到不同的服務(wù)之間,或者根據(jù)一定的權(quán)重進行路由。此外,服務(wù)網(wǎng)格還提供以下功能,以便通過少量工作來測試基礎(chǔ)設(shè)施的彈性:

  • 故障注入
  • 超時設(shè)置
  • 重試
  • 斷路器
  • 鏡像
  • 統(tǒng)一的可觀察性

實施服務(wù)網(wǎng)格有助于SRE和運維團隊集中監(jiān)控應(yīng)用程序在網(wǎng)格中的健康狀況和性能。服務(wù)網(wǎng)格提供以下用于可觀察性和實時可見性的遙測數(shù)據(jù):

  • 指標(biāo):用于監(jiān)控性能,查看延遲、流量、錯誤和飽和度等。
  • 分布式跟蹤:用于理解請求的生命周期,分析服務(wù)依賴關(guān)系和流量流向。
  • 訪問日志:用于審計服務(wù)行為。

為Kubernetes考慮的頂級服務(wù)網(wǎng)格軟件

在市場上可以找到各種服務(wù)網(wǎng)格軟件,如Istio、Linkerd、HashiCorp Consul、Kong KUMA、Google Anthos(基于Istio構(gòu)建)、VMware Tanzu等。然而,超過90%的用戶使用Istio或Linkerd服務(wù)網(wǎng)格軟件,這是因為它們擁有強大而活躍的開源生態(tài)系統(tǒng),提供創(chuàng)新和支持。

Istio

Istio是最受歡迎的、經(jīng)過CNCF認證的開源服務(wù)網(wǎng)格軟件。它使用Envoy代理作為sidecar,而控制平面用于管理和配置這些代理。

image.png

Istio為大規(guī)模應(yīng)用程序提供了網(wǎng)絡(luò)、安全和可觀察性功能。來自Google、Microsoft、IBM等公司的開發(fā)人員積極參與了Istio項目的貢獻。

Linkerd

Linkerd是由Buoyant開發(fā)的輕量級開源服務(wù)網(wǎng)格軟件。它提供了服務(wù)網(wǎng)格的基本功能,并具有目標(biāo)服務(wù)、身份服務(wù)和代理注入器。

image.png

超過80%的Linkerd貢獻來自其創(chuàng)始人Buoyant自身。

服務(wù)網(wǎng)格在Kubernetes中的好處

以下是企業(yè)在Kubernetes中實施服務(wù)網(wǎng)格可以獲得的一些好處:

  • 100%網(wǎng)絡(luò)和數(shù)據(jù)安全

服務(wù)網(wǎng)格有助于維護一個零信任網(wǎng)絡(luò),在處理請求之前不斷進行身份驗證和授權(quán)。DevOps工程師可以實施諸如mTLS之類的功能,它可以在整個集群范圍內(nèi)和跨集群邊界工作。

image.png

在當(dāng)前充滿中間人攻擊(MITM)和拒絕服務(wù)(DoS)等攻擊的動態(tài)威脅環(huán)境中,零信任網(wǎng)絡(luò)有助于維護安全的基礎(chǔ)設(shè)施。

  • 變更失敗率降低80%

如今,企業(yè)在完全推出之前會將應(yīng)用程序發(fā)布給一小部分實際用戶。這有助于DevOps和SRE分析應(yīng)用程序性能,識別任何錯誤,并避免潛在的停機時間。金絲雀部署和藍/綠部署是兩種常見的部署策略。服務(wù)網(wǎng)格提供的細粒度流量控制,包括基于權(quán)重進行流量分割,使得DevOps工程師更容易執(zhí)行這些部署策略。

image.png
  • 99.99%可用和彈性的基礎(chǔ)設(shè)施

服務(wù)網(wǎng)格軟件提供的遙測數(shù)據(jù)幫助SRE和運維團隊快速識別和應(yīng)對錯誤和威脅。大多數(shù)服務(wù)網(wǎng)格軟件與Prometheus、Grafana、Kiali、Jaeger等監(jiān)控工具集成,它們提供的儀表板幫助運營人員可視化服務(wù)的健康狀況、性能和行為。


image.png
  • 開發(fā)者體驗提升5倍

大多數(shù)應(yīng)用程序開發(fā)者不喜歡在他們的應(yīng)用程序中配置網(wǎng)絡(luò)和安全邏輯。他們的關(guān)注點往往是業(yè)務(wù)邏輯和功能的構(gòu)建。實施服務(wù)網(wǎng)格可以減少開發(fā)者的工作量,因為他們只需關(guān)注應(yīng)用程序代碼。他們可以將網(wǎng)絡(luò)和安全配置完全交給基礎(chǔ)設(shè)施級別的服務(wù)網(wǎng)格來處理。這種分離有助于開發(fā)者專注于他們的核心職責(zé),即提供業(yè)務(wù)邏輯。

成功實施服務(wù)網(wǎng)格的三個支柱

由于服務(wù)網(wǎng)格是一個激進的概念,對企業(yè)來說,成功實施并實現(xiàn)其價值可能會讓人感到不知所措。如果你是架構(gòu)師或首席信息官(CIO),可以考慮以下三個支柱來成功實施服務(wù)網(wǎng)格。

image.png

技術(shù)支持

從技術(shù)支持的角度評估服務(wù)網(wǎng)格軟件非常重要。如果是一個成熟的DevOps組織,在CI/CD過程中使用各種開源和開放標(biāo)準(zhǔn),請確保服務(wù)網(wǎng)格軟件能夠與CI/CD工具(無論版本如何)良好集成。例如,如果正在使用Argo CD進行GitOps部署,或者使用Prometheus進行監(jiān)控,那么服務(wù)網(wǎng)格軟件必須能夠在較少的干預(yù)下與這些工具集成。

企業(yè)支持

開源軟件的采用率正在上升。但是,對軟件的支持對于企業(yè)來說是確保其IT系統(tǒng)可用于業(yè)務(wù)的首要需求。評估一個由龐大社區(qū)支持的服務(wù)網(wǎng)格軟件(對于支持非常有幫助),并且還有第三方供應(yīng)商生態(tài)系統(tǒng)可以提供24*7的支持,并具有固定的服務(wù)級別協(xié)議(SLA)。

培訓(xùn)和入職支持

確保有足夠的閱讀材料、文檔和視頻可供使用,這將有助于服務(wù)網(wǎng)格軟件的用戶學(xué)習(xí),因為如果內(nèi)部員工(如DevOps和SRE)無法采用該軟件,那就沒有意義了。最后,服務(wù)網(wǎng)格不僅僅是軟件,而是一種應(yīng)用操作模式。不要急于開始項目。相反,研究和評估最適合組織需求和需求的最佳服務(wù)網(wǎng)格。

服務(wù)網(wǎng)格是Kubernetes工作負載的未來發(fā)展方向

服務(wù)網(wǎng)格實施的目標(biāo)是使在Kubernetes中部署的應(yīng)用程序更易管理。隨著服務(wù)從單個集群溢出到多個集群,采用服務(wù)網(wǎng)格將成為必要。隨著Kubernetes的普及,服務(wù)網(wǎng)格最終將成為大多數(shù)組織中的關(guān)鍵組件。

作者:Anas T

更多技術(shù)干貨盡在wx“云原生數(shù)據(jù)庫”

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容