YAZONG 我的开源

Kubernetes(十三)istio(13.5)配置请求路由

  , , ,
0 评论0 浏览

==配置请求路由

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

此任务的第一个目标是应用将所有流量路由到微服务的v1 (版本 1)的规则。第二个目标是根据 HTTP 请求 header 的值路由流量。

多刷新几次,轮训的负载均衡。

image.png

将所有流量路由到v1


#### 1. 将所有流量路由到v1

[root@node-2 istio-1.9.5]# less samples/bookinfo/networking/destination-rule-all.yaml
apiVersion: networking.istio.io/v1alpha3
#此类型DestinationRule是istio指定的资源类型,istio提供了一种配置文件的格式,格式跟K8S的配置格式很相似,只有内置的是个性化的。
kind: DestinationRule
metadata:
  name: productpage
spec:
  host: productpage
  subsets:
  - name: v1
    labels:
#v1的子集。
      version: v1
#只需关注spec。
#路由方式。
#这个route指向了前面的某个DestinationRule的配置,某个DestinationRule的配置有host对应的哪个,subset-v1,对应的某个subset配置了label。
#大概捋一下:先进VirtualService对应的host的productpage,根据某个DestinationRule定义一个destination,是productpage的时候,访问它的subset:v1版本,在刚才v1版本的配置有个label的配置是version:v1,可以猜到有一个POD,POD上面有个label是version:v1。
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: reviews
spec:
  host: reviews
#定义了三个子集版本的reviews。大概都是rule,对应不同的version,对应不同的subset。
  subsets:
  - name: v1
    labels:
      version: v1
  - name: v2
    labels:
      version: v2
  - name: v3
    labels:
      version: v3
---
ratings
details
......


# 创建DestinationRule
[root@node-2 istio-1.9.5]# kubectl apply -f samples/bookinfo/networking/destination-rule-all.yaml
destinationrule.networking.istio.io/productpage created
destinationrule.networking.istio.io/reviews created
destinationrule.networking.istio.io/ratings created
destinationrule.networking.istio.io/details created

# 创建VirtualService
[root@node-2 istio-1.9.5]# kubectl apply -f samples/bookinfo/networking/virtual-service-all-v1.yaml
virtualservice.networking.istio.io/productpage created
virtualservice.networking.istio.io/reviews created
virtualservice.networking.istio.io/ratings created
virtualservice.networking.istio.io/details created

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

根据HTTP 请求 header 的值路由

#### 2. 根据 HTTP 请求 header 的值路由


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

# 创建规则
[root@node-2 istio-1.9.5]# kubectl apply -f samples/bookinfo/networking/virtual-service-reviews-test-v2.yaml
virtualservice.networking.istio.io/reviews configured

# 确认规则已创建
[root@node-2 istio-1.9.5]# kubectl get virtualservice reviews -o yaml
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  ...
  name: reviews
  ...
spec:
  hosts:
  - reviews
  http:
  - match:
    - headers:
        end-user:
          exact: jason
    route:
    - destination:
        host: reviews
        subset: v2
  - route:
    - destination:
        host: reviews
        subset: v1

#此时,所有用户的流量都被路由到 reviews:v1。

image.png

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

image.png

image.png

image.png


标题:Kubernetes(十三)istio(13.5)配置请求路由
作者:yazong
地址:https://blog.llyweb.com/articles/2022/12/24/1671815279893.html