1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        Istio 基礎(chǔ)架構(gòu)及應(yīng)用

        共 4732字,需瀏覽 10分鐘

         ·

        2022-04-26 13:41

        前幾天被問到項目中使用的服務(wù)網(wǎng)格核心 Istio 的架構(gòu)及改進問題,一時語塞!??


        當(dāng)時項目緊急只顧著調(diào)研方案及快速應(yīng)用了,并未對其清奇骨骼及豐膩肌理進行深入了解,Istio 是怎么進行流量攔截治理的,Istio 架構(gòu)都包含哪些組件,分別負(fù)責(zé)什么功能?


        本著對行業(yè)發(fā)展主流技術(shù)的好奇和敏感,隨即系統(tǒng)性學(xué)習(xí)了解了下,分享給大家,有不對的地方還望見諒并幫忙批評指正~~

        一、服務(wù)網(wǎng)格ServiceMesh

        作為技術(shù)背景,談?wù)?Istio 之前不能免俗必得談及服務(wù)網(wǎng)格 ServiceMesh。


        時下微服務(wù)大行其道,單體應(yīng)用被拆分為較多相對獨立的微小服務(wù),單個服務(wù)的復(fù)雜度及維護成本大幅降低,卻碰壁了另外一個難題--眾多微服務(wù)之間的通信聯(lián)動管理及監(jiān)控,如服務(wù)發(fā)現(xiàn)、負(fù)載均衡、版本控制、故障轉(zhuǎn)移、灰度發(fā)布、熔斷限流及監(jiān)控追蹤等。


        業(yè)界大牛們解決這個難題也經(jīng)過了多次架構(gòu)演進,大致分為服務(wù)內(nèi)嵌代理、代理分離多服務(wù)復(fù)用、代理和服務(wù)一對一匹配(sidecar 邊車模式) 三個階段。

        Service Mesh 就是為微服務(wù)而生的專用基礎(chǔ)設(shè)施層,像網(wǎng)格一樣連接所有的微服務(wù)通信,是一套輕量級高性能網(wǎng)絡(luò)代理。它提供安全的、快速的、可靠地服務(wù)間通訊,與實際應(yīng)用部署一起,但對應(yīng)用透明。

        二、Istio 核心架構(gòu)

        ServiceMesh 和 sidecar 都是一種架構(gòu)思想,具體的技術(shù)生態(tài)比較龐大,Istio、Envoy、MOSN、Linkerd、Kong、Nginxmesh、Jaeger、Zipkin、Kiali、Grafana、Prometheus等等。我們今天不發(fā)散,集中看下 Istio。?


        Istio 是由 IBM、Google 和 Lyft 開發(fā)的一套服務(wù)網(wǎng)格的開源實現(xiàn)。目前 Istio 市場占有率70%+,已經(jīng)算是事實上的服務(wù)網(wǎng)格技術(shù)標(biāo)準(zhǔn)。


        Istio 默認(rèn)使用 Lyft 的 Envoy 作為數(shù)據(jù)平面 sidecar 控制器,控制平面控制器則主要包括 Pilot 司令官、Mixer 守護神、安全碉堡 Citadel 、配置中心 Galley 等。(Istio1.5之后整體架構(gòu)變動較大,將控制平面眾多組件合為一體收歸Istiod 統(tǒng)一控制,但為了更清楚的講述我們暫且先分開看)

        Envoy數(shù)據(jù)代理

        Envoy 是用 C++ 開發(fā)的高性能網(wǎng)絡(luò)代理,它是 Istio 數(shù)據(jù)平面的核心組件。


        它作為 sidecar 和服務(wù)部署在同一個 Pod 中,通過 sidecar-injector 自動注入,通過容器啟動時初始化設(shè)定一堆 ipatables 規(guī)則來攔截代理服務(wù)網(wǎng)格中所有服務(wù)的入站和出站流量,從而進行相應(yīng)的服務(wù)及流量治理維護,這塊的詳細內(nèi)容上一篇文章中已經(jīng)詳細講述了,可以參見 ?從iptables談ServiceMesh流量攔截。

        istio-iptables?-p?15001?-z?15006?-u?1337?-m?REDIRECT?-i?'*'?-x?""?-b?'*'

        Pilot司令官

        Pilot 是 Istio 控制平面流量管理的核心組件。管理和配置部署在 Istio 服務(wù)網(wǎng)格中的所有 Envoy 數(shù)據(jù)代理實例,允許用戶配置 Envoy 代理之間的流量轉(zhuǎn)發(fā)路由規(guī)則及故障轉(zhuǎn)移恢復(fù)如超時重試熔斷等。

        Pilot-agent 代理守護進程

        Pilot-agent 在啟動 Envoy 時將 xDS server 信息通過靜態(tài)資源的方式配置到 Envoy 的初始化配置文件中,Envoy 啟動后再通過 xDS server 獲取網(wǎng)格中的服務(wù)信息、路由規(guī)則等動態(tài)資源。

        $?ps?-ef
        UID??????????PID????PPID??C?STIME?TTY??????????TIME?CMD
        istio-p+???????1???????0??0?Mar25??????????00:30:10?/usr/local/bin/pilot-agent?proxy?sidecar?--domain?bpd-ie.svc
        istio-p+??????70???????1?30?Mar25??????????16-14:25:11?/usr/local/bin/envoy?-c?etc/istio/proxy/envoy-rev0.json?-
        istio-p+??????95???????0??0?08:24?pts/0????00:00:00?/bin/sh
        istio-p+?????104??????95??0?08:33?pts/0????00:00:00?ps?-ef

        Mixer守護神

        Mixer 是 Istio 中負(fù)責(zé)執(zhí)行服務(wù)間的訪問策略和收集遙測數(shù)據(jù)的組件。服務(wù)間請求轉(zhuǎn)發(fā)時,Envoy 會對 Mixer 發(fā)起 check 和 report 兩次請求執(zhí)行訪問策略與管理配額,并在請求轉(zhuǎn)發(fā)后上報遙測數(shù)據(jù)。我們看到的可視化的日志監(jiān)控,jaeger、zipkin、kiali、prometheus 等基礎(chǔ)設(shè)施的數(shù)據(jù)都是Mixer 通過 Adapter 機制遙測上報的。

        Citadel安全碉堡

        Citadel 主要負(fù)責(zé) Istio 的安全問題。負(fù)責(zé)證書的頒發(fā)及校驗,通過內(nèi)置身份和憑證管理提供強大的服務(wù)間和最終用戶身份驗證。

        Galley配置中心

        Galley 主要負(fù)責(zé)用戶配置信息的管理,從底層平臺接受并驗證分發(fā)配置信息到其他組件。


        Istio1.5 版本后架構(gòu)變動較大,全面擁抱變化的一個版本,重建了整個控制平面,將各個組件多進程合并打造了全新的部署模式 istiod,降低部署成本;摒棄了拖累系統(tǒng)性能的 Mixer;保證兼容性也不忘持續(xù)優(yōu)化和引入新的功能。在徹底拋棄歷史包袱的同時,Istio 團隊也用他們的勇氣踐行了敏捷開發(fā)的真諦,并且功能、性能、靈活性等各方面都得到了改進。

        三、Istio 應(yīng)用

        接下來結(jié)合我們項目中實際應(yīng)用簡單介紹 Istio 的一些規(guī)則配置用法,主要包括 Virtualservice、DestinationRule、GateWay、ServiceEntry、Sidecar等。


        先看基礎(chǔ)服務(wù)搭建好(我這里用的是Istio 1.7)以后系統(tǒng)中都有哪些組件(不一定都一樣,可以自己選擇遙測相關(guān)組件)。搭建過程略,大家可以參考官網(wǎng)詳細說明。

        kubectl?get?svc?-n?istio-system?--kubeconfig?~/.kube/config.thanos

        VirtualService

        定義了一組路由規(guī)則,當(dāng)流量進入時逐個規(guī)則進行匹配,直到匹配成功后將流量轉(zhuǎn)發(fā)給給定的路由地址,同時可以進行灰度發(fā)布、超時重試、故障轉(zhuǎn)移、流量鏡像等多種服務(wù)治理。

        apiVersion:?networking.istio.io/v1beta1
        kind:?VirtualService
        metadata:
        ??name:?**-virtualservice
        ??namespace:?**
        spec:
        ??hosts:
        ????-?**.**.svc.cluster.local
        ????-?**.**
        ??gateways:
        ????-?istio-system/default-gateway
        ????-?mesh
        ??http:
        ????-?match:???
        ????????-?port:?9090???##?rpc走9090端口
        ??????route:
        ????????-?destination:
        ????????????host:?**.**.svc.cluster.local
        ????????????port:
        ??????????????number:?9090
        ????-?route:??????????##?http默認(rèn)走8080端口
        ????????-?destination:
        ????????????host:?**.**.svc.cluster.local
        ????????????port:
        ??????????????number:?8080

        還可以應(yīng)用更多治理策略, 下面簡單列舉幾個,具體參見官網(wǎng)規(guī)則。

        ????-?match:
        ????????-?uri:???##?流量重定向
        ????????????prefix:?/checkparam
        ????????rewrite:
        ????????????uri:?/check
        ????????route:
        ????????-?destination:
        ????????????host:?**
        ????????????subset:?v1???##灰度
        ????????timeout:?0.5s??##?超時重試?重試條件?重試間隔?重試次數(shù)等
        ????????retries:
        ??????????attempts:?3
        ??????????perTryTimeout:?1s
        ??????????retryOn:?5xx
        ????????mirror:???????##?流量鏡像
        ??????????host:?**
        ??????????subset:?v2
        ????????mirror_percent:?100??##鏡像比例

        DestinationRule

        定義了網(wǎng)格中某個 Service 對外提供服務(wù)的策略及規(guī)則,這包括負(fù)載均衡策略、異常點檢測、熔斷控制、訪問連接池等。負(fù)載均衡策略支持簡單的負(fù)載策略(ROUND_ROBIN、LEAST_CONN、RANDOM、PASSTHROUGH)、一致性 Hash 策略和區(qū)域性負(fù)載均衡策略。我們服務(wù)中用的比較簡單這里就不列了。

        Gateway

        定義了所有 HTTP/TCP 流量進入網(wǎng)格或者從網(wǎng)格中出站的統(tǒng)一入口和出口。它描述了一組對外公開的端口、協(xié)議、負(fù)載均衡、以及 SNI 配置。Istio Gateway 包括 Ingress Gateway 與 Egress Gateway,分別用來配置網(wǎng)格的入口流量與出口流量。這個可以多服務(wù)復(fù)用。

        ServiceEntry

        可以將網(wǎng)格外的服務(wù)注冊到 Istio 的注冊表中去,這樣就可以把外部服務(wù)當(dāng)做網(wǎng)格內(nèi)部的服務(wù)一樣進行管理和操作。

        Sidecar

        主要用來定義控制 Envoy 代理轉(zhuǎn)發(fā)和接收的端口協(xié)議等,并可以限制 Sidecar 出站流量允許到達的目標(biāo)服務(wù)集合。

        最終,我們服務(wù)通過 Kiali 展示的服務(wù)拓?fù)鋱D如下所示。

        相應(yīng)的 jaeger 和 prometheus 等展示的追蹤及監(jiān)控也都一應(yīng)俱全,這里就不展示了。

        總結(jié)

        結(jié)合服務(wù)網(wǎng)格的實際應(yīng)用,我們一起回顧了微服務(wù)治理的架構(gòu)演進,一起簡單探討了 Istio 的核心架構(gòu)及1.5版本以后的變革,進而簡單介紹了 Istio 服務(wù)治理的一些簡單應(yīng)用規(guī)則配置。至于單個組件的具體工作深入原理后面有機會我們再逐個探討。本人也是一邊學(xué)一邊用,過程中如果有什么描述不恰當(dāng)?shù)牡胤竭€請各位看官見諒。

        參考資料

        [1]Istio架構(gòu) https://istio.io/latest/docs/ops/deployment/architecture/

        [2] 《云原生服務(wù)網(wǎng)格Istio》????? https://cloud.tencent.com/developer/article/1519639?from=article.detail.1519637



        推薦閱讀


        福利

        我為大家整理了一份從入門到進階的Go學(xué)習(xí)資料禮包,包含學(xué)習(xí)建議:入門看什么,進階看什么。關(guān)注公眾號 「polarisxu」,回復(fù)?ebook?獲??;還可以回復(fù)「進群」,和數(shù)萬 Gopher 交流學(xué)習(xí)。


        瀏覽 108
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            国产精品沙发午睡系列990531 | 另类老妇性bbwbbw小说 | 红桃视频在线观看一区二区三区 | 日亚欧美中文免看费看 | 黄色小说全集 | 午夜精品一区二区三区在线 | 成人小说色 | 久久久久久久久久毛片 | 亚洲IV秘 一区二区三区 | freesex呦交 |