5.8 KiB
| title | description | weight | icon | keywords | test | owner | ||
|---|---|---|---|---|---|---|---|---|
| 验证安装结果 | 验证 Istio 已成功安装到多集群环境中。 | 50 | setup |
|
yes | istio/wg-environments-maintainers |
按照本指南,验证在多集群环境中安装的 Istio 可以正常工作。
继续操作之前,请确保完成了准备工作中的步骤。
在本指南中,我们将在 cluster1 安装 V1 版的 HelloWorld 应用程序,
在 cluster2 安装 V2 版的 HelloWorld 应用程序。
当处理一个请求时,HelloWorld 会在响应消息中包含它自身的版本号。
我们也会在两个集群中均部署 Sleep 容器。
这些 Pod 将被用作客户端(source),发送请求给 HelloWorld。
最后,通过收集这些流量数据,我们将能观测并识别出是那个集群处理了请求。
部署服务 HelloWorld
为了支持从任意集群中调用 HelloWorld 服务,每个集群的 DNS 解析必须可用
(详细信息,参见部署模型)。
我们通过在网格的每一个集群中部署 HelloWorld 服务,来解决这个问题,
首先,在每个集群中创建命名空间 sample:
{{< text bash >}}
kubectl create --context="{CTX_CLUSTER1}" namespace sample
kubectl create --context="{CTX_CLUSTER2}" namespace sample
{{< /text >}}
为命名空间 sample 开启 sidecar 自动注入:
{{< text bash >}}
kubectl label --context="{CTX_CLUSTER1}" namespace sample
istio-injection=enabled
kubectl label --context="{CTX_CLUSTER2}" namespace sample
istio-injection=enabled
{{< /text >}}
在每个集群中创建 HelloWorld 服务:
{{< text bash >}}
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
{{< /text >}}
部署 V1 版的 HelloWorld
把应用 helloworld-v1 部署到 cluster1:
{{< text bash >}}
kubectl apply --context="{CTX_CLUSTER1}"
-f @samples/helloworld/helloworld.yaml@
-l version=v1 -n sample
{{< /text >}}
确认 helloworld-v1 pod 的状态:
{{< text bash >}}
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
{{< /text >}}
等待 helloworld-v1 的状态最终变为 Running 状态:
部署 V2 版的 HelloWorld
把应用 helloworld-v2 部署到 cluster2:
{{< text bash >}}
kubectl apply --context="{CTX_CLUSTER2}"
-f @samples/helloworld/helloworld.yaml@
-l version=v2 -n sample
{{< /text >}}
确认 helloworld-v2 pod 的状态:
{{< text bash >}}
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
{{< /text >}}
等待 helloworld-v2 的状态最终变为 Running 状态:
部署 Sleep
把应用 Sleep 部署到每个集群:
{{< text bash >}}
kubectl apply --context="{CTX_CLUSTER1}"
-f @samples/sleep/sleep.yaml@ -n sample
kubectl apply --context="{CTX_CLUSTER2}"
-f @samples/sleep/sleep.yaml@ -n sample
{{< /text >}}
确认 cluster1 上 Sleep 的状态:
{{< text bash >}}
kubectl get pod --context="{CTX_CLUSTER1}" -n sample -l app=sleep
NAME READY STATUS RESTARTS AGE
sleep-754684654f-n6bzf 2/2 Running 0 5s
{{< /text >}}
等待 Sleep 的状态最终变为 Running 状态:
确认 cluster2 上 Sleep 的状态:
{{< text bash >}}
kubectl get pod --context="{CTX_CLUSTER2}" -n sample -l app=sleep
NAME READY STATUS RESTARTS AGE
sleep-754684654f-dzl9j 2/2 Running 0 5s
{{< /text >}}
等待 Sleep 的状态最终变为 Running 状态:
验证跨集群流量
要验证跨集群负载均衡是否按预期工作,需要用 Sleep pod 重复调用服务 HelloWorld。
为了确认负载均衡按预期工作,需要从所有集群调用服务 HelloWorld。
从 cluster1 中的 Sleep pod 发送请求给服务 HelloWorld:
{{< text bash >}}
kubectl exec --context="{CTX_CLUSTER1}" -n sample -c sleep
"(kubectl get pod --context="{CTX_CLUSTER1}" -n sample -l
app=sleep -o jsonpath='{.items[0].metadata.name}')"
-- curl helloworld.sample:5000/hello
{{< /text >}}
重复几次这个请求,验证 HelloWorld 的版本在 v1 和 v2 之间切换:
{{< text plain >}} Hello version: v2, instance: helloworld-v2-758dd55874-6x4t8 Hello version: v1, instance: helloworld-v1-86f77cd7bd-cpxhv ... {{< /text >}}
现在,用 cluster2 中的 Sleep pod 重复此过程:
{{< text bash >}}
kubectl exec --context="{CTX_CLUSTER2}" -n sample -c sleep
"(kubectl get pod --context="{CTX_CLUSTER2}" -n sample -l
app=sleep -o jsonpath='{.items[0].metadata.name}')"
-- curl helloworld.sample:5000/hello
{{< /text >}}
重复几次这个请求,验证 HelloWorld 的版本在 v1 和 v2 之间切换:
{{< text plain >}} Hello version: v2, instance: helloworld-v2-758dd55874-6x4t8 Hello version: v1, instance: helloworld-v1-86f77cd7bd-cpxhv ... {{< /text >}}
恭喜! 您已成功的在多集群环境中安装、并验证了 Istio!
后续步骤
查看地域性负载均衡任务, 了解怎么跨多集群网格控制流量。