Istio控制平面故障後會發生什麼?

ServiceMesher2018-11-24 21:37:01

作者:Jonh Wendell 譯者:李守超 校對:楊傳勝 原文:https://bani.com.br/2018/11/istio-what-happens-when-control-plane-is-down

大家好!我在Istio上做了一些實驗,禁用控制平面的組件,並觀察應用和網格會發生什麼。下面是我的筆記。

Pilot

Pilot負責Istio的流量控制特性,同時將Sidecar更新至最新的網格配置。

Pilot啟動以後,監聽端口 15010 (gRPC)和 8080 (HTTP)。

當應用的Sidecar(Envoy,Istio-Proxy)啟動以後,它將會 pilot.istio-system:15010 ,獲取初始配置,並保持長連接。

Pilot會監聽Kubernetes資源,只要檢測到網格發生變化,就會將最新的gRPC連接推送到Sidecar上。

  • 當Pilot停止以後,Pilot和Sidecar之間的gRPC連接被關閉,同時Sidecar會一直嘗試重連。

  • 網絡流量不會受到Pilot停止的影響,因為所有的配置被推送過來以後,就會存儲在Sidecar的內存中。

  • 網格中新的變更信息(例如新的Pod、規則、服務等等)不會繼續到達Sidecar,因為Pilot不再監聽這些變化並轉發。

  • 當Pilot重新上線以後,Sidecar就會重新建立連接(一直嘗試重連)並獲取到最新的網格配置。

Mixer Policy

Policy執行網絡策略。

Mixer在啟動時讀取配置,並監聽Kubernetes的資源變化。一旦檢測到新的配置,Mixer就會將其加載至內存中。

Sidecar在每次請求服務應用時,檢查(發起連接)Mixer Policy Pod。

當Mixer Policy Pod停止以後,所有到服務的請求會失敗,並收到 “503 UNAVAILABLE:no healthy upstream” 的錯誤——因為所有 sidecar 無法連接到這些Pod。

在Istio 1.1版本中新增了[global]配置( policyCheckfailOpen ),允許 “失敗打開” 策略,也即當Mixer Policy Pod無法響應時,所有的請求會成功,而不是報 503 錯誤。默認情況下該配置設置為 false ,也即 “失敗關閉”

當Mixer停止後,我們在網格中執行的操作(例如新增規則、更新配置等等)都不會對應用產生影響,直到Mixer重新啟動。

Mixer Telemetry

Telemetry為Istio插件提供遙測信息。

Sidecar什麼時候調用Telemetry Pod取決於兩個因素:批量完成100次請求和請求時間超過1秒鐘(默認配置),這兩個條件只要有一個先滿足就會執行該操作,這是為了避免對Telemetry Pod造成過於頻繁的調用。

當Telemetry Pod停止以後,Sidecar記錄一次失敗信息(在Pod標準錯誤輸出裡),並丟棄遙測信息。請求不會受到影響,正如Policy Pod停止時一樣。當Telemetry Pod重新啟動以後,就會繼續從Sidecar收到遙測信息。

其它信息

值得注意的是,Istio允許自定義控制平面的組件。例如,如果不需要Policy,你可以完全禁用Mixer Policy。Istio 1.1對這種模塊化的特性支持的更好。更多信息,可以參考這篇文檔。

當然,Pilot、Mixer Policy和Mixer Telemetry在高可用部署場景工作的也很好,可以同時運行多副本。實際上,默認配置通過 HorizontalPodAutoscaler 允許啟動1到5個Pod。(詳細請參考這篇文檔和這篇文檔)

相關閱讀推薦

Istio

IBM Istio

  • 111 Istio

  • 118 Istio上手

  • 1115 Istio

  • 11月22日 Envoy

  • 1129 使Istio

  • 126 Istio mixer -

  • 1213 Istio

  • 1220 Istio使Serverless knative

  • IBMIstio

點擊【閱讀原文】跳轉到ServiceMesher網站上瀏覽可以查看文中的鏈接。

  • SOFAMesh(https://github.com/alipay/sofa-mesh)基於Istio的大規模服務網格解決方案

  • SOFAMosn(https://github.com/alipay/sofa-mosn)使用Go語言開發的高性能Sidecar代理

合作社區

參與社區

以下是參與ServiceMesher社區的方式,最簡單的方式是聯繫我!

  • 加入微信交流群:關注本微信公眾號後訪問主頁右下角有獲取聯繫方式按鈕,添加好友時請註明姓名-公司

  • 社區網址:http://www.servicemesher.com

  • Slack:https://servicemesher.slack.com (需要邀請才能加入)

  • GitHub:https://github.com/servicemesher

  • Istio中文文檔進度追蹤:https://github.com/servicemesher/istio-official-translation

  • Twitter: https://twitter.com/servicemesher

  • 提供文章線索與投稿:https://github.com/servicemesher/trans


閱讀原文

TAGS: