驗證安裝
依照本指南驗證您的多叢集 Istio 安裝是否正常運作。
在繼續之前,請務必完成開始之前下的步驟,並選擇並遵循一個多叢集安裝指南。
在本指南中,我們將在 cluster1
上部署 HelloWorld
應用程式 V1
,並在 cluster2
上部署 V2
。收到請求後,HelloWorld
將在其回應中包含其版本。
我們還會在兩個叢集上部署 curl
容器。我們將使用這些 Pod 作為 HelloWorld
服務的請求來源,模擬網格內流量。最後,在產生流量後,我們將觀察哪個叢集接收了請求。
部署 HelloWorld
服務
為了使 HelloWorld
服務可從任何叢集呼叫,DNS 查詢必須在每個叢集中成功(詳細資訊請參閱部署模型)。我們將透過將 HelloWorld
服務部署到網格中的每個叢集來解決此問題。
首先,在每個叢集中建立 sample
命名空間
$ kubectl create --context="${CTX_CLUSTER1}" namespace sample
$ kubectl create --context="${CTX_CLUSTER2}" namespace sample
為 sample
命名空間啟用自動 sidecar 注入
$ kubectl label --context="${CTX_CLUSTER1}" namespace sample \
istio-injection=enabled
$ kubectl label --context="${CTX_CLUSTER2}" namespace sample \
istio-injection=enabled
在兩個叢集中建立 HelloWorld
服務
$ kubectl apply --context="${CTX_CLUSTER1}" \
-f @samples/helloworld/helloworld.yaml@ \
-l service=helloworld -n sample
$ kubectl apply --context="${CTX_CLUSTER2}" \
-f @samples/helloworld/helloworld.yaml@ \
-l service=helloworld -n sample
部署 HelloWorld
V1
將 helloworld-v1
應用程式部署到 cluster1
$ kubectl apply --context="${CTX_CLUSTER1}" \
-f @samples/helloworld/helloworld.yaml@ \
-l version=v1 -n sample
確認 helloworld-v1
Pod 狀態
$ kubectl get pod --context="${CTX_CLUSTER1}" -n sample -l app=helloworld
NAME READY STATUS RESTARTS AGE
helloworld-v1-86f77cd7bd-cpxhv 2/2 Running 0 40s
等待直到 helloworld-v1
的狀態為 Running
。
部署 HelloWorld
V2
將 helloworld-v2
應用程式部署到 cluster2
$ kubectl apply --context="${CTX_CLUSTER2}" \
-f @samples/helloworld/helloworld.yaml@ \
-l version=v2 -n sample
確認 helloworld-v2
Pod 狀態
$ kubectl get pod --context="${CTX_CLUSTER2}" -n sample -l app=helloworld
NAME READY STATUS RESTARTS AGE
helloworld-v2-758dd55874-6x4t8 2/2 Running 0 40s
等待直到 helloworld-v2
的狀態為 Running
。
部署 curl
將 curl
應用程式部署到兩個叢集
$ kubectl apply --context="${CTX_CLUSTER1}" \
-f @samples/curl/curl.yaml@ -n sample
$ kubectl apply --context="${CTX_CLUSTER2}" \
-f @samples/curl/curl.yaml@ -n sample
確認 cluster1
上 curl
Pod 的狀態
$ kubectl get pod --context="${CTX_CLUSTER1}" -n sample -l app=curl
NAME READY STATUS RESTARTS AGE
curl-754684654f-n6bzf 2/2 Running 0 5s
等待直到 curl
Pod 的狀態為 Running
。
確認 cluster2
上 curl
Pod 的狀態
$ kubectl get pod --context="${CTX_CLUSTER2}" -n sample -l app=curl
NAME READY STATUS RESTARTS AGE
curl-754684654f-dzl9j 2/2 Running 0 5s
等待直到 curl
Pod 的狀態為 Running
。
驗證跨叢集流量
為了驗證跨叢集負載平衡是否如預期運作,請使用 curl
Pod 多次呼叫 HelloWorld
服務。為了確保負載平衡正常運作,請從部署中的所有叢集呼叫 HelloWorld
服務。
從 cluster1
上的 curl
Pod 向 HelloWorld
服務發送一個請求
$ kubectl exec --context="${CTX_CLUSTER1}" -n sample -c curl \
"$(kubectl get pod --context="${CTX_CLUSTER1}" -n sample -l \
app=curl -o jsonpath='{.items[0].metadata.name}')" \
-- curl -sS helloworld.sample:5000/hello
重複此請求數次,並驗證 HelloWorld
版本應在 v1
和 v2
之間切換
Hello version: v2, instance: helloworld-v2-758dd55874-6x4t8
Hello version: v1, instance: helloworld-v1-86f77cd7bd-cpxhv
...
現在從 cluster2
上的 curl
Pod 重複此過程
$ kubectl exec --context="${CTX_CLUSTER2}" -n sample -c curl \
"$(kubectl get pod --context="${CTX_CLUSTER2}" -n sample -l \
app=curl -o jsonpath='{.items[0].metadata.name}')" \
-- curl -sS helloworld.sample:5000/hello
重複此請求數次,並驗證 HelloWorld
版本應在 v1
和 v2
之間切換
Hello version: v2, instance: helloworld-v2-758dd55874-6x4t8
Hello version: v1, instance: helloworld-v1-86f77cd7bd-cpxhv
...
恭喜! 您已成功在多個叢集上安裝並驗證 Istio!
下一步
查看區域負載平衡任務,以了解如何控制跨多叢集網格的流量。