地域故障转移
在开始之前,一定要完成的步骤 开始之前。
在此任务中,您将使用 sleep
pod 在 region1.zone1
作为请求源发送到 helloWorld
服务。然后,您将触发故障,这些故障将按照以下顺序导致不同地域之间的故障转移:
地域故障转移顺序
在内部,Envoy 优先级用于控制故障转移。 这些优先级将按照以下方式分配来自 sleep
Pod (在 region1
zone1
) 的流量:
应用一个 DestinationRule
配置如下:
- 用于
helloWorld
服务。这是故障转移正常运行所必须的。特别是,它可以配置 Sidecar 代理以知道服务的 Endpoint 何时不正常,最终触发故障转移到下一个地域。 连接池 强制每个HTTP请求使用一个新连接的策略。该任务利用 Envoy 的 功能强制将故障转移到下一个位置。一旦逐出,Envoy 将拒绝所有新的请求。由于每个请求都使用一个新连接,这将导致在耗尽后立即进行故障转移。此配置仅用于演示目的。
验证流量保持在 region1.zone1
从 sleep
Pod 调用 helloWorld
服务:
"$(kubectl get pod --context="${CTX_R1_Z1}" -n sample -l \
app=sleep -o jsonpath='{.items[0].metadata.name}')" \
-- curl -sSL helloworld.sample:5000/hello
Hello version: region1.zone1, instance: helloworld-region1.zone1-86f77cd7b-cpxhv
验证响应中的 version
是 region1.zone
。
重复几次,验证响应总是相同的。
接下来, 触发故障转移到 region1.zone2
。为此,您在 region1.zone1
中 helloWorld
:
从 sleep
Pod 调用 helloWorld
服务:
$ kubectl exec --context="${CTX_R1_Z1}" -n sample -c sleep \
"$(kubectl get pod --context="${CTX_R1_Z1}" -n sample -l \
app=sleep -o jsonpath='{.items[0].metadata.name}')" \
-- curl -sSL helloworld.sample:5000/hello
Hello version: region1.zone2, instance: helloworld-region1.zone2-86f77cd7b-cpxhv
故障转移到 region2.zone3
现在触发故障转移到 region2.zone3
。正如您之前所做的,配置 helloWorld
在 中调用失败。
从 sleep
Pod 调用 helloWorld
服务:
"$(kubectl get pod --context="${CTX_R1_Z1}" -n sample -l \
app=sleep -o jsonpath='{.items[0].metadata.name}')" \
-- curl -sSL helloworld.sample:5000/hello
Hello version: region2.zone3, instance: helloworld-region2.zone3-86f77cd7b-cpxhv
第一个调用将失败,这将触发故障转移。多次重复该命令,并验证响应中的 version
始终为 region2.zone3
。
现在触发故障转移到 region3.zone4
。正如您之前所做的, 配置 helloWorld
在 region2.zone3
中调用失败。
从 sleep
Pod 调用 helloWorld
服务:
$ kubectl exec --context="${CTX_R1_Z1}" -n sample -c sleep \
"$(kubectl get pod --context="${CTX_R1_Z1}" -n sample -l \
app=sleep -o jsonpath='{.items[0].metadata.name}')" \
-- curl -sSL helloworld.sample:5000/hello
Hello version: region3.zone4, instance: helloworld-region3.zone4-86f77cd7b-cpxhv
第一次调用将失败,这将触发故障转移。多次重复该命令,并验证响应中的 version
始终为 region3.zone4
。
下一步
清除 此任务中的资源和文件。