基於 K8S 集群安裝部署 istio-1.2.4


使用雲平台可以為組織提供豐富的好處。然而,不可否認的是,采用雲可能會給 DevOps 團隊帶來壓力。開發人員必須使用微服務以滿足應用的可移植性,同時運營商管理了極其龐大的混合和多雲部署。Istio 允許您連接、保護、控制和觀測服務。

在較高的層次上,Istio 有助於降低這些部署的復雜性,並減輕開發團隊的壓力。它是一個完全開源的服務網格,可以透明地分層到現有的分布式應用程序上。它也是一個平台,包括允許它集成到任何日志記錄平台、遙測或策略系統的 API。Istio 的多樣化功能集使您能夠成功高效地運行分布式微服務架構,並提供保護、連接和監控微服務的統一方法。

一、安裝

1.1 安裝 helm

  1. 下載二進制可執行文件,helm-releases
  2. 解壓壓縮包 tar -zxvf helm-v2.0.0-linux-amd64.tgz
  3. 找到 helm 文件,移動至 PATH 路徑上,mv linux-amd64/helm /usr/local/bin/helm

1.2 安裝 istio

# 下載軟件包並解壓
$ curl -L https://git.io/getLatestIstio | ISTIO_VERSION=1.2.4 sh -

# 進入文件夾
cd istio-1.2.4

# 添加 istioctl 路徑到環境變量 PATH,或將其移動至 /usr/local/bin 下
sudo mv bin/istioctl /usr/local/bin

# 創建命名空間
kubectl create namespace istio-system

# 使用 kubectl apply 安裝所有的 Istio CRD
helm template install/kubernetes/helm/istio-init --name istio-init --namespace istio-system | kubectl apply -f -

# 根據實際情況配置更新 values.yaml
vi install/kubernetes/helm/istio/values.yaml

# 部署 Istio 的核心組件
helm template install/kubernetes/helm/istio --name istio --namespace istio-system | kubectl apply -f -

1.2 驗證安裝

1、確保 istioctl 可正常工作

istioctl version

# 輸出如下:
client version: 1.2.4
citadel version: 1.2.4
egressgateway version: 94746ccd404a8e056483dd02e4e478097b950da6-dirty
galley version: 1.2.4
ingressgateway version: 94746ccd404a8e056483dd02e4e478097b950da6-dirty
pilot version: 1.2.4
policy version: 1.2.4
sidecar-injector version: 1.2.4
telemetry version: 1.2.4

2、確保所有 k8s 服務都已以部署並都分配到集群 ip 地址(jaeger-agent) 除外

kubectl get svc -n istio-system

結果如下

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
istio-citadel ClusterIP 10.101.78.177 <none> 8060/TCP,15014/TCP 2m28s
istio-galley ClusterIP 10.100.76.11 <none> 443/TCP,15014/TCP,9901/TCP 2m29s
istio-ingressgateway LoadBalancer 10.106.32.13 <pending> 15020:31401/TCP,80:31380/TCP,443:31390/TCP,31400:31400/TCP,15029:31717/TCP,15030:30028/TCP,15031:31428/TCP,15032:30956/TCP,15443:30614/TCP 2m29s
istio-pilot ClusterIP 10.97.35.129 <none> 15010/TCP,15011/TCP,8080/TCP,15014/TCP 2m28s
istio-policy ClusterIP 10.99.93.221 <none> 9091/TCP,15004/TCP,15014/TCP 2m29s
istio-sidecar-injector ClusterIP 10.107.243.186 <none> 443/TCP 2m28s
istio-telemetry ClusterIP 10.96.117.90 <none> 9091/TCP,15004/TCP,15014/TCP,42422/TCP 2m29s
prometheus ClusterIP 10.96.219.44 <none> 9090/TCP 2m28s

3、 確保相關 k8s pod 都已部署,且狀態為 running

