istio学习(3)请求路由

在使用 Istio 控制 Bookinfo 版本路由之前运行以下命令为 Bookinfo 服务创建默认目标规则:

kubectl apply -f samples/bookinfo/networking/destination-rule-all.yaml

下来来看下yaml文件内容:
bookinfo.yaml


##以Productpage为例,剩下的Reviews、Ratings、Details都同理
##################################################################################################
# Productpage services
##################################################################################################
apiVersion: v1  ##api版本
kind: Service   
metadata:
  name: productpage  ##svc的名字
  labels:
    app: productpage   ##svc的标签,两种标签
    service: productpage
spec:
  ports:
  - port: 9080      ##svc暴露的端口
    name: http      ##端口形式
  selector:
    app: productpage  ##将svc绑定到具有app=productpage标签的deploy上
---
apiVersion: v1
kind: ServiceAccount  ##准入控制
metadata:
  name: bookinfo-productpage
  labels:
    account: productpage
---
apiVersion: apps/v1
kind: Deployment    ##创建deploy
metadata:
  name: productpage-v1   ##deploy的名字
  labels:
    app: productpage    ##deploy的标签
    version: v1
spec:
  replicas: 1      ##副本数
  selector:        ##容器需要绑定到相应的标签上
    matchLabels:     
      app: productpage   ##标签选择了两个就说明这个容器选择了名为productpage-v1的deploy
      version: v1
  template:
    metadata:
      labels:
        app: productpage
        version: v1
    spec:
      serviceAccountName: bookinfo-productpage    ##选择准入控制器
      containers:
      - name: productpage
        image: docker.io/istio/examples-bookinfo-productpage-v1:1.16.2
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 9080     ##容器内部暴露端口
        volumeMounts:             ##挂载项
        - name: tmp 
          mountPath: /tmp
        securityContext:
          runAsUser: 1000
      volumes:
      - name: tmp
        emptyDir: {}           ##临时挂载
---

创建完服务后再创建入口gateway
bookinfo.yaml

apiVersion: networking.istio.io/v1alpha3
kind: Gateway               ##创建gateway的类型
metadata:
  name: bookinfo-gateway      ##创建gateway的名字
spec:
  selector:
    istio: ingressgateway # use istio default controller  ##选择的是istio的默认控制器
  servers:
  - port:
      number: 80          ##选择端口
      name: http
      protocol: HTTP     ##服务形式
    hosts:
    - "*"              ##这个host可以允许任何域名访问80端口
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService       ##创建vsvc
metadata:
  name: bookinfo          ##vsvc名字
spec:
  hosts:                  ##现在这个host也不进行选择,允许任何域名
  - "*"
  gateways:
  - bookinfo-gateway     ##选择相应的gateway
  http:
  - match:              ##匹配规则
    - uri:
        exact: /productpage   ##exact精确匹配
    - uri:
        prefix: /static      ##prefix前置匹配
    - uri:
        exact: /login
    - uri:
        exact: /logout
    - uri:
        prefix: /api/v1/products
    route:
    - destination:
        host: productpage    ##这里选择的是svc也可以写全部的路径productpage.default.svc.cluster.local
        port:
          number: 9080

目的地路由创建
destination-rule-all.yaml

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule   ##类型是DestinationRule
metadata:
  name: productpage      ##DestinationRule的名称
spec:
  host: productpage     ##这个和vsvc的host字段相同
  subsets:
  - name: v1           
    labels:
      version: v1      ##标签v1
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: reviews
spec:
  host: reviews
  subsets:
  - name: v1
    labels:
      version: v1
  - name: v2
    labels:
      version: v2
  - name: v3
    labels:
      version: v3
---

下来进入今天的正题,因为一开始reviews有v1、v2、v3三个版本,使用svc进行调用的时候会进行负载均衡,但是如果我只想将流量打到固定的地方该如何进行更改呢?
在DR后再创建svc
virtual-service-all-v1.yaml

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: productpage
spec:
  hosts:
  - productpage
  http:
  - route:
    - destination:
        host: productpage
        subset: v1
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: reviews
spec:
  hosts:
  - reviews
  http:
  - route:
    - destination:
        host: reviews
        subset: v1    ##现在限制reviews是只走DR的v1路线

基于用户身份修改路由
virtual-service-reviews-test-v2.yaml

apiVersion: networking.istio.io/v1beta1
kind: VirtualService
...
spec:
  hosts:
  - reviews
  http:
  - match:                ##vsvc的规则
    - headers:            ##头信息
        end-user:
          exact: jason    ##精准匹配jason用户
    route:
    - destination:        ##如果匹配到了就走v2版本
        host: reviews
        subset: v2
  - route:
    - destination:        ##没有匹配到就走v1版本
        host: reviews
        subset: v1

设置完成后刷新页面并登录
在这里插入图片描述

登录完成出现黑色星星表示v2版本生效了
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值