验证安装
遵循本指南以验证您的多集群 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!
下一步
查看 区域负载均衡任务,了解如何控制多集群网格中的流量。