验证安装结果

    继续操作之前,请确保完成了准备工作中的步骤。

    在本指南中,我们将在 cluster1 安装 V1 版的 HelloWorld 应用程序, 在 cluster2 安装 V2 版的 HelloWorld 应用程序。 当处理一个请求时,HelloWorld 会在响应消息中包含它自身的版本号。

    我们也会在两个集群中均部署 Sleep 容器。 这些 Pod 将被用作客户端(source),发送请求给 HelloWorld。 最后,通过收集这些流量数据,我们将能观测并识别出是那个集群处理了请求。

    为了支持从任意集群中调用 HelloWorld 服务,每个集群的 DNS 解析必须可用 (详细信息,参见)。 我们通过在网格的每一个集群中部署 HelloWorld 服务,来解决这个问题,

    首先,在每个集群中创建命名空间 sample

    为命名空间 sample 开启 sidecar 自动注入:

    1. $ kubectl label --context="${CTX_CLUSTER1}" namespace sample \
    2. istio-injection=enabled
    3. $ kubectl label --context="${CTX_CLUSTER2}" namespace sample \
    4. istio-injection=enabled

    在每个集群中创建 HelloWorld 服务:

    Zip

    1. $ kubectl apply --context="${CTX_CLUSTER1}" \
    2. -f @samples/helloworld/helloworld.yaml@ \
    3. -l service=helloworld -n sample
    4. -f @samples/helloworld/helloworld.yaml@ \
    5. -l service=helloworld -n sample

    部署 版的 HelloWorld

    把应用 helloworld-v1 部署到 cluster1

    1. $ kubectl apply --context="${CTX_CLUSTER1}" \
    2. -f @samples/helloworld/helloworld.yaml@ \
    3. -l version=v1 -n sample

    确认 helloworld-v1 pod 的状态:

    等待 helloworld-v1 的状态最终变为 Running 状态:

    把应用 helloworld-v2 部署到 cluster2

    1. $ kubectl apply --context="${CTX_CLUSTER2}" \
    2. -f @samples/helloworld/helloworld.yaml@ \
    3. -l version=v2 -n sample

    确认 helloworld-v2 pod 的状态:

    1. $ kubectl get pod --context="${CTX_CLUSTER2}" -n sample -l app=helloworld
    2. NAME READY STATUS RESTARTS AGE
    3. helloworld-v2-758dd55874-6x4t8 2/2 Running 0 40s

    等待 helloworld-v2 的状态最终变为 Running 状态:

    部署 Sleep

    把应用 Sleep 部署到每个集群:

    Zip

    1. $ kubectl apply --context="${CTX_CLUSTER1}" \
    2. -f @samples/sleep/sleep.yaml@ -n sample
    3. -f @samples/sleep/sleep.yaml@ -n sample

    确认 cluster1Sleep 的状态:

    确认 cluster2Sleep 的状态:

    1. $ kubectl get pod --context="${CTX_CLUSTER2}" -n sample -l app=sleep
    2. NAME READY STATUS RESTARTS AGE
    3. sleep-754684654f-dzl9j 2/2 Running 0 5s

    等待 Sleep 的状态最终变为 Running 状态:

    要验证跨集群负载均衡是否按预期工作,需要用 Sleep pod 重复调用服务 HelloWorld。 为了确认负载均衡按预期工作,需要从所有集群调用服务 HelloWorld

    cluster1 中的 Sleep pod 发送请求给服务 HelloWorld

    1. $ kubectl exec --context="${CTX_CLUSTER1}" -n sample -c sleep \
    2. "$(kubectl get pod --context="${CTX_CLUSTER1}" -n sample -l \
    3. app=sleep -o jsonpath='{.items[0].metadata.name}')" \
    4. -- curl helloworld.sample:5000/hello

    重复几次这个请求,验证 HelloWorld 的版本在 v1v2 之间切换:

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

    现在,用 cluster2 中的 Sleep pod 重复此过程:

    重复几次这个请求,验证 HelloWorld 的版本在 v1v2 之间切换:

    1. Hello version: v2, instance: helloworld-v2-758dd55874-6x4t8

    恭喜! 你已成功的在多集群环境中安装、并验证了 Istio!

    后续步骤

    查看地域性负载均衡任务, 了解怎么跨多集群网格控制流量。