```bash
kubectl get pods -n istio-system

結果如下

NAME READY STATUS RESTARTS AGE
istio-citadel-7fff5797f-fckss 1/1 Running 0 16m
istio-cleanup-secrets-1.2.4-hz2rm 0/1 Completed 0 16m
istio-galley-74d4d7b4db-wnjds 1/1 Running 0 16m
istio-ingressgateway-686854b899-g4z9k 1/1 Running 0 16m
istio-init-crd-10-hhll9 0/1 Completed 0 30m
istio-init-crd-11-ktb9j 0/1 Completed 0 30m
istio-init-crd-12-vrrr2 0/1 Completed 0 30m
istio-pilot-7fdcbd6f55-rw9bm 2/2 Running 0 16m
istio-policy-79f647bb6-4fntc 2/2 Running 3 16m
istio-security-post-install-1.2.4-lr4nk 0/1 Completed 0 16m
istio-sidecar-injector-578bfd76d7-gtsdb 1/1 Running 0 16m
istio-telemetry-cb4486d94-j9gqf 2/2 Running 4 16m
prometheus-7d7b9f7844-kgtjn 1/1 Running 0 16m

二、 部署應用

以官方 Bookinfo Application 為例,它由四個單獨的微服務構成。這個應用模仿在線書店的一個分類,顯示一本書的信息。

2.1 Bookinfo Application 概述

Bookinfo 應用分為四個單獨的微服務:

  1. productpage :productpage 微服務會調用 details 和 reviews 兩個微服務,用來生成頁面。
  2. details :這個微服務包含了書籍的信息。
  3. reviews :這個微服務包含了書籍相關的評論。它還會調用 ratings 微服務。
  4. ratings :ratings 微服務中包含了由書籍評價組成的評級信息。

reviews 服務有3個版本

  1. v1 版本不會調用 ratings 服務。
  2. v2 版本會調用 ratings 服務,並使用 1 到 5 個黑色星形圖標來顯示評分信息。
  3. v3 版本會調用 ratings 服務,並使用 1 到 5 個紅色星形圖標來顯示評分信息。

Istio 注入之前的 Bookinfo 應用拓撲結構如下:

Bookinfo 由多個微服務組成,各自用不同的語言編寫。這些服務對 Istio 並無依賴,但是構成了一個有代表性的服務網格的例子:它由多個服務、多個語言構成,並且 reviews 服務具有多個版本。

2.2 部署 Bookinfo Application

要在 Istio 中運行這一應用,無需對應用自身做出任何改變。我們只要簡單的在 Istio 環境中對服務進行配置和運行,具體一點說就是把 Envoy sidecar 注入到每個服務之中。這個過程所需的具體命令和配置方法由運行時環境決定,而部署結果較為一致,如下圖所示:

所有的微服務都和 Envoy sidecar 集成在一起,被集成服務所有的出入流量都被 sidecar 所劫持,這樣就為外部控制准備了所需的 Hook,然后就可以利用 Istio 控制平面為應用提供服務路由、遙測數據收集以及策略實施等功能。

1、 創建命名空間用以部署 Bookinfo Application

# 創建命名空間
kubectl create ns bookinfo-application

2、 為這個命名空間大上 istio-injection=enabled 標簽

kubectl label namespace bookinfo-application istio-injection=enabled

3、 部署 bookinfo application

kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml -n bookinfo-application

安裝過程時長視網速而定,請耐心等待以下。

4、確認所有的服務和 Pod 都已經正確的定義和啟動

$ kubectl get services -n bookinfo-application
NAME          TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
details       ClusterIP   10.102.215.67    `<none>`        9080/TCP   2m58s
productpage   ClusterIP   10.109.215.4     `<none>`        9080/TCP   2m57s
ratings       ClusterIP   10.107.143.194   `<none>`        9080/TCP   2m58s
reviews       ClusterIP   10.96.249.233    `<none>`        9080/TCP   2m57s

#---

$ kubectl get pods -n bookinfo-application
NAME                              READY   STATUS    RESTARTS   AGE
details-v1-74f858558f-p8nwz       2/2     Running   0          4m24s
productpage-v1-8554d58bff-cgx74   2/2     Running   0          4m24s
ratings-v1-7855f5bcb9-tt5zn       2/2     Running   0          4m24s
reviews-v1-59fd8b965b-jvqvs       2/2     Running   0          4m24s
reviews-v2-d6cfdb7d6-zxk9w        2/2     Running   0          4m24s
reviews-v3-75699b5cfb-28dvd       2/2     Running   0          4m24s

要確認 Bookinfo 應用程序正在運行,請通過某個 pod 中的 curl 命令向其發送請求,例如來自 ratings:

kubectl exec -it ratings-v1-7855f5bcb9-tt5zn -n bookinfo-application -c ratings  -- curl productpage:9080/productpage | grep "<title>.*</title>"

2.3 暴露服務入口

如果沒有外部負載均衡可以將名為 istio-ingressgateway 的 service 類型修改為 NodePort 類型,隨后通過 istio-ingressgateway 所在的服務器IP地址+端口的形式訪問服務。

istio 的 Gateway 允許外部流量進入 Istio 服務網,與 K8S 的 ingress 直接指定路由不同,istio 的路由規則不在 gateway 中指定,需要通過 VirtualService 單獨配置。執行下面命令創建 gateway 和 virtualservice。

kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml -n bookinfo-application

2.4 瀏覽器訪問 Bookinfo Application

可以在瀏覽器打開 http://NodeIp:NodePort/productpage以瀏覽 Bookinfo Application 頁面,如果刷新幾次應用的頁面,就會看到 productpage 頁面中會隨機展示 reviews 服務的不同版本的效果(紅色、黑色的星形或者沒有顯示)。reviews 服務出現這種情況是因為我們還沒有使用 Istio 來控制版本的路由。

三、應用缺省目標規則

在使用 Istio 控制 Bookinfo 版本路由之前,你需要在目標規則中定義好可用的版本,命名為 subsets 。

kubectl apply -n bookinfo-application -f samples/bookinfo/networking/destination-rule-all.yaml

部署完成后可以通過以命令檢查詳情

kubectl get destinationrules -A
NAMESPACE              NAME              HOST                                             AGE
bookinfo-application   details           details                                          2m54s
bookinfo-application   productpage       productpage                                      2m54s
bookinfo-application   ratings           ratings                                          2m54s
bookinfo-application   reviews           reviews                                          2m54s

可以看到我們成功創建了 4 個 destinationrule

更多有關流量管理的信息,可以查閱文檔 https://istio.io/

四、應用性能監控

istio 默認自帶相關監控組件(如:kiali)版本相對可能會稍有滯后,如果要安裝最新版可以在安裝時前配置不安裝相關組建,待istio 安裝完成后在單獨安裝監控組建。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM