zoukankan      html  css  js  c++  java
  • istio配置请求路由

    开始之前

    • 按照安装指南中的说明安装 Istio。

    • 部署 Bookinfo 示例应用程序。

    • 查看流量管理的概念文档。在尝试此任务之前,您应该熟悉一些重要的术语,例如 *Destination Rule*、Virtual Service 和 *Subset*。

    关于这个任务

    Istio Bookinfo 示例包含四个独立的微服务,每个微服务都有多个版本。其中一个微服务 reviews 的三个不同版本已经部署并同时运行。为了说明这导致的问题,在浏览器中访问 Bookinfo 应用程序的 /productpage 并刷新几次。您会注意到,有时书评的输出包含星级评分,有时则不包含。这是因为没有明确的默认服务版本可路由,Istio 将以循环方式将请求路由到所有可用版本。

    此任务的最初目标是应用将所有流量路由到微服务的 v1 (版本 1)的规则。稍后,您将应用规则根据 HTTP 请求 header 的值路由流量。

    应用 Virtual Service

    要仅路由到一个版本,请应用为微服务设置默认版本的 Virtual Service。在这种情况下,Virtual Service 将所有流量路由到每个微服务的 v1 版本。

    如果您还没有应用 Destination Rule,请先应用默认目标规则。

    运行以下命令以应用 Virtual Service:

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

    由于配置传播是最终一致的,因此请等待几秒钟以使 Virtual Service 生效。

    使用以下命令显示已定义的路由:

    $ kubectl get virtualservices -o yaml
    - apiVersion: networking.istio.io/v1beta1
      kind: VirtualService
      ...
      spec:
        hosts:
        - details
        http:
        - route:
          - destination:
              host: details
              subset: v1
    - apiVersion: networking.istio.io/v1beta1
      kind: VirtualService
      ...
      spec:
        hosts:
        - productpage
        http:
        - route:
          - destination:
              host: productpage
              subset: v1
    - apiVersion: networking.istio.io/v1beta1
      kind: VirtualService
      ...
      spec:
        hosts:
        - ratings
        http:
        - route:
          - destination:
              host: ratings
              subset: v1
    - apiVersion: networking.istio.io/v1beta1
      kind: VirtualService
      ...
      spec:
        hosts:
        - reviews
        http:
        - route:
          - destination:
              host: reviews
              subset: v1

    您还可以使用以下命令显示相应的 subset 定义:

    $ kubectl get destinationrules -o yaml

    您已将 Istio 配置为路由到 Bookinfo 微服务的 v1 版本,最重要的是 reviews 服务的版本 1。

    测试新的路由配置

    您可以通过再次刷新 Bookinfo 应用程序的 /productpage 轻松测试新配置。

    1. 在浏览器中打开 Bookinfo 站点。网址为 http://$GATEWAY_URL/productpage,其中 $GATEWAY_URL 是外部的入口 IP 地址,如 Bookinfo 文档中所述。

      请注意,无论您刷新多少次,页面的评论部分都不会显示评级星标。这是因为您将 Istio 配置为将评论服务的所有流量路由到版本 reviews:v1,而此版本的服务不访问星级评分服务。

    您已成功完成此任务的第一部分:将流量路由到服务的某一个版本。

    基于用户身份的路由

    接下来,您将更改路由配置,以便将来自特定用户的所有流量路由到特定服务版本。在这种情况下,来自名为 Jason 的用户的所有流量将被路由到服务 reviews:v2

    请注意,Istio 对用户身份没有任何特殊的内置机制。事实上,productpage 服务在所有到 reviews 服务的 HTTP 请求中都增加了一个自定义的 end-user 请求头,从而达到了本例子的效果。

    请记住,reviews:v2 是包含星级评分功能的版本。

    运行以下命令以启用基于用户的路由:

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

    确认规则已创建:

     kubectl get virtualservice reviews -o yaml
    apiVersion: networking.istio.io/v1beta1
    kind: VirtualService
    ...
    spec:
      hosts:
      - reviews
      http:
      - match:
        - headers:
            end-user:
              exact: jason
        route:
        - destination:
            host: reviews
            subset: v2
      - route:
        - destination:
            host: reviews
            subset: v1

    在 Bookinfo 应用程序的 /productpage 上,以用户 jason 身份登录。刷新浏览器。您看到了什么?星级评分显示在每个评论旁边。

    以其他用户身份登录(选择您想要的任何名称)。刷新浏览器。现在星星消失了。这是因为除了 Jason 之外,所有用户的流量都被路由到 reviews:v1

    在此任务中,您首先使用 Istio 将 100% 的请求流量都路由到了 Bookinfo 服务的 v1 版本。然后设置了一条路由规则,它根据 productpage 服务发起的请求中的 end-user 自定义请求头内容,选择性地将特定的流量路由到了 reviews 服务的 v2 版本

    参考:

    https://preliminary.istio.io/latest/zh/docs/tasks/traffic-management/request-routing/#before-you-begin

  • 相关阅读:
    设计模式(十)—— 装饰者模式
    设计模式(九)—— 组合模式
    设计模式(八)—— 桥接模式
    设计模式(七)—— 适配器模式
    LINQ to XML
    设计模式(六)—— 单例模式
    设计模式(五)—— 原型模式
    Asp.Net程序目录下文件夹或文件操作导致Session失效的解决方案
    基于.Net平台常用的组件和框架整理
    Javascript中最常用的55个经典技巧(转)
  • 原文地址:https://www.cnblogs.com/fat-girl-spring/p/15206456.html
Copyright © 2011-2022 走看看