地域故障转移

    在开始之前,一定要完成的步骤 开始之前

    在此任务中,您将使用 sleep pod 在 region1.zone1 作为请求源发送到 helloWorld 服务。然后,您将触发故障,这些故障将按照以下顺序导致不同地域之间的故障转移:

    地域故障转移顺序

    在内部,Envoy 优先级用于控制故障转移。 这些优先级将按照以下方式分配来自 sleep Pod (在 region1 zone1) 的流量:

    应用一个 DestinationRule 配置如下:

    • 用于 helloWorld 服务。这是故障转移正常运行所必须的。特别是,它可以配置 Sidecar 代理以知道服务的 Endpoint 何时不正常,最终触发故障转移到下一个地域。
    • 连接池 强制每个HTTP请求使用一个新连接的策略。该任务利用 Envoy 的 功能强制将故障转移到下一个位置。一旦逐出,Envoy 将拒绝所有新的请求。由于每个请求都使用一个新连接,这将导致在耗尽后立即进行故障转移。此配置仅用于演示目的。

    验证流量保持在 region1.zone1

    sleep Pod 调用 helloWorld 服务:

    1. "$(kubectl get pod --context="${CTX_R1_Z1}" -n sample -l \
    2. app=sleep -o jsonpath='{.items[0].metadata.name}')" \
    3. -- curl -sSL helloworld.sample:5000/hello
    4. Hello version: region1.zone1, instance: helloworld-region1.zone1-86f77cd7b-cpxhv

    验证响应中的 versionregion1.zone

    重复几次,验证响应总是相同的。

    接下来, 触发故障转移到 region1.zone2。为此,您在 region1.zone1helloWorld

    sleep Pod 调用 helloWorld 服务:

    1. $ kubectl exec --context="${CTX_R1_Z1}" -n sample -c sleep \
    2. "$(kubectl get pod --context="${CTX_R1_Z1}" -n sample -l \
    3. app=sleep -o jsonpath='{.items[0].metadata.name}')" \
    4. -- curl -sSL helloworld.sample:5000/hello
    5. Hello version: region1.zone2, instance: helloworld-region1.zone2-86f77cd7b-cpxhv

    故障转移到 region2.zone3

    现在触发故障转移到 region2.zone3。正如您之前所做的,配置 helloWorld 在 中调用失败。

    sleep Pod 调用 helloWorld 服务:

    1. "$(kubectl get pod --context="${CTX_R1_Z1}" -n sample -l \
    2. app=sleep -o jsonpath='{.items[0].metadata.name}')" \
    3. -- curl -sSL helloworld.sample:5000/hello
    4. Hello version: region2.zone3, instance: helloworld-region2.zone3-86f77cd7b-cpxhv

    第一个调用将失败,这将触发故障转移。多次重复该命令,并验证响应中的 version 始终为 region2.zone3

    现在触发故障转移到 region3.zone4。正如您之前所做的, 配置 helloWorldregion2.zone3 中调用失败。

    sleep Pod 调用 helloWorld 服务:

    1. $ kubectl exec --context="${CTX_R1_Z1}" -n sample -c sleep \
    2. "$(kubectl get pod --context="${CTX_R1_Z1}" -n sample -l \
    3. app=sleep -o jsonpath='{.items[0].metadata.name}')" \
    4. -- curl -sSL helloworld.sample:5000/hello
    5. Hello version: region3.zone4, instance: helloworld-region3.zone4-86f77cd7b-cpxhv

    第一次调用将失败,这将触发故障转移。多次重复该命令,并验证响应中的 version 始终为 region3.zone4

    下一步

    清除 此任务中的资源和文件。