istio是一個用來鏈接、管理和保護微服務的開源的服務網格,服務網格是用於描述構成應用程序的微服務網絡以及應用之間的交互,隨着規模和複雜性的增加,服務網格愈來愈難以理解和管理,它的功能包括服務發現、負載均衡、故障恢復、指標和監控以及更加複雜的運維工做,例如 A/B 測試、金絲雀發佈、限流、訪問控制和端到端身份驗證等,istio解決了開發和運維人員從部署單個應用程序向分佈式微服務架構過渡時所面臨的挑戰,Istio做爲微服務網格中的佼佼者,它提供了洞察和操做控制微服務網格的能力,提供完整的解決方案以知足微服務應用程序的各類要求,從較高的層面來講,Istio 有助於下降這些部署的複雜性,並減輕開發團隊的壓力,它是一個徹底開源的服務網格,做爲透明的一層接入到現有的分佈式應用程序裏,它也是一個平臺,擁有能夠集成任何日誌、遙測和策略系統的 API 接口,Istio 多樣化的特性使你們可以成功且高效地運行分佈式微服務架構,並提供保護、鏈接和監控微服務的統一方法。istio目前僅支持在Kubernetes上的服務部署,但將來版本中將支持其餘環境。
docker
經過「擁抱單體」升級了 istio,將控制平面整合爲一個新的二進制文件——istiod,極大地簡化了安裝、運行和升級 istio 的流程,更少的組件讓運維人員的調試和理解也變得更簡單,對於網格用戶,istiod 不會改變他們的任何體驗,全部 API 和運行時特性均與之前的組件一致。後端
Istio一直都是可擴展性最好的服務網格,其 Mixer 插件容許自定義策略和遙測,而 Envoy 擴展則容許數據平面自定義。在Istio1.5中,咱們發佈了一個新模型,該模型使用WebAssembly(Wasm)將Istio的可擴展性模型與Envoy統一。Wasm將使開發人員可以安全地分發和執行 Envoy 代理中的代碼,以便與遙測系統、策略系統、路由控制甚至是消息體轉換(transformthe body of a message)進行集成,它將更加靈活和高效,再也不須要單獨運行 Mixer 組件(這也簡化了部署)。安全
使用istioctl的Istio命令行安裝是安裝的測試版,這適用於大多數用戶,經過 Operator管理安裝的Istio仍處於Alpha狀態,關於istioctl,它有十幾項改進,能夠分析新項、更好的驗證規則、更好的與CI系統集成,如今,它是瞭解正在運行 Istio 系統的狀態、確保配置安全更改的必要工具。咱們對 Istio 安全性進行了許多加強,使其更易於使用,經過自動 mTLS 的 beat 版 launch,如今配置mTLS 很是簡單, 經過 Istio 1.4 中受權策略的beta 版 launch,咱們移除了間接訪問,並將其合併到單個 CRD,使得訪問控制也獲得了簡化。網絡
Telemetry v2 如今會報告原生 TCP 鏈接(除了HTTP)的度量標準,而且經過在遙測和日誌中添加響應狀態代碼來加強了對 gRPC 工做負載的支持,如今默認使用 Telemetry v2。新的遙測系統將等待時間縮短了一半,90% 的等待時間從 7 毫秒 下降至3.3 毫秒。不只如此,移除 Mixer 還使總的 CPU 消耗減小了 50%(0.55 vCPU,1000 個請求/每秒)。架構
Pilot爲Envoy sidecar提供服務發現、用於智能路由的流量管理功能(例如,A/B 測試、金絲雀發佈等)以及彈性伸縮功能(超時、重試、熔斷器等),Pilot將控制流量行爲的高級路由規則轉換爲特定於環境的配置,並在運行時將它們傳播到sidecar,Pilot 將特定於平臺的服務發現機制抽象出來,並將它們合成爲任何符合EnvoyAPI的sidecar均可以使用的標準格式。app
Galley是Istio的配置驗證、提取、處理和分發組件,爲更好的解耦職責,它在lstio 1.1 後由僅負責配置驗證升級成了控制面的配置管理中心,能夠對接不一樣註冊中心,用於爲服務網格提供配置輸入能力,它負責將其他的 Istio 組件與從底層平臺(例如 Kubernetes)獲取用戶配置的細節隔離開來。負載均衡
在 K8s 體系裏負責數據面的初始化相關工做,其中 lstio 的核心特性之一 Sidecar 自動注入正是依賴該組件;運維
是 ilstio 裏負責提供策略控制和遙測收集的組件,內部包含兩個子組件 —— Telemetry 和 Policy,其中 Telemetry 負責監控相關的採集信息的數據聚合以用於對接各類監控後端,而Policy 負責在服務相互調用過程當中對請求進行策略檢查,例如鑑權等curl
負責服務網格里安全相關功能,爲服務和用戶提供認證和鑑權、管理憑據和 RBAC 等相關能力;服務網格控制面各個組件被定義得清楚瞭然,設計之初就已經考慮到各類組件職責解耦、擴展性、安全性等,架構上看起來也很是清晰優雅。分佈式
簡化運維和開發人員的維護成本,以前的Istio按功能整理成以下表格
迴歸單體以後按功能整理成表格以下
通過對比能夠看到,Istiod是將原有的的其它組件通通塞入了pilot,而架構調整後的新pilot,即Istiod肩負了相比pilot更多的職責,單個二進制文件在部署方式上變得更加簡單。
在正式安裝istio以前,請看下面的前提條件
istio1.5已經在Kubernetes版本 1.14, 1.15, 1.16 中測試過。
假如沒有kubernetes集羣,可按以下連接參考安裝:
官方的一個前提條件,此處理解便可,不須要作任何操做,做爲 Istio 服務網格中的一部分,Kubernetes集羣中的Pod和Service必須知足如下要求:
Service 的端口必須命名。端口名鍵值對必須按如下格式:name: <protocol>[-<suffix>]。
每一個 Pod 必須至少屬於一個Kubernetes Service,無論這個Pod是否對外暴露端口。若是一個Pod同時屬於多個Kubernetes Service,那麼這些Service不能同時在一個端口號上使用不一樣的協議(好比:HTTP 和 TCP)。帶有app和version標籤(label)的Deployment:建議給Deployment加上app和version標籤,給使用 Kubernetes Deployment部署的Pod部署配置中增長這些標籤,能夠給 Istio 收集的指標和遙測信息中增長上下文信息。
app標籤:每一個部署配置應該有一個不一樣的app標籤而且該標籤的值應該有必定意義。app label用於在分佈式追蹤中添加上下文信息。
version標籤:這個標籤用於在特定方式部署的應用中表示版本。
確保你的 Pod 不會以用戶 ID(UID)爲 1337 的用戶運行應用。
若是你的集羣執行 Pod 安全策略,必須給 Pod 配置NET_ADMIN功能。若是你使用Istio CNI 插件能夠不配置。
下載內容將包含:安裝文件、示例和istioctl命令行工具,訪問Istio release頁面下載與操做系統對應的安裝文件,在macOS或Linux 系統中,也能夠經過如下命令下載最新版本的 Istio:
curl -L https://istio.io/downloadIstio | sh -
cd istio-1.5.1
install/kubernetes目錄下,有Kubernetes相關的YAML安裝文件
samples/目錄下,有示例應用程序
bin/目錄下,包含istioctl的客戶端文件,istioctl工具用於手動注入 Envoy sidecar 代理。
export PATH=$PWD/bin:$PATH
若是訪問不了docker hub,能夠手動把鏡像上傳到kubernetes機器的各個節點上,或者把鏡像傳到harbor私有鏡像倉庫,而後
docker load-i istio_pilot_1_5_1.tar.gz
docker load-i istio_pilot_1_5_1.tar.gz
docker load-i istio_proxyv2_1_5_1.tar.gz
解壓鏡像便可
鏡像所在的百度網盤連接以下:
連接:https://pan.baidu.com/s/1U9osuypeUx6ILjYs3K-04g 提取碼:a3sm
cd /root/istio-1.5.1
使用默認的配置文件安裝istio,最簡單的安裝是使用istio默認的配置文件
istioctl manifest apply
查看是否安裝成功
kubectl get pods -n istio-system
顯示以下,說明istio安裝成功
想要了解更多istio的更多生產案例,獲取k8s、devops免費視頻,可按以下方式進入技術交流羣獲取哈~~