• Istio路由配置


    前提

    1. 在kubernetes正确安装Istio。
    2. 部署 Bookinfo 示例应用程序。
    3. 了解流量管理基本概念,如destination rule、virtual service和subset等

    任务

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

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

    应用 virtual service

    要仅路由到一个版本,请应用为微服务设置默认版本的 virtual service。在这种情况下,如果您还没有应用 destination rule,请先应用缺省目标规则,即第十部分所描述的。

    运行以下命令以应用 virtual service,将 Istio 配置为路由到 Bookinfo 的 v1 版本,最重要的是 reviews 服务的为v1 版本:

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

    YAML具体内容为:

    1.  
      apiVersion: networking.istio.io/v1alpha3
    2.  
      kind: VirtualService
    3.  
      metadata:
    4.  
      name: productpage
    5.  
      spec:
    6.  
      hosts:
    7.  
      - productpage
    8.  
      http:
    9.  
      - route:
    10.  
      - destination:
    11.  
      host: productpage
    12.  
      subset: v1
    13.  
      ---
    14.  
      apiVersion: networking.istio.io/v1alpha3
    15.  
      kind: VirtualService
    16.  
      metadata:
    17.  
      name: reviews
    18.  
      spec:
    19.  
      hosts:
    20.  
      - reviews
    21.  
      http:
    22.  
      - route:
    23.  
      - destination:
    24.  
      host: reviews
    25.  
      subset: v1
    26.  
      ---
    27.  
      apiVersion: networking.istio.io/v1alpha3
    28.  
      kind: VirtualService
    29.  
      metadata:
    30.  
      name: ratings
    31.  
      spec:
    32.  
      hosts:
    33.  
      - ratings
    34.  
      http:
    35.  
      - route:
    36.  
      - destination:
    37.  
      host: ratings
    38.  
      subset: v1
    39.  
      ---
    40.  
      apiVersion: networking.istio.io/v1alpha3
    41.  
      kind: VirtualService
    42.  
      metadata:
    43.  
      name: details
    44.  
      spec:
    45.  
      hosts:
    46.  
      - details
    47.  
      http:
    48.  
      - route:
    49.  
      - destination:
    50.  
      host: details
    51.  
      subset: v1
    52.  
      ---

    由于配置传播最终是一致的,因此请等待几秒钟以使虚拟服务生效。使用以下命令显示已定义的路由:

    kubectl get virtualservices -o yaml

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

    kubectl get destinationrules -o yaml

    测试新的路由配置

    再次刷新 Bookinfo 应用程序的 /productpage 测试新配置。

    在浏览器中打开 Bookinfo 站点。 URL 为 http://$GATEWAY_URL/productpage,其中 GATEWAY_URL 是外部的入口 IP 地址,如 Bookinfo 文档中所述。无论刷新多少次,页面的评论部分都不会显示评级星标。这是因为将 Istio 配置为将评论服务的所有流量路由到版本 reviews:v1,并且此版本的服务不访问星级评分服务。

    基于用户身份的路由

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

    Istio 对用户身份没有任何特殊的内置机制。这个例子的基础在于, productpage 服务在所有针对 reviews 服务的调用请求中 都加自定义的 HTTP header,从而达到在流量中对最终用户身份识别的这一效果。reviews:v2 是包含星级评分功能的版本。

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

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

    YAML具体内容如下:

    1.  
      apiVersion: networking.istio.io/v1alpha3
    2.  
      kind: VirtualService
    3.  
      metadata:
    4.  
      name: reviews
    5.  
      spec:
    6.  
      hosts:
    7.  
      - reviews
    8.  
      http:
    9.  
      - match:
    10.  
      - headers:
    11.  
      end-user:
    12.  
      exact: jason
    13.  
      route:
    14.  
      - destination:
    15.  
      host: reviews
    16.  
      subset: v2
    17.  
      - route:
    18.  
      - destination:
    19.  
      host: reviews
    20.  
      subset: v1

    确认规则已创建

    kubectl get virtualservice reviews -o yaml
    1. 在 Bookinfo 应用程序的 /productpage 上,以用户 jason 身份登录,谷歌浏览器可以使用modheader插件。
    2. 刷新浏览器,星级评分显示在每个评论旁边。
    3. 以其他用户身份登录(选择您想要的任何名称)。
    4. 刷新浏览器。现在星星消失了。这是因为除了 Jason 之外,所有用户的流量都被路由到 reviews:v1。已成功配置 Istio 以根据用户身份路由流量。

    原理介绍

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

    转自:https://blog.csdn.net/u013538795/article/details/89948526

  • 相关阅读:
    Python day 34 并发编程、PID/PPID、实现多进程得两种方式
    Python Day33:粘包问题及粘包解决方案
    数据分析
    数据分析
    爬虫 之 mongodb数据库
    爬虫
    爬虫
    爬虫
    flask框架
    flask框架
  • 原文地址:https://www.cnblogs.com/linwenbin/p/13446056.html
Copyright © 2020-2023  润新知