關(guān)于使用Istio的基本概念

最近看到很多關(guān)于Service Mesh,Istio的文章,團(tuán)隊(duì)里面也有很多同學(xué)在學(xué)習(xí)應(yīng)用,我們拿Istio作為用例來談一下Service Mesh。必須說明一下,本質(zhì)和Spring Cloud能做的事情不沖突也差不多,但是由于Google力挺加上K8s的支持,Service Mesh也算是個(gè)不錯(cuò)的選擇,特別是針對(duì)cluster
本身Service Mesh是一種服務(wù)間的調(diào)用組織方式,凡是提及服務(wù),那么大家在微服務(wù)實(shí)現(xiàn)的時(shí)候?qū)W習(xí)到的服務(wù)發(fā)現(xiàn),熔斷機(jī)制,load balance,監(jiān)控,A/B測(cè)試,金絲雀發(fā)布,限流,端到端的安全認(rèn)證就都適用。
的確也看到過很多其他的框架,感覺Istio好理解,容易部署,也許這也是為啥我也花時(shí)間在上面的原因。

  • 提供了針對(duì)gRPC,HTTP, gRPC, WebSocket甚至TCP的負(fù)載均衡.
  • 細(xì)粒度的服務(wù)行為監(jiān)控,豐富的路由規(guī)則設(shè)置,重試的配置,自動(dòng)的failover
  • 可插拔的定制化API設(shè)置,比如對(duì)ACL,限流的支持(比Zuul完善的多).
  • 非常靈活的自動(dòng)化日志系統(tǒng),以及服務(wù)的跟蹤特別是在集群環(huán)境下的全鏈路的服務(wù)調(diào)用跟蹤(配置比Sleuth還簡(jiǎn)單)
  • 完善的服務(wù)認(rèn)證及安全體系
    在整個(gè)Istio里面提到兩個(gè)重要的概念,數(shù)據(jù)管理器和控制管理器。
  • 數(shù)據(jù)流控制器包含了一組智能化代理,可以參考的就是(Envoy) 其實(shí)就是所謂的Sidecar,外掛模式(挎斗模式)這些服務(wù)代理像個(gè)Hub一樣管控協(xié)調(diào)服務(wù)之間的數(shù)據(jù)傳輸。

    image

    提到Sidecar一定記住這張圖,簡(jiǎn)單好理解。

  • 控制管理器管控所有服務(wù)代理之間的路由方式
    image.png

Istio的幾大組件

1.Envoy

  • 動(dòng)態(tài)的服務(wù)發(fā)現(xiàn)及注冊(cè)
  • 負(fù)載均衡
  • TLS 代理(SSL協(xié)議位于TCP/IP協(xié)議與各種應(yīng)用層協(xié)議之間,為數(shù)據(jù)通訊提供安全支持。SSL協(xié)議可分為兩層: SSL記錄協(xié)議(SSL Record Protocol):它建立在可靠的傳輸協(xié)議(如TCP)之上,為高層協(xié)議提供數(shù)據(jù)封裝、壓縮、加密等基本功能的支持。
    安全傳輸層協(xié)議(TLS)用于在兩個(gè)通信應(yīng)用程序之間提供保密性和數(shù)據(jù)完整性。該協(xié)議由兩層組成: TLS 記錄協(xié)議(TLS Record)和 TLS 握手協(xié)議(TLS Handshake)。較低的層為 TLS 記錄協(xié)議,位于某個(gè)可靠的傳輸協(xié)議(例如 TCP)上面,與具體的應(yīng)用無關(guān),所以,一般把TLS協(xié)議歸為傳輸層安全協(xié)議。
  • HTTP/2和gRPC代理的支持
  • 斷路由
  • 健康檢測(cè)
  • 故障注入及各種數(shù)據(jù)dashboard展現(xiàn)

2.混合器
主要就是權(quán)限控制,并能夠用來收集Envoy里面的數(shù)據(jù)的,并且保證了Istio對(duì)不同的host環(huán)境和不同的infrastructure下的接口標(biāo)準(zhǔn)化。

  1. Pivot,Citadel,Galley這些都是與發(fā)布,接口安全調(diào)用相關(guān)的組件:
    其中Pivot的架構(gòu)如下圖,像極了Zuul+Eureka+Ribbon....:


    image.png

這些組件讓Istio有豐富的,靈活的接口去管理API,管理服務(wù)之間的調(diào)用,管理終端到服務(wù)的調(diào)用。特別是,Istio管理不同的服務(wù)版本,讓他們共存在一個(gè)大環(huán)境中,的確算是個(gè)優(yōu)勢(shì)。
關(guān)于Traffic Management, 這張圖最贊


image.png

其實(shí)所謂的load balance一樣支持,輪訓(xùn)、隨機(jī)及權(quán)重分配。

我們可以看到Istio好多東西都是靠Envoy實(shí)現(xiàn)的,看看Envoy的配置,程序員同學(xué)更容易懂

"clusters": [
  {
    "name": "httpbin_service",
    "connect_timeout_ms": 5000,
    "type": "static",
    "lb_type": "round_robin",
    "hosts": [
      {
        "url": "tcp://172.17.0.2:8080"
      },{
        "url": "tcp://172.17.0.3:8080"
      }
    ],

斷路由的配置:

 "circuit_breakers": {
      "default": {
        "max_connections": 1,
        "max_pending_requests": 1,
        "max_retries": 3
      }

負(fù)責(zé)監(jiān)測(cè)并觸發(fā)斷路器的配置:

    "outlier_detection" : {
      "consecutive_5xx": 1,
      "max_ejection_percent": 100,
      "interval_ms": 1000,
      "base_ejection_time_ms": 60000
    }

再來看看在K8s下的例子,就更加明白了,特別是關(guān)于API Server的配置


image.png

一定要耐心開完Bookinfo的例子,要有耐心,仔細(xì)看看各種yaml的配置,自然會(huì)懂。Istio更多關(guān)注了服務(wù)抽象層面的communication以及整體的框架,Spring cloud相對(duì)更細(xì)節(jié)化,由于基于Spring,對(duì)于Java程序員更容易理解。概念都一樣,只是血統(tǒng)不同。祝大家學(xué)習(xí)開心!

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

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

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