天天看點

istio(1) - 安裝測試

1. istio 版本選擇

- 最新版 istio,參考 istio官網;

- 曆史版 istio,參考 istio 曆史版本歸檔檔案;

- kubernetes 與 istio版本适配

最新版 (1.4.3), 由下圖可知, 其支援kubernetes 1.13, 1.14, 1.15 三個版本.
istio(1) - 安裝測試
曆史版 (1.1.9), 由下圖可知, 其支援kubernetes 1.11, 1.12, 1.13 三個版本.
istio(1) - 安裝測試

由于本地kubernetes平台是1.11版本的,故本文以 istio 曆史版本歸檔檔案 下v1.1為例.如果你的k8s不是1.11, 請在 istio 曆史版本歸檔檔案 & istio官網 站點中,找到合适的istio版本.

istio(1) - 安裝測試

2. 準備工作

istio(1) - 安裝測試

2.1 安裝方式

點選 GET STARTED ,點選左側菜單:install 展開,選擇 "Customizable Install Helm"
istio(1) - 安裝測試

2.2 安裝版本高于2.10 的Helm用戶端. (如已經安裝,則忽略)

略;           

複制

2.3 下載下傳istio軟體包

2.3.1 登入伺服器shell,執行以下語句開始下載下傳 istio;

curl -L https://git.io/getLatestIstio | ISTIO_VERSION=1.1.9 sh -           

複制

2.4 環境

2.4.1 下載下傳完後切換到istio目錄下

cd istio-1.1.9           

複制

2.4.2 将istioctl 用戶端加入環境變量

export PATH=$PWD/bin:$PATH           

複制

2.4.3 添加Istio發行版存儲庫 , 使用Istio發行版Helm圖表倉庫 , 如下

helm repo add istio.io https://storage.googleapis.com/istio-release/releases/1.1.9/charts/           

複制

3 安裝

3.1 為istio-system元件建立一個名稱空間

kubectl create namespace istio-system           

複制

3.2 使用安裝所有Istio 自定義資源定義 (CRD)kubectl apply,然後等待幾秒鐘以在Kubernetes API伺服器中送出CRD

helm template install/kubernetes/helm/istio-init --name istio-init --namespace istio-system | kubectl apply -f -           

複制

3.3 選擇一個配置檔案 ,然後渲染并應用與您選擇的檔案相對應的Istio核心元件。建議将預設配置檔案用于生産部署

helm template install/kubernetes/helm/istio --name istio --namespace istio-system | kubectl apply -f -           

複制

4 驗證安裝

4.1 檢視service

kubectl get svc -n istio-system           

複制

istio(1) - 安裝測試

4.2 檢視pod

kubectl get pods -n istio-system           

複制

istio(1) - 安裝測試

5 bookinfo demo部署

要確定目前目錄位于istio軟體包根目錄下;

5.1 使用以下kubectl指令部署應用程式,并使用 istioctl 将sidecar注入進去;

kubectl apply -f <(istioctl kube-inject -f samples/bookinfo/platform/kube/bookinfo.yaml)           

複制

5.2 确認所有服務和pod均已正确定義并正在運作

kubectl get services           

複制

istio(1) - 安裝測試
kubectl get pods           

複制

istio(1) - 安裝測試

5.3 确認Bookinfo應用程式正在運作,請通過curl某個Pod中的指令向其發送請求,例如ratings

kubectl exec -it $(kubectl get pod -l app=ratings -o jsonpath='{.items[0].metadata.name}') -c ratings -- curl productpage:9080/productpage | grep -o "<title>.*</title>"           

複制

5.4 确定入口IP和端口

5.4.1 定義應用程式的入口網關
kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml           

複制

5.4.2 确認網關已建立
kubectl get gateway           

複制

istio(1) - 安裝測試

5.5 檢視入口IP和端口

5.5.1 檢視入口端口
kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].nodePort}'           

複制

5.5.2 檢視入口IP
kubectl get po -l istio=ingressgateway -n istio-system -o jsonpath='{.items[0].status.hostIP}'           

複制

5.6 使用浏覽器通路入口服務

按照 ip : port / service ,在浏覽器進行通路(ip 為 5.5.2顯示的 ip位址 , port 為5.5.1顯示的端口)

例如 : http://192.168.254.147:31380/productpage

istio(1) - 安裝測試

6 bookinfo 流量管理

6.1 運作以下指令為Bookinfo服務建立預設目标規則

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

複制

使用

kubectl get destinationrules -o yaml

指令顯示目标規則;

6.2 多通路幾次 5.6.2 中的位址,會發現有幾率通路到不同版本上去

評級沒有星星

評級有星星

6.3 運作以下指令以應用虛拟服務,将流量定向發送到一個版本(下發規則)

kubectl apply -f samples/bookinfo/networking/virtual-service-all-v1.yaml           

複制

使用以下指令檢視定義的路由

kubectl get virtualservices -o yaml           

複制

在浏覽器中打開Bookinfo網站,無論重新整理多少次,頁面的評論部分均不會顯示星級。這是因為我們将Istio配置為将評論服務的所有流量路由到該版本 reviews:v1, 而該服務的該版本無法通路星級服務。

6.4 運作以下指令以啟用基于使用者的路由

kubectl apply -f samples/bookinfo/networking/virtual-service-reviews-test-v2.yaml           

複制

使用以下指令檢視定義的路由

kubectl get virtualservices -o yaml           

複制

在/productpageBookinfo應用的上,以使用者身份登入jason,星星又出現了.

istio(1) - 安裝測試

已成功配置Istio以根據使用者身份路由流量!