Istio,Kubernetes 的微服務支援_Kubernetes中文社群
簡介
Istio 是一個由 IBM、Google 以及 Lyft 聯合推出的開源軟體,以無痛方式為執行在 Kubernetes 上的微服務提供流量管理,訪問策略管理以及監控等功能。這一軟體目前僅在 Kubernetes 上執行,今後可能會擴充套件到其他平臺。本文會結合官方例子,完成安裝和基礎的監控內容。
架構和元件
總體架構如圖所示。
Envoy
一個 C++ 編寫的高效能代理伺服器,這裡做了擴充套件,在 Istio 中會以 Sidecar 方式跟應用執行在同一 Pod 內,一方面可以接收並執行關於規則、流量拆分等方面的指令,另一方面能夠產生各種指標用於監控和跟蹤。
Mixer
Mixer 元件,主要進行訪問控制以及策略控制,同時也負責從 Envoy 中獲取各項指標。
Pilot
Pilot 是使用者和 Isito 之間的橋樑,負責接收各種配置,併發送給各個元件。
Istio auth
內建認證和憑證管理,利用 TLS 提供服務之間、使用者和服務之間的認證。 可以用來將沒有加密支援的服務升級為加密版本,並且在網路策略之外,提供服務級別的策略控制,今後還會增加更多的鑑權和審計方面的能力。
功能 & 特性
- 無需對現有服務進行變更
- 支援 http 1.1/2、gRPC 以及 TCP 流量的負載均衡和故障轉移
- 可替換的元件
- 流量監控
- 可提供身份認證功能
- 可定製的路由規則
- 錯誤處理,例如超時、重試、訪問量控制、健康檢查和熔斷器等。
安裝
先決條件
- Kubernetes
- 網際網路連線
準備工作
首先去https://github.com/istio/istio/releases下載最新版本(目前為 0.1.6),解壓並設定 istioctl 命令的執行路徑 。下面命令中描述的相對目錄就是基於此目錄
執行命令kubectl api-versions | grep rbac檢視當前叢集的 RBAC 設定:
- 如果返回內容為空則無需理會。
- 如果返回內容中包含beta,則需要執行kubectl apply -f install/kubernetes/istio-rbac-beta.yaml來進行授權
- 如果返回內容中只有alpha ,就要kubectl apply -f install/kubernetes/istio-rbac-beta.yaml建立相應的角色和綁定了。
執行
最後,執行kubectl create -f install/kubernetes/istio.yaml建立一系列的 Deployment 以及 Services。
注1: 其實上面的內容照做並不一定能成功,反正我的 1.6.6 上面是沒能成功,Pilot Pod 中的 API Server 容器會出錯,錯誤資訊大概是“system:serviceaccount:default:istio-pilot-service-account” cannot get thirdpartyresources.extensions at the cluster scope.”,也就證明了 beta.yaml 中的 RBAC 設定是不夠的,這裡我把幾個 RoleBinding 都改成為 ClusterRoleBinding,執行就成功了。
注2:istio.yaml 中的 Ingress 服務是 Loadbalancer 型別的,如果測試叢集不具備這樣的條件,還請自行修改成其他合適內容。
至此,基礎的 istio 元件就已經執行完畢了。
執行應用
安裝包內包含了一個叫 bookinfo 的小應用,由 Product(入口頁)、Detail 和 Review 三部分組成,具體應用 YAML 在安裝目錄的samples/apps/bookinfo/bookinfo-v1.yaml檔案中。開啟檔案我們會發現這是個很簡單的小應用,無非是幾個 Deployment 和 Service 的組合。
該應用的微服務相互關係大致如下圖所示,這個例子很好的展示了 istio 的一大特性——不拘泥於某種語言。
istio 提供了一個工具叫 istioctl,這個工具的功能之一,就是把普通的應用 YAML 注入為 istio 支援的應用模式,例如:istioctl kube-inject -f bookinfo-v1.yaml > bookinfo-istio-v1.yaml,比較新舊兩個檔案不難發現,這一工具為每個 Pod 新增了一個名為 proxy 的容器,以此接管流量,給監控和管理打下基礎。
接下來我們執行這一應用: – kubectl create -f bookinfo-istio-v1.yaml:執行注入後的 應用 -kubectl create -f bookinfo-ingress.yaml:建立 Ingress 資源
監控
istio 內建了對 ServiceGraph、Prometheus 以及 Zipkin 的支援,簡單的執行一下kubectl create -f install/kubernetes/addons,就會啟用這幾個服務。注意這幾個服務使用的也都是 Loadbalancer 模式,讀者應根據叢集情況自行修改。
各個服務啟動之後,可以使用負載工具例如 wrk 對 Productpage 頁面進行一段時間的訪問,來模擬工作情況。
Grafana
Grafana 啟動後,我們可以使用服務暴露的地址進行訪問,在其中可以看到如下圖所示的 Dashboard,展示了我們應用中的幾個服務的各種監控資料。
Service Graph
這一個服務提供了兩個入口,一個是 /dotvz,以圖形的方式供服務關係展示,而/graph則提供了 JSON 格式的文件供結構化使用。例如:
{ "nodes": { "details": {}, "productpage": {}, "reviews": {}, "unknown": {} }, "edges": [ { "source": "productpage", "target": "reviews", "labels": { "qps": "0.030416", "version": "v1" } }, { "source": "unknown", "target": "productpage", "labels": { "qps": "0.030416", "version": "v1" } }, { "source": "productpage", "target": "details", "labels": { "qps": "0.030416", "version": "v1" } } ] }
Zipkin
Istio 提供了開箱即用的 Zipkin 跟蹤支援,開啟頁面之後,我們會看到 Zipkin 的查詢頁面,並無特殊內容,就不展開細談了。
文中介紹內容只是很粗淺的入門操作,後續會進一步跟進、挖掘和學習這一系統的其他強大功能。