mirror of https://github.com/istio/istio.io.git
zh: content/docs/tasks/traffic-management/fault-injection/index.md (#2596)
* zh: content/docs/tasks/traffic-management/fault-injection/index.md Keep consistent with the latest version Signed-off-by: ylf <1045438139@qq.com> * zh: content/docs/tasks/traffic-management/fault-injection/index.md fix md style * zh: content/docs/tasks/traffic-management/fault-injection/index.md fix md style
This commit is contained in:
parent
2d70a7633e
commit
858b4e8af8
|
|
@ -18,25 +18,31 @@ keywords: [流量管理,故障注入]
|
|||
* 通过首先执行[请求路由](/zh/docs/tasks/traffic-management/request-routing/)任务或运行以下命令来初始化应用程序版本路由:
|
||||
|
||||
{{< text bash >}}
|
||||
$ istioctl create -f @samples/bookinfo/networking/virtual-service-all-v1.yaml@
|
||||
$ istioctl replace -f @samples/bookinfo/networking/virtual-service-reviews-test-v2.yaml@
|
||||
$ kubectl apply -f @samples/bookinfo/networking/virtual-service-all-v1.yaml@
|
||||
$ kubectl apply -f @samples/bookinfo/networking/virtual-service-reviews-test-v2.yaml@
|
||||
{{< /text >}}
|
||||
|
||||
* 通过上面的配置,下面是请求的流程:
|
||||
* `productpage` → `reviews:v2` → `ratings` (`jason` 用户)
|
||||
* `productpage` → `reviews:v1` (其他用户)
|
||||
|
||||
## 使用 HTTP 延迟进行故障注入
|
||||
|
||||
为了测试我们的微服务应用程序 Bookinfo 的弹性,我们将在 reviews :v2 和 ratings 服务之间的一个用户 "jason” _注入一个 7 秒_ 的延迟。
|
||||
由于 _reviews:v2_ 服务对其 ratings 服务的调用具有 10 秒的硬编码连接超时,因此我们期望端到端流程是正常的(没有任何错误)。
|
||||
为了测试我们的微服务应用程序 Bookinfo 的弹性,我们将在 `reviews:v2` 和 `ratings` 服务之间的一个用户 `jason` 注入一个 7 秒的延迟。
|
||||
这个测试将会发现故意引入 Bookinfo 应用程序中的错误。
|
||||
|
||||
由于 `reviews:v2` 服务对其 ratings 服务的调用具有 10 秒的硬编码连接超时,比我们设置的 7s 延迟要大,因此我们期望端到端流程是正常的(没有任何错误)。
|
||||
|
||||
1. 创建故障注入规则以延迟来自用户 "jason”(我们的测试用户)的流量
|
||||
|
||||
{{< text bash >}}
|
||||
$ istioctl replace -f @samples/bookinfo/networking/virtual-service-ratings-test-delay.yaml@
|
||||
$ kubectl apply -f @samples/bookinfo/networking/virtual-service-ratings-test-delay.yaml@
|
||||
{{< /text >}}
|
||||
|
||||
1. 确认已创建规则:
|
||||
|
||||
{{< text bash yaml >}}
|
||||
$ istioctl get virtualservice ratings -o yaml
|
||||
$ kubectl get virtualservice ratings -o yaml
|
||||
apiVersion: networking.istio.io/v1alpha3
|
||||
kind: VirtualService
|
||||
metadata:
|
||||
|
|
@ -80,15 +86,15 @@ keywords: [流量管理,故障注入]
|
|||
{{< /text >}}
|
||||
|
||||
1. 查看页面的返回时间:
|
||||
1. 打开浏览器的 *开发工具* 菜单
|
||||
1. 打开 *网络* 标签
|
||||
1. 重新加载 `productpage` 页面,你会看到页面实际上用了大约 6s。
|
||||
1. 打开浏览器的 *开发工具* 菜单
|
||||
1. 打开 *网络* 标签
|
||||
1. 重新加载 `productpage` 页面,你会看到页面实际上用了大约 6s。
|
||||
|
||||
## 了解发生了什么
|
||||
## 理解原理
|
||||
|
||||
你发现了一个 bug。在微服务中有硬编码超时,导致 `reviews` 服务失败。
|
||||
|
||||
在 `productpage` 和 `reviews` 服务之间超时时间是 6s - 编码 3s + 1次重试总共 6s ,`reviews` 和 `ratings` 服务之间的硬编码连接超时为 10s 。由于我们引入的延时,`/productpage` 提前超时并引发错误。
|
||||
在 `productpage` 和 `reviews` 服务之间超时时间是 6s - 编码 3s + 1 次重试总共 6s ,`reviews` 和 `ratings` 服务之间的硬编码连接超时为 10s 。由于我们引入的延时,`/productpage` 提前超时并引发错误。
|
||||
|
||||
这些类型的错误可能发生在典型的企业应用程序中,其中不同的团队独立地开发不同的微服务。Istio 的故障注入规则可帮助您识别此类异常,而不会影响最终用户。
|
||||
|
||||
|
|
@ -113,18 +119,18 @@ keywords: [流量管理,故障注入]
|
|||
|
||||
测试微服务弹性的另一种方法是引入 HTTP abort 故障。在这个任务中,在 ratings 微服务中引入 HTTP abort ,测试用户为 `jason` 。
|
||||
|
||||
在这个案例中,我们希望页面能够立即加载,同时显示 `product ratings not available` 这样的消息。
|
||||
在这个案例中,我们希望页面能够立即加载,同时显示 `Ratings service is currently unavailable` 这样的消息。
|
||||
|
||||
1. 为用户 "jason” 创建故障注入规则发送 HTTP abort
|
||||
|
||||
{{< text bash >}}
|
||||
$ istioctl replace -f @samples/bookinfo/networking/virtual-service-ratings-test-abort.yaml@
|
||||
$ kubectl apply -f @samples/bookinfo/networking/virtual-service-ratings-test-abort.yaml@
|
||||
{{< /text >}}
|
||||
|
||||
1. 确认已创建规则
|
||||
|
||||
{{< text bash yaml >}}
|
||||
$ istioctl get virtualservice ratings -o yaml
|
||||
$ kubectl get virtualservice ratings -o yaml
|
||||
apiVersion: networking.istio.io/v1alpha3
|
||||
kind: VirtualService
|
||||
metadata:
|
||||
|
|
@ -160,14 +166,15 @@ keywords: [流量管理,故障注入]
|
|||
|
||||
如果规则成功传播到所有的 pod,您应该能立即看到页面加载并看到 `Ratings service is currently unavailable` 消息。
|
||||
|
||||
1. 注销用户 `jason`,您应该会在 `/productpage` 网页上看到评级星标的评论成功显示。
|
||||
1. 如果您注销用户 `jason` 或在匿名窗口(或其他浏览器)中打开 Bookinfo 应用程序,您应该会在 `/productpage` 仍然调用 `reviews:v1`(没有调用 `ratings`)
|
||||
除了 `jason` 外的用户都会看到网页上看到评级星标的评论成功显示。
|
||||
|
||||
## 清理
|
||||
|
||||
1. 删除应用程序路由规则:
|
||||
|
||||
{{< text bash >}}
|
||||
$ istioctl delete -f @samples/bookinfo/networking/virtual-service-all-v1.yaml@
|
||||
$ kubectl delete -f @samples/bookinfo/networking/virtual-service-all-v1.yaml@
|
||||
{{< /text >}}
|
||||
|
||||
1. 如果您不打算探索任何后续任务,请参阅 [Bookinfo 清理](/zh/docs/examples/bookinfo/#清理)说明以关闭应用程序。
|
||||
|
|
|
|||
Loading…
Reference in New Issue