天天看點

第一部分 Istio簡介

Istio簡述

Istio可以連接配接、保護、控制和觀察服務,降低微服務治理的複雜性,并減輕開發團隊的壓力。它的多樣化功能集使您能夠成功高效地運作分布式微服務架構,透明地分層到現有的分布式應用程式上。

為什麼要使用Istio

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

HTTP、gRPC、WebSocket 和 TCP 流量的自動負載均衡。

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

核心功能

  • 流量管理

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

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

  • 安全

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

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

  • 可觀察性

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

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

平台支援

Istio 是獨立于平台的,旨在運作在各種環境中,包括跨雲、内部部署、Kubernetes、Mesos 等。Istio 目前支援:

  • Kubernetes1.9以上
  • 具有 Consul 的 Nomad

內建和定制

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

架構

Istio邏輯上分為資料層面和控制層面。

資料層面:由一組以sidecar方式部署的智能代理(Envoy)組成。這些代理可以調節和控制微服務以及Mixer之間所有的網絡通信。

控制層面:負責管理和配置代理來路由流量。此外它還配置Mixer以實施政策和收集資料。

下圖顯示了Istio的不同元件:

第一部分 Istio簡介
  • Envoy

Istio使用Envoy代理的擴充版本,Envoy 是以 C++ 開發的高性能代理,用于調解服務的所有入站和出站資料,Istio中的Envoy主要功能如下:

  • 動态的服務發現
  • 負載均衡
  • TLS終止
  • Http/2&gRPC代理
  • 熔斷器
  • 健康檢查
  • 流量拆分
  • 故障注入
  • 豐富的度量名額

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

Sidecar代理模型還可以将Istio的功能添加到現有部署中,而無需重新建構或重寫代碼。

  • Mixer

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

  • Pilot

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

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

  • Citadel

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

  • Galley

Gally主要用于Istio的配置檔案管理,如擷取使用者的配置資訊,處理和配置設定配置資訊。驗證使用者編寫的Istio API配置資訊等。

設計目标

以下目标對大規模流量和高性能地服務處理至關重要。

  • 最大透明度

Istio盡可能的地方自動程式設計網絡層,無需對已部署的應用程式代碼進行任何改動。在 Kubernetes中,代理被注入到 pod 中,通過編寫 iptables 規則來捕獲流量。注入 sidecar 代理到 pod 中并且修改路由規則後,Istio 就能夠調解所有流量。此外,為提供這些功能而增加的資源開銷是很小的。

  • 可擴充性

它允許使用者擴充使用政策和控制來源,并将網絡信号傳播到其他系統進行分析。政策運作時支援标準擴充機制以便插入到其他服務中。此外,它允許擴充詞彙表,以允許基于網格生成的新信号來執行政策。

  • 可移植性

Istio 必須能夠以最少的代價運作在任何雲或預置環境中,将基于 Istio 的服務移植到新環境應該是輕而易舉的。而使用 Istio 将一個服務同時部署到多個環境中也是可行的。

  • 政策一緻性

政策系統作為獨特的服務來維護,具有自己的API,而不是将其放到代理/sidecar 中,這允許服務根據需要直接與其內建。

繼續閱讀