# 失败注入

在你开始之前 按照安装指南中的说明设置Istio 。

部署包括默认目标规则在内的Bookinfo示例应用程序 。

查看流量管理概念文档中的故障注入讨论 。

通过执行请求路由任务或运行以下命令来应用应用程序版本路由 :

$ kubectl apply -f samples/bookinfo/networking/virtual-service-all-v1.yaml $ kubectl apply -f samples/bookinfo/networking/virtual-service-reviews-test-v2.yaml

使用以上配置,这就是请求流的方式:

productpage→交通reviews:v2→交通ratings(仅用于用户jason) productpage→ reviews:v1(对于其他所有人) 注入HTTP延迟故障 要测试Bookinfo应用程序微服务的弹性,请为用户reviews:v2和的ratings微服务之间注入7s的延迟jason。此测试将发现故意引入Bookinfo应用程序的错误。

请注意,该reviews:v2服务的服务调用有10秒的硬编码连接超时ratings。即使您引入了7s延迟,您仍然希望端到端流程继续进行而不会出现任何错误。

创建故障注入规则以延迟来自测试用户的流量 jason。

$ kubectl apply -f samples/bookinfo/networking/virtual-service-ratings-test-delay.yaml

确认规则已创建:

$ kubectl get virtualservice ratings -o yaml apiVersion: networking.istio.io/v1beta1 kind: VirtualService ... spec: hosts:

*   ratings

    http:
*   fault:

    &#x20; delay:

    ```
    fixedDelay: 7s
    percentage:
      value: 100
    ```

    match:

    *   headers:

        &#x20; end-user:

        ```
        exact: jason
        ```

        route:
    *   destination:

        &#x20; host: ratings

        &#x20; subset: v1
* route:
  *   destination:

      &#x20; host: ratings

      &#x20; subset: v1

等待几秒钟,新规则才能传播到所有Pod。

测试延迟配置 在浏览器中打开Bookinfo Web应用程序。

在/productpage网页上,以用户身份登录jason。

您预计Bookinfo主页将在大约7秒钟内正确加载。但是,存在问题:"评论"部分显示错误消息:

Sorry, product reviews are currently unavailable for this book.

查看网页的响应时间:

在网络浏览器中打开"开发人员工具"菜单。 打开网络标签 重新加载/productpage网页。您将看到该页面实际上在大约6秒钟内加载。 了解发生了什么 您发现了一个错误。微reviews服务中存在硬编码的超时,导致该服务失败。

不出所料,您引入的7s延迟不会影响reviews服务,因为reviewsandratings服务之间的超时被硬编码为10s。但是,productpage和reviews服务之间也有一个硬编码的超时,编码为3s +1重试,总计6s。结果,对productpageto的调用reviews过早超时,并在6s之后引发错误。

在典型的企业应用程序中可能会发生这样的错误,在这些应用程序中,不同的团队独立开发不同的微服务。Istio的故障注入规则可帮助您识别此类异常而不会影响最终用户。

请注意,故障注入测试仅限于登录用户为时 jason。如果您以任何其他用户身份登录,则不会遇到任何延迟。 修正错误 您通常可以通过以下方式解决问题:

无论是增加productpage对reviews服务超时或降低reviews到ratings超时 停止并重新启动固定的微服务 确认/productpage网页返回其响应,没有任何错误。 但是,您已经在该reviews服务的v3中运行了一个修复程序。的reviews:v3服务降低reviews到ratings从10秒到2.5秒的超时,使得它与(小于)下游的超时兼容productpage请求。

如果reviews:v3按照流量转移任务中的描述 将所有流量迁移到,则可以尝试将延迟规则更改为小于2.5s的任何量(例如2s),并确认端到端流继续无误。

注入HTTP中止故障 测试微服务弹性的另一种方法是引入HTTP中止错误。在此任务中,您将为ratings测试用户向微服务引入HTTP中止jason。

在这种情况下,您希望页面立即加载并显示Ratings service is currently unavailable消息。

创建一个故障注入规则以发送HTTP中止给用户jason:

$ kubectl apply -f samples/bookinfo/networking/virtual-service-ratings-test-abort.yaml

确认规则已创建:

$ kubectl get virtualservice ratings -o yaml apiVersion: networking.istio.io/v1beta1 kind: VirtualService ... spec: hosts:

*   ratings

    http:
*   fault:

    &#x20; abort:

    ```
    httpStatus: 500
    percentage:
      value: 100
    ```

    match:

    *   headers:

        &#x20; end-user:

        ```
        exact: jason
        ```

        route:
    *   destination:

        &#x20; host: ratings

        &#x20; subset: v1
* route:
  *   destination:

      &#x20; host: ratings

      &#x20; subset: v1

测试中止配置 在浏览器中打开Bookinfo Web应用程序。

在上/productpage,以用户身份登录jason。

如果规则成功传播到所有窗格,页面将立即加载并显示Ratings service is currently unavailable消息。

如果您从用户注销jason或在匿名窗口(或其他浏览器)中打开Bookinfo应用程序,您会看到每个人都/productpage仍然在调用reviews:v1 (根本不调用ratings)jason。因此,您将不会看到任何错误消息。
