開始使用 Istio
開始使用 IBM Cloud® Kubernetes Service 中的管理型 Istio 附加元件。 在這組步驟中,您會部署 BookInfo 範例應用程式,以練習使用 Istio 的幾項服務網狀功能。
開始之前,請檢閱 Istio 附加元件變更記錄,以瞭解版本資訊。
步驟 1:啟用 Istio 附加元件
在群集中設定受管理的 Istio 附加元件。
請登入您的帳戶。 適用的話,請將適當的資源群組設為目標。 設定叢集的環境定義。
-
啟用
istio附加程式。ibmcloud ks cluster addon enable istio --cluster CLUSTER_NAME_OR_ID -
確認受管理的 Istio 附加元件的狀態為
Addon Ready。 請注意,附加程式可能需要幾分鐘才能備妥。ibmcloud ks cluster addon ls --cluster CLUSTER_NAME_OR_ID輸出範例
Name Version Health State Health Status istio 1.29 normal Addon Ready -
您也可以檢查此附加元件的各個組件,以確認「Istio」Pod 是否已部署。
kubectl get pods -n istio-systemkubectl get svc -n istio-system
如需 IBM Cloud Kubernetes Service 中 Istio 的詳細資訊,請參閱 關於受管理的 Istio 附加元件。
步驟 2: 設定 BookInfo 範例應用程式
BookInfo 範例程式包含基本的 Istio 設定,讓您可以立即試用 Istio 的功能。
四個 BookInfo 微服務包括:
productpage會呼叫details和reviews微服務以移入頁面。details包含書籍資訊。ratings包含隨附書籍檢閱的書籍分級資訊。reviews包含書籍檢閱,並呼叫ratings微服務。reviews微服務具有多個版本:v1不會呼叫ratings微服務。v2會呼叫ratings微服務,並將評等顯示為 1 到 5 顆黑色星星。v3會呼叫ratings微服務,並將評等顯示為 1 到 5 顆紅色星星。
此外,BookInfo 應用程式已由 Istio 閘道在公用 IP 位址上公開。 若要查看 BookInfo 架構,請查看 Istio 文件。
-
在叢集裡安裝 BookInfo。
- 請下載最新的 Istio 套件,其中包含 BookInfo 應用程式的設定檔。
curl -L https://istio.io/downloadIstio | ISTIO_VERSION=1.29.5 sh - ``` 2. 導覽至 Istio 套件目錄。 ```sh {: pre} cd istio-1.29.5 ``` 3. Linux 和 macOS 使用者: 將 `istioctl` 用戶端新增至 `PATH` 系統變數。 ```sh {: pre} export PATH=$PWD/bin:$PATH ``` 4. 標示自動 Sidecar 注入的 `default` 名稱空間。 任何部署到 `default` 的新 pod 現在都會自動使用 Envoy proxy sidecar 容器來建立。 ```sh {: pre} kubectl label namespace default istio-injection=enabled ``` 5. 部署 BookInfo 應用程式、閘道及目的地規則。 ```sh {: pre} kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml kubectl apply -f samples/bookinfo/networking/destination-rule-all.yaml ``` 6. 確保 BookInfo 微服務 Pod 是 `Running`。 ```sh {: pre} kubectl get pods ``` ```sh {: screen} NAME READY STATUS RESTARTS AGE details-v1-6865b9b99d-7v9h8 2/2 Running 0 2m productpage-v1-f8c8fb8-tbsz9 2/2 Running 0 2m ratings-v1-77f657f55d-png6j 2/2 Running 0 2m reviews-v1-6b7f6db5c5-fdmbq 2/2 Running 0 2m reviews-v2-7ff5966b99-zflkv 2/2 Running 0 2m reviews-v3-5df889bcff-nlmjp 2/2 Running 0 2m ``` -
取得公開 BookInfo之
istio-ingressgateway負載平衡器的公用位址。- 經典簇
- 將 Istio 輸入 IP 位址設定為環境變數。
export INGRESS_IP=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}') - 將 Istio 輸入埠設定為環境變數。
export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].port}') - 建立使用 Istio Ingress 主機和埠的
GATEWAY_URL環境變數。export GATEWAY_URL=$INGRESS_IP:$INGRESS_PORT
- 將 Istio 輸入 IP 位址設定為環境變數。
- VPC 叢集:建立使用 Istio Ingress 主機名稱的
GATEWAY_URL環境變數。
export GATEWAY_URL=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].hostname}') ``` - 經典簇
-
對
GATEWAY_URL變數進行 Curl 處理,以確認 BookInfo 應用程式正在執行中。200回應表示 BookInfo 應用程式與 Istio 適當地執行中。curl -o /dev/null -s -w "%{http_code}\n" http://${GATEWAY_URL}/productpage -
在瀏覽器中檢視 BookInfo 網頁。
Mac OS 或 Linux
open http://$GATEWAY_URL/productpageWindows
start http://$GATEWAY_URL/productpage -
嘗試多次重新整理頁面。 不同版本的檢閱區段循環式 (
reviews的v1)、黑色星號 (v2) 及紅色星號 (v3)。
如需更多關於 Istio 中路由工作方式的資訊,請參閱 瞭解所發生的事情。
步驟 3: 模擬 BookInfo 的逐步實施
若要模擬應用程式的釋出,您可以執行 BookInfo 的 reviews 微服務的分階段推出 v3。
當您測試完應用程式並準備開始引導線上流量之後,您可以透過 Istio 逐步執行推出。 例如,您可以先將 v3 釋放至 10% 的使用者,然後再釋放至 20% 的使用者,依此類推。
-
配置虛擬服務,以將 0% 的資料流量配送至
v1,將 90% 的資料流量配送至v2,並將 10% 的資料流量配送至reviews的v3。apiVersion: networking.istio.io/v1beta1 kind: VirtualService metadata: name: reviews spec: hosts: - reviews http: - route: - destination: host: reviews subset: v1 weight: 0 - destination: host: reviews subset: v2 weight: 90 - destination: host: reviews subset: v3 weight: 10kubectl apply -f <filename>.yaml -
在 Mac OS 或 Linux 上執行
open http://$GATEWAY_URL/productpage,或在 Windows 上執行start http://$GATEWAY_URL/productpage,在瀏覽器中檢視 BookInfo 網頁。 -
嘗試多次重新整理頁面。 請注意,不再顯示沒有星號 (
v1) 的頁面,且大部分頁面重新整理會顯示黑色星號 (v2)。只有很少顯示含有紅色星號 (v3) 的頁面。 -
變更資料流量配送,以便所有資料流量僅傳送至
v3。 請注意,在實際實務範例中,您可能會透過將資料流量配送先變更為 80:20,然後變更為 70:30,以緩慢推出版本變更,直到所有資料流量都僅遞送至最新版本為止。- 編輯
reviews虛擬服務的配置檔。
kubectl edit VirtualService reviews ``` 2. 將 `v2` 的 `weight` 變更為 `0`,並將 `v3` 的 `weight` 變更為 `100`。 3. 儲存並關閉檔案。 - 編輯
-
請嘗試多次重新整理 BookInfo 頁面。 請注意,不再顯示含有黑色星星的頁面 (
v2),只會顯示含有紅色星星的頁面 (v3)。 -
如果您已啟用特使存取日誌: 請驗證在您變更檢閱
VirtualService的 YAML 檔案之後的時間內,對v2的要求沒有日誌存在。kubectl logs -l app=reviews,version=v2 -c istio-proxy
步驟 4: 使用 IBM Cloud Monitoring 監視 BookInfo
使用 Monitoring 預先定義的 Istio 面板之一來監控您的 BookInfo 微服務。
若要將監視代理程式部署至叢集,請完成下列步驟。
-
在 Monitoring 主控台中,按一下您所佈建實例的 開啟儀表板。
-
在 Monitoring 使用者介面中,按一下 新增儀表板。
-
搜尋「
Istio」,並選取其中一個「Monitoring」預設的「Istio」儀表板。
如需進一步了解如何參考指標與儀表板、監控 Istio 內部元件,以及監控 Istio 的 A/B 測試部署與金絲雀部署,請參閱 如何監控 Istio —— Kubernetes 的服務網格 這篇部落格文章。
步驟 5: 啟用 mTLS 來保護叢集內資料流量
啟用命名空間中工作負載的加密功能,以在群集內部實現相互 TLS ( mTLS )。 在叢集裡 Pod 之間由 Envoy 遞送的資料流量會使用 TLS 進行加密。 mTLS 的憑證管理由 Istio 進行處理。 如需詳細資訊,請參閱 Istio mutual TLS 文件。
- 建立名為
default.yaml的鑑別原則檔案。 此政策適用於命名空間範圍,並設定服務網格中的工作負載僅接受使用 TLS 加密的請求。 請注意,此處未包含任何targets規格,因為此政策適用於此命名空間中網格內的全部服務。apiVersion: "security.istio.io/v1beta1" kind: "PeerAuthentication" metadata: name: "default" spec: mtls: mode: STRICT - 將鑑別原則套用至名稱空間。
kubectl apply -f default.yaml -n NAMESPACE - 建立一個名為
destination-mtls.yaml的目的地規則檔案。 此原則可設定命名空間中的服務網狀工作負載使用 TLS 傳送流量。 請注意,host: *.local萬用字元會將此目的地規則套用於網格中的所有服務。apiVersion: "networking.istio.io/v1beta1" kind: "DestinationRule" metadata: name: "destination-mtls" spec: host: "*.local" trafficPolicy: tls: mode: ISTIO_MUTUAL - 套用目的地規則。
kubectl apply -f destination-mtls.yaml -n NAMESPACE - 若要為其他命名空間中的服務網格工作負載啟用 mTLS,請在每個命名空間中重複執行這些步驟。
此外,出於非鑑別原因(例如,將資料流量遞送到不同版本的服務),也會使用目的地規則。 為服務建立的任何目的地規則還必須包含設定為 mode: ISTIO_MUTUAL 的相同 TLS 區塊。 此區塊會封鎖規則置換在此部分中配置的網格範圍的 mTLS 設定。