1. 程式人生 > >Istio,Kubernetes 的微服務支援_Kubernetes中文社群

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 的查詢頁面,並無特殊內容,就不展開細談了。

文中介紹內容只是很粗淺的入門操作,後續會進一步跟進、挖掘和學習這一系統的其他強大功能。