验证安装

遵循本指南以验证您的多集群 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

确认 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!

下一步

查看 区域负载均衡任务,了解如何控制多集群网格中的流量。

这些信息是否有用?
您对改进有任何建议吗?

感谢您的反馈!