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:
flydragon 2018-09-13 19:33:44 +08:00 committed by istio-bot
parent 2d70a7633e
commit 858b4e8af8
1 changed files with 23 additions and 16 deletions

View File

@ -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/#清理)说明以关闭应用程序。