驗證安裝

依照本指南驗證您的多叢集 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 服務

ZipZip
$ 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

Zip
$ 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

Zip
$ 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 應用程式部署到兩個叢集

ZipZip
$ kubectl apply --context="${CTX_CLUSTER1}" \
    -f @samples/curl/curl.yaml@ -n sample
$ kubectl apply --context="${CTX_CLUSTER2}" \
    -f @samples/curl/curl.yaml@ -n sample

確認 cluster1curl 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

確認 cluster2curl 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 版本應在 v1v2 之間切換

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 版本應在 v1v2 之間切換

Hello version: v2, instance: helloworld-v2-758dd55874-6x4t8
Hello version: v1, instance: helloworld-v1-86f77cd7bd-cpxhv
...

恭喜! 您已成功在多個叢集上安裝並驗證 Istio!

下一步

查看區域負載平衡任務,以了解如何控制跨多叢集網格的流量。

此資訊對您有幫助嗎?
您有任何改進建議嗎?

感謝您的回饋!