天天看點

[轉載] 什麼是istio 官網内容

網址:https://preliminary.istio.io/zh/docs/concepts/what-is-istio/

mark 一下 1.0 昨天剛釋出. 2018.7.31

Istio 是什麼?

使用雲平台可以為組織提供豐富的好處。然而,不可否認的是,采用雲可能會給 DevOps 團隊帶來壓力。開發人員必須使用微服務已滿足應用的可移植性,同時營運商管理了極其龐大的混合和多雲部署。Istio 允許您連接配接、保護、控制和觀測服務。

在較高的層次上,Istio 有助于降低這些部署的複雜性,并減輕開發團隊的壓力。它是一個完全開源的服務網格,可以透明地分層到現有的分布式應用程式上。它也是一個平台,包括允許它內建到任何日志記錄平台、遙測或政策系統的 API。Istio 的多樣化功能集使您能夠成功高效地運作分布式微服務架構,并提供保護、連接配接和監控微服務的統一方法。

什麼是服務網格?

在從單體應用程式向分布式微服務架構的轉型過程中,開發人員和運維人員面臨諸多挑戰,使用 Istio 可以解決這些問題。

服務網格(Service Mesh)這個術語通常用于描述構成這些應用程式的微服務網絡以及應用之間的互動。随着規模和複雜性的增長,服務網格越來越難以了解和管理。它的需求包括服務發現、負載均衡、故障恢複、名額收集和監控以及通常更加複雜的運維需求,例如 A/B 測試、金絲雀釋出、限流、通路控制和端到端認證等。

Istio 提供了一個完整的解決方案,通過為整個服務網格提供行為洞察和操作控制來滿足微服務應用程式的多樣化需求。

為什麼要使用 Istio?

Istio 提供一種簡單的方式來為已部署的服務建立網絡,該網絡具有負載均衡、服務間認證、監控等功能,而不需要對服務的代碼做任何改動。想要讓服務支援 Istio,隻需要在您的環境中部署一個特殊的 sidecar 代理,使用 Istio 控制平面功能配置和管理代理,攔截微服務之間的所有網絡通信:

  • HTTP、gRPC、WebSocket 和 TCP 流量的自動負載均衡。
  • 通過豐富的路由規則、重試、故障轉移和故障注入,可以對流量行為進行細粒度控制。
  • 可插入的政策層和配置 API,支援通路控制、速率限制和配額。
  • 對出入叢集入口和出口中所有流量的自動度量名額、日志記錄和跟蹤。
  • 通過強大的基于身份的驗證和授權,在叢集中實作安全的服務間通信。

Istio 旨在實作可擴充性,滿足各種部署需求。

核心功能

Istio 在服務網絡中統一提供了許多關鍵功能:

流量管理

通過簡單的規則配置和流量路由,您可以控制服務之間的流量和 API 調用。Istio 簡化了斷路器、逾時和重試等服務級别屬性的配置,并且可以輕松設定 A/B測試、金絲雀部署和基于百分比的流量分割的分階段部署等重要任務。

通過更好地了解您的流量和開箱即用的故障恢複功能,您可以在問題出現之前先發現問題,使調用更可靠,并且使您的網絡更加強大——無論您面臨什麼條件。

安全

Istio 的安全功能使開發人員可以專注于應用程式級别的安全性。Istio 提供底層安全通信信道,并大規模管理服務通信的認證、授權和加密。使用Istio,服務通信在預設情況下是安全的,它允許您跨多種協定和運作時一緻地實施政策——所有這些都很少或根本不需要應用程式更改。

雖然 Istio 與平台無關,但将其與 Kubernetes(或基礎架構)網絡政策結合使用,其優勢會更大,包括在網絡和應用層保護 pod 間或服務間通信的能力。

可觀察性

Istio 強大的跟蹤、監控和日志記錄可讓您深入了解服務網格部署。通過 Istio 的監控功能,可以真正了解服務性能如何影響上遊和下遊的功能,而其自定義儀表闆可以提供對所有服務性能的可視性,并讓您了解該性能如何影響您的其他程序。

Istio 的 Mixer 元件負責政策控制和遙測收集。它提供後端抽象和中介,将 Istio 的其餘部分與各個基礎架構後端的實作細節隔離開來,并為運維提供對網格和基礎架構後端之間所有互動的細粒度控制。

所有這些功能可以讓您可以更有效地設定、監控和實施服務上的 SLO。當然,最重要的是,您可以快速有效地檢測和修複問題。

平台支援

Istio 是獨立于平台的,旨在運作在各種環境中,包括跨雲、内部部署、Kubernetes、Mesos 等。您可以在 Kubernetes 上部署 Istio 或具有 Consul 的 Nomad 上部署。Istio 目前支援:

  • 在 Kubernetes 上部署的服務
  • 使用 Consul 注冊的服務
  • 在虛拟機上部署的服務

內建和定制

政策執行元件可以擴充和定制,以便與現有的 ACL、日志、監控、配額、審計等方案內建。

架構

Istio 服務網格邏輯上分為資料平面和控制平面。

  • 資料平面由一組以 sidecar 方式部署的智能代理(Envoy)組成。這些代理可以調節和控制微服務及 Mixer 之間所有的網絡通信。
  • 控制平面負責管理和配置代理來路由流量。此外控制平面配置 Mixer 以實施政策和收集遙測資料。

下圖顯示了構成每個面闆的不同元件:

[轉載] 什麼是istio 官網内容

Istio 架構

Envoy

Istio 使用 Envoy 代理的擴充版本,Envoy 是以 C++ 開發的高性能代理,用于調解服務網格中所有服務的所有入站和出站流量。Envoy 的許多内置功能被 istio 發揚光大,例如:

  • 動态服務發現
  • 負載均衡
  • TLS 終止
  • HTTP/2 & gRPC 代理
  • 熔斷器
  • 健康檢查、基于百分比流量拆分的灰階釋出
  • 故障注入
  • 豐富的度量名額

Envoy 被部署為 sidecar,和對應服務在同一個 Kubernetes pod 中。這允許 Istio 将大量關于流量行為的信号作為屬性提取出來,而這些屬性又可以在 Mixer 中用于執行政策決策,并發送給監控系統,以提供整個網格行為的資訊。

Sidecar 代理模型還可以将 Istio 的功能添加到現有部署中,而無需重新建構或重寫代碼。可以閱讀更多來了解為什麼我們在設計目标中選擇這種方式。

Mixer

Mixer 是一個獨立于平台的元件,負責在服務網格上執行通路控制和使用政策,并從 Envoy 代理和其他服務收集遙測資料。代理提取請求級屬性,發送到 Mixer 進行評估。有關屬性提取和政策評估的更多資訊,請參見 Mixer 配置。

Mixer 中包括一個靈活的插件模型,使其能夠接入到各種主機環境和基礎設施後端,從這些細節中抽象出 Envoy 代理和 Istio 管理的服務。

Pilot

Pilot 為 Envoy sidecar 提供服務發現功能,為智能路由(例如 A/B 測試、金絲雀部署等)和彈性(逾時、重試、熔斷器等)提供流量管理功能。它将控制流量行為的進階路由規則轉換為特定于 Envoy 的配置,并在運作時将它們傳播到 sidecar。

Pilot 将平台特定的服務發現機制抽象化并将其合成為符合 Envoy 資料平面 API 的任何 sidecar 都可以使用的标準格式。這種松散耦合使得 Istio 能夠在多種環境下運作(例如,Kubernetes、Consul、Nomad),同時保持用于流量管理的相同操作界面。

Citadel

Citadel 通過内置身份和憑證管理可以提供強大的服務間和最終使用者身份驗證。可用于更新服務網格中未加密的流量,并為運維人員提供基于服務辨別而不是網絡控制的強制執行政策的能力。從 0.5 版本開始,Istio 支援基于角色的通路控制,以控制誰可以通路您的服務。

設計目标

Istio 的架構設計中有幾個關鍵目标,這些目标對于使系統能夠應對大規模流量和高性能地服務處理至關重要。

  • 最大化透明度:若想 Istio 被采納,應該讓運維和開發人員隻需付出很少的代價就可以從中受益。為此,Istio 将自身自動注入到服務間所有的網絡路徑中。Istio 使用 sidecar 代理來捕獲流量,并且在盡可能的地方自動程式設計網絡層,以路由流量通過這些代理,而無需對已部署的應用程式代碼進行任何改動。在 Kubernetes中,代理被注入到 pod 中,通過編寫 iptables 規則來捕獲流量。注入 sidecar 代理到 pod 中并且修改路由規則後,Istio 就能夠調解所有流量。這個原則也适用于性能。當将 Istio 應用于部署時,運維人員可以發現,為提供這些功能而增加的資源開銷是很小的。所有元件和 API 在設計時都必須考慮性能和規模。