验证安装
遵循本指南以验证您的多集群 Istio 安装是否正常工作。
在继续之前,请确保已完成开始之前中的步骤,以及选择并遵循其中一个多集群安装指南。
在本指南中,我们将把 HelloWorld
应用程序 V1
部署到 cluster1
,并将 V2
部署到 cluster2
。在收到请求后,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!
下一步
查看 区域负载均衡任务,了解如何控制多集群网格中的流量。