istio的原理和功能介紹

2022-08-01 15:09:12 字數 3886 閱讀 9399

目錄3 功能列表

4 效能評估

當前我們已經完成從單體的應用程式向微服務架構的轉型,未來還可能會面臨更多的分布式場景需求。以往只需要執行好乙個單體的應用,現在卻面臨著對整體服務網路管理,隨著規模和複雜度的不斷增長,服務網路勢必會越來越難以理解和管理。那麼我們如何去應對這些挑戰呢?這就是istio所能為我們解決的問題。

忘了在哪看到過類似的話了,開發人員應該把更多的精力放在對業務和功能的實現上,而不是被繁瑣的日誌、監控、測試等輔助模組所禁錮。事實上,我們啟用redis、grpc、iris等——正是在往這個簡化開發步驟的方向走,總不能每開發乙個應用都得實現一套tcp/ip通訊、實現一套紅黑樹或跳表吧。而istio則為我們把這件事執行的更徹底。讓我們看看istio到底能幹啥?

istio lets you connect, secure, control, and observe services.官方給出的istio的總結,很簡單明瞭。連線、安全、控制和觀測服務。換個思路來講,istio針對現有的服務網路,提供一種簡單的方式將連線、安全、控制和觀測的模組,與應用程式或服務隔離開來,從而開發人員可以將更多的精力放在核心的業務邏輯上,以下是istio的核心功能概述:

• http、grpc、websocket 和 tcp 流量的自動負載均衡。

• 通過豐富的路由規則、重試、故障轉移和故障注入,可以對流量行為進行細粒度控制。

• 可插入的策略層和配置 api,支援訪問控制、速率限制和配額。

• 對出入集群入口和出口中所有流量的自動度量指標、日誌記錄和追蹤。

• 通過強大的基於身份的驗證和授權,在集群中實現安全的服務間通訊。

上面是官方給的架構圖,核心元件有:proxy**、mixer混合器、pilot引導、citadel堡壘,以及galley。

istio的核心原理,是網路**,攔截下所有想攔截的流量,然後想幹啥就幹啥吧。

istio使用的**元件是lyft團隊的envoy,乙個c++開發的高效能**。這是lyft在istio專案裡的唯一貢獻,卻讓lyft排在跟google/ibm並列的位置,可想而知envoy對istio的重要性。

envoy之所以有能力攔截下所有的流量,是因為它被設計為部署在每乙個需要管理的pod裡,作為乙個獨立容器存在,支援通過配置iptables或cni網橋兩種方式來攔截流量(這裡也不展開說了,還不明白的同學可以翻看我之前發的k8s底層網路的說明,看看flannel的實現原理),請看上圖,business-manager容器的請求發出時,會經過本pod的enovy**,enovy完成規則校驗、資料採集、日誌等操作後,再**出去;值得注意的是,請求方enovy**出去的流量會傳送給接收方的enovy,之後才有可能到達真正的接收方data-product容器。當然這些操作是istio的活,我們要做的僅僅是通過配置的形式告訴istio我們要對哪些流量做什麼動作。

通過對攔截下來的流量的解析和修改(是的,理論上什麼都能幹,包括修改甚至丟棄流量),envoy包括但不限於以下功能:

• 動態服務發現

• 負載均衡

• tls 終止

• 熔斷器

• 健康檢查、基於百分比流量拆分的灰度發布

• 故障注入

• 豐富的度量指標

顧名思義,mixer混合了各種策略以及後端資料採集或遙測系統的介面卡,從而實現了前端proxy與後端系統的隔離與匯合。mixer是乙個靈活的外掛程式模型(有沒有發現無論是k8s還是istio,實現上都很青睞於外掛程式模型,這是乙個很靈活的實現方式),它一端連著envoy,同時我們可以將日誌、監控、遙測等各種系統「插入」到mixer的另一端中,從而得到我們想要的資料或結果。

我們來看下官方的mixer拓撲圖,mixer被設計為乙個獨立執行的模組,它可以「插入」logging日誌、quota指標、auth安全認證、tele遙測等很多模組。每插入乙個模組都會在前端生成乙個規則過濾器。前端的enovy在每次流量到來時,都會請求mixer,匹配每乙個過濾器。

這就涉及到效能問題了,所以istio在這個拓撲下設計了乙個二級快取系統。envoy端在每個pod裡有乙個一級快取,當然這個快取不能太大;mixer端會有乙個二級快取,由於mixer是獨立執行的,所以這個快取可以設計的比較大。這樣envoy可以預先快取一部分規則,只有當規則缺失時才需要向mixer請求,這就減少了每次流量到來的網路請求次數;另一方面,日誌等資料上送,也是非同步執行的,先經過一級快取、二級快取再到達後端儲存或處理系統。

簡單來說,pilot是為我們提供配置智慧型路由(如a/b測試、金絲雀發布等)、彈性(超時、重發、熔斷等)等功能的管理系統,它提供了一系列rules api,允許運維人員指定一系列高階的流量管理規則。pilot負責將我們的配置轉換並寫入到每個sidecar(enovy)。

這個不知道咋翻譯,目前這個元件的作用是驗證使用者編寫的istio api配置。從官網的說法來看,後面這個元件會逐步接管獲取配置、處理和分配的工作,比如從k8s的資料中心(etcd)獲取集群資訊的活,理論上應該交給galley幹。從這個資訊來看,galley的定位應該類似於k8s的api server元件,提供集群內統一的配置資訊介面,從而將使用者配置的細節隔離開來。

類別功能

說明流量管理

請求路由

a/b測試、金絲雀發布等,包括對集群出入口、及集群內部的流量的控制。比如某應用新版本發布,可以配置為5%的流量流向新版本,95%的給舊版本

流量轉移

與上一條請求路由類似,可以平滑的將流量從舊版本轉移到新版本上

負載均衡

目前支援3種方式,輪詢、隨機和帶權重的最少請求

服務發現

帶心跳的健康檢查,失敗率超標的pod移出負載均衡池

故障處理

超時、重發、熔斷、上游併發請求或下游連線數限制等

微調支援用特殊的請求頭引數,覆蓋預設的超時、重發值

故障注入

由enovy在正常的集群中人為注入故障,比如tcp包損壞或延遲、http錯誤碼等,支援按百分比注入,比如給10%的流向服務a的請求包增加5秒延遲

多重匹配

上述規則的配置,支援按多種條件匹配,且支援and或or的方式匹配多條規則

gateway

接管集群入口的流量,替代了ingress,從而對入口流量執行其他規則

service entry

接管集群內部訪問外部服務的流量,從而對出口流量執行一些規則

映象支援將特定的流量映象到服務路徑之外,而不影響主服務路徑的正常執行

安全命名空間訪問控制

支援配置某命名空間的所有或個別服務可以被其他命名空間訪問

服務級別訪問控制

允許或禁止訪問某個服務

雙向tls

https加密傳輸

其他安全策略

策略速率限制

比如限制每秒的請求次數

黑白名單

支援基於ip或屬性的黑名單、白名單

遙測日誌收集

支援將prometheus、jaeger等系統插入mixer,從而完成資料的採集

指標採集

分布式追蹤

官方給出了對最新版本v1.1.4的效能測試結果。在由1000個服務和2000個sidecar組成,每秒產生70000個網格範圍內的請求的網格中,得到以下結果:

• envoy在每秒處理 1000 請求的情況下,使用 0.6 個 vcpu 以及 50 mb 的記憶體。

• istio-telemetry在每秒1000個網格範圍內的請求的情況下,消耗了0.6個vcpu。

• pilot使用了 1 個 vcpu 以及 1.5 gb 的記憶體。

• envoy在第 90 個百分位上增加了 8 毫秒的延遲。

Hamachi 原理 和 功能

hamachi 是一款利用p2p 方式來進行檔案傳輸的軟體,它能夠讓使用者穿透防火牆或是nat vpn 等網路環境,連線上乙個虛擬的網路群組,使用者無論在何處,只要透過hamachi 連線上該群組,就能夠與群組中的電腦進行檔案的分享。hamachi 提供的是一種加密的資料傳輸,不像bt等p2p採用非...

Kafka介紹和原理

簡而言之,kafka是一種mq,現在有很多開源的mq,包括activemq,rokectmq,rabbitmq和kafka等等。還有些大型網際網路公司內部不開源的mq,比如阿里巴巴的metaq,京東的jmq等等。kafka是強依賴於zookeeper的,所以,如果想深入了解kafka,需要熟悉zoo...

VF和NF功能介紹

vf 虛擬功能 pf 物理功能 sr iov sr iov 技術是一種基於硬體的虛擬化解決方案,可提高效能和可伸縮性。sr iov 標準允許在虛擬機器之間高效共享 pcie peripheral component interconnect express,快速外設元件互連 裝置,並且它是在硬體中實...