istio 基于权重路由(8)

2023年 7月 15日 20.5k 0

紧接前面,这篇我们希望访问dpment服务的请求在百分之90的流量在原来的v10的pod,而百分之10的在新的v11的pod,因此我们配置weight来实现基于权重比例的流量切割

首先部署dpment-a和dpment-b

仍然需要配置service关联到后端的pod标签

apiVersion: v1
kind: Service
metadata:
  name: dpment
  namespace: java-demo    
spec:
  ports:
    - name: http
      port: 80
      protocol: TCP
      targetPort: 80
  selector:
    app: linuxea_app
  type: ClusterIP

配置一个DestinationRule,并且配置上subsets根据标签匹配,通过标签 匹配到两个service上,将子集定义完成

此前的篇幅中我门配置过deployment,并且标签配置完成,此时的子集直接引用

---
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
  name: dpment
  namespace: java-demo  
spec:
  host: dpment
  subsets:
  - name: v11
    labels:
      version: v1.1
  - name: v10
    labels:
      version: v1.0

在VirtualService中添加一项weight分别指定两个subsets.name的权重

---
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: dpment
  namespace: java-demo    
spec:
  hosts:
  - dpment
  http:
  - name: weight-based-routing
    route:
    - destination:
        host: dpment
        subset: v10
      weight: 90
    - destination:
        host: dpment
        subset: v11
      weight: 10

yaml如下

apiVersion: v1
kind: Service
metadata:
  name: dpment
  namespace: java-demo    
spec:
  ports:
    - name: http
      port: 80
      protocol: TCP
      targetPort: 80
  selector:
    app: linuxea_app
  type: ClusterIP
---
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
  name: dpment
  namespace: java-demo  
spec:
  host: dpment
  subsets:
  - name: v11
    labels:
      version: v1.1
  - name: v10
    labels:
      version: v1.0
---
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: dpment
  namespace: java-demo    
spec:
  hosts:
  - dpment
  http:
  - name: weight-based-routing
    route:
    - destination:
        host: dpment
        subset: v10
      weight: 90
    - destination:
        host: dpment
        subset: v11
      weight: 10

而后我们在cli的容器,或者其他容器都可以进行访问测试

/ $ while true;do curl dpment;sleep 0.3;done
linuxea-dpment-linuxea-a-777847fd74-ktz84.com-127.0.0.1/8 130.130.1.107/24 version number 1.0
linuxea-dpment-linuxea-a-777847fd74-p4prt.com-127.0.0.1/8 130.130.0.76/24 version number 1.0
linuxea-dpment-linuxea-a-777847fd74-p4prt.com-127.0.0.1/8 130.130.0.76/24 version number 1.0
linuxea-dpment-linuxea-a-777847fd74-p4prt.com-127.0.0.1/8 130.130.0.76/24 version number 1.0
linuxea-dpment-linuxea-a-777847fd74-p4prt.com-127.0.0.1/8 130.130.0.76/24 version number 1.0
linuxea-dpment-linuxea-a-777847fd74-p4prt.com-127.0.0.1/8 130.130.0.76/24 version number 1.0
linuxea-dpment-linuxea-a-777847fd74-ktz84.com-127.0.0.1/8 130.130.1.107/24 version number 1.0
linuxea-dpment-linuxea-a-777847fd74-ktz84.com-127.0.0.1/8 130.130.1.107/24 version number 1.0
linuxea-dpment-linuxea-a-777847fd74-p4prt.com-127.0.0.1/8 130.130.0.76/24 version number 1.0
linuxea-dpment-linuxea-a-777847fd74-p4prt.com-127.0.0.1/8 130.130.0.76/24 version number 1.0
linuxea-dpment-linuxea-a-777847fd74-ktz84.com-127.0.0.1/8 130.130.1.107/24 version number 1.0
linuxea-dpment-linuxea-a-777847fd74-ktz84.com-127.0.0.1/8 130.130.1.107/24 version number 1.0
linuxea-dpment-linuxea-a-777847fd74-p4prt.com-127.0.0.1/8 130.130.0.76/24 version number 1.0
linuxea-dpment-linuxea-a-777847fd74-p4prt.com-127.0.0.1/8 130.130.0.76/24 version number 1.0
linuxea-dpment-linuxea-a-777847fd74-p4prt.com-127.0.0.1/8 130.130.0.76/24 version number 1.0
linuxea-dpment-linuxea-a-777847fd74-ktz84.com-127.0.0.1/8 130.130.1.107/24 version number 1.0
linuxea-dpment-linuxea-a-777847fd74-p4prt.com-127.0.0.1/8 130.130.0.76/24 version number 1.0
linuxea-dpment-linuxea-a-777847fd74-p4prt.com-127.0.0.1/8 130.130.0.76/24 version number 1.0
linuxea-dpment-linuxea-a-777847fd74-p4prt.com-127.0.0.1/8 130.130.0.76/24 version number 1.0
linuxea-dpment-linuxea-a-777847fd74-ktz84.com-127.0.0.1/8 130.130.1.107/24 version number 1.0
linuxea-dpment-linuxea-a-777847fd74-ktz84.com-127.0.0.1/8 130.130.1.107/24 version number 1.0
linuxea-dpment-linuxea-a-777847fd74-ktz84.com-127.0.0.1/8 130.130.1.107/24 version number 1.0
linuxea-dpment-linuxea-a-777847fd74-p4prt.com-127.0.0.1/8 130.130.0.76/24 version number 1.0
linuxea-dpment-linuxea-a-777847fd74-ktz84.com-127.0.0.1/8 130.130.1.107/24 version number 1.0
linuxea-dpment-linuxea-a-777847fd74-ktz84.com-127.0.0.1/8 130.130.1.107/24 version number 1.0
linuxea-dpment-linuxea-a-777847fd74-p4prt.com-127.0.0.1/8 130.130.0.76/24 version number 1.0
linuxea-dpment-linuxea-a-777847fd74-p4prt.com-127.0.0.1/8 130.130.0.76/24 version number 1.0
linuxea-dpment-linuxea-b-55694cb7f5-695mr.com-127.0.0.1/8 130.130.1.108/24 version number 2.0
linuxea-dpment-linuxea-a-777847fd74-p4prt.com-127.0.0.1/8 130.130.0.76/24 version number 1.0
linuxea-dpment-linuxea-b-55694cb7f5-695mr.com-127.0.0.1/8 130.130.1.108/24 version number 2.0
linuxea-dpment-linuxea-a-777847fd74-ktz84.com-127.0.0.1/8 130.130.1.107/24 version number 1.0

istio-20220805-3.gif

此时在kiali界面会看到流量走向istio-20220805-4.gif

现在我们希望增加流量权重比例,修改即可,比如百分之60到v10,百分之40到v11

---
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: dpment
  namespace: java-demo    
spec:
  hosts:
  - dpment
  http:
  - name: weight-based-routing
    route:
    - destination:
        host: dpment
        subset: v10
      weight: 60
    - destination:
        host: dpment
        subset: v11
      weight: 40

此时的kiali可以看到流量的比例情况如下

image-20220719173822244.png

如果希望流量全部切换到一方,修改为100即可

---
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: dpment
  namespace: java-demo    
spec:
  hosts:
  - dpment
  http:
  - name: weight-based-routing
    route:
    - destination:
        host: dpment
        subset: v10
      weight: 0
    - destination:
        host: dpment
        subset: v11
      weight: 100

一旦流量全部倒向100,另外为0的权重的service将不接收流量,并且从kiali界面上移除

image-20220719174340267.png

4.1 gateway

那如果是前端页面就需要添加一些其他配置

我们假设,有一个服务是dpment,现在的版本是1.1,现在要按照权重比例升级到1.2

但是此前我们只配置了v1.0和v1.1的子集,所以现在我们添加一个v1.2

因此,我们配置v1.3的pod组,和DestinationRule

  • 主要配置

DestinationRule是通过标签来关联的,因此pod的标签需要进行修改

    matchLabels:
      app: linuxea_app
      version: v1.2

在此前的DestinationRule之上,我们添加

  - name: v12
    labels:
      version: v1.2 

都关联到一个dpment的host下

yaml如下

apiVersion: v1
kind: Service
metadata:
  name: dpment
  namespace: java-demo    
spec:
  ports:
    - name: http
      port: 80
      protocol: TCP
      targetPort: 80
  selector:
    app: linuxea_app
  type: ClusterIP
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: dpment-linuxea-c
  namespace: java-demo  
spec:
  replicas: 3
  selector:
    matchLabels:
      app: linuxea_app
      version: v1.2
  template:
    metadata:
      labels:
        app: linuxea_app
        version: v1.2
    spec:
      containers:
      - name: dpment-linuxea-c
        # imagePullPolicy: Always
        image: registry.cn-hangzhou.aliyuncs.com/marksugar/nginx:v3.0 
        ports:
        - name: http
          containerPort: 80
---
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
  name: dpment
  namespace: java-demo  
spec:
  host: dpment  # 与service保持一致
  subsets:  # 逻辑组
  - name: v11  # 定义v11并根据标签,筛选v1.1到v11子集
    labels:
      version: v1.1
  - name: v10 # 定义v10并根据标签,筛选v1.0到v10子集
    labels:
      version: v1.0
  - name: v12
    labels:
      version: v1.2 

而后在vs调整比例

    - destination:
        host: dpment
        subset: v10
      weight: 90
    - destination:
        host: dpment
        subset: v12
      weight: 10

yaml如下

apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: dpment
  namespace: java-demo  
spec:
  hosts:
  - "dpment.linuxea.com"                     # 对应于gateways/proxy-gateway
  - "dpment"
  gateways:
  - istio-system/dpment-gateway       # 相关定义仅应用于Ingress Gateway上  
  - mesh
  http:
  - name: weight-based-routing
    route:
    - destination:
        host: dpment
        subset: v11
      weight: 90
    - destination:
        host: dpment
        subset: v12
      weight: 10

curl

PS C:Usersusert>  while ("true"){ curl http://dpment.linuxea.com/  ;sleep 1}
linuxea-dpment-linuxea-b-55694cb7f5-lhkrb.com-127.0.0.1/8 130.130.1.122/24 version number 2.0
linuxea-dpment-linuxea-b-55694cb7f5-lhkrb.com-127.0.0.1/8 130.130.1.122/24 version number 2.0
linuxea-dpment-linuxea-b-55694cb7f5-lhkrb.com-127.0.0.1/8 130.130.1.122/24 version number 2.0
linuxea-dpment-linuxea-b-55694cb7f5-lhkrb.com-127.0.0.1/8 130.130.1.122/24 version number 2.0
linuxea-dpment-linuxea-b-55694cb7f5-lhkrb.com-127.0.0.1/8 130.130.1.122/24 version number 2.0
linuxea-dpment-linuxea-b-55694cb7f5-576qs.com-127.0.0.1/8 130.130.0.15/24 version number 2.0
linuxea-dpment-linuxea-b-55694cb7f5-576qs.com-127.0.0.1/8 130.130.0.15/24 version number 2.0
linuxea-dpment-linuxea-b-55694cb7f5-576qs.com-127.0.0.1/8 130.130.0.15/24 version number 2.0
linuxea-dpment-linuxea-b-55694cb7f5-lhkrb.com-127.0.0.1/8 130.130.1.122/24 version number 2.0
linuxea-dpment-linuxea-b-55694cb7f5-lhkrb.com-127.0.0.1/8 130.130.1.122/24 version number 2.0
linuxea-dpment-linuxea-c-568b9fcb5c-ltdcg.com-127.0.0.1/8 130.130.1.125/24 version number 3.0
linuxea-dpment-linuxea-b-55694cb7f5-576qs.com-127.0.0.1/8 130.130.0.15/24 version number 2.0
linuxea-dpment-linuxea-b-55694cb7f5-576qs.com-127.0.0.1/8 130.130.0.15/24 version number 2.0
linuxea-dpment-linuxea-b-55694cb7f5-576qs.com-127.0.0.1/8 130.130.0.15/24 version number 2.0
linuxea-dpment-linuxea-c-568b9fcb5c-phn77.com-127.0.0.1/8 130.130.0.24/24 version number 3.0
linuxea-dpment-linuxea-b-55694cb7f5-lhkrb.com-127.0.0.1/8 130.130.1.122/24 version number 2.0
linuxea-dpment-linuxea-b-55694cb7f5-576qs.com-127.0.0.1/8 130.130.0.15/24 version number 2.0
linuxea-dpment-linuxea-b-55694cb7f5-lhkrb.com-127.0.0.1/8 130.130.1.122/24 version number 2.0
linuxea-dpment-linuxea-c-568b9fcb5c-phn77.com-127.0.0.1/8 130.130.0.24/24 version number 3.0
linuxea-dpment-linuxea-b-55694cb7f5-576qs.com-127.0.0.1/8 130.130.0.15/24 version number 2.0
linuxea-dpment-linuxea-b-55694cb7f5-lhkrb.com-127.0.0.1/8 130.130.1.122/24 version number 2.0
linuxea-dpment-linuxea-b-55694cb7f5-576qs.com-127.0.0.1/8 130.130.0.15/24 version number 2.0
linuxea-dpment-linuxea-b-55694cb7f5-576qs.com-127.0.0.1/8 130.130.0.15/24 version number 2.0
linuxea-dpment-linuxea-b-55694cb7f5-lhkrb.com-127.0.0.1/8 130.130.1.122/24 version number 2.0
linuxea-dpment-linuxea-b-55694cb7f5-lhkrb.com-127.0.0.1/8 130.130.1.122/24 version number 2.0
linuxea-dpment-linuxea-b-55694cb7f5-lhkrb.com-127.0.0.1/8 130.130.1.122/24 version number 2.0
linuxea-dpment-linuxea-b-55694cb7f5-576qs.com-127.0.0.1/8 130.130.0.15/24 version number 2.0

image-20220805170059188.png

由于配的host是

  hosts:
  - "dpment.linuxea.com"
  - "dpment"

因此在pod里面也可以进行访问

要在网格内和ingress同时访问, - mesh配置至关重要

创建一个cli

kubectl -n java-demo run cli --image=marksugar/alpine:netools -it --rm --restart=Never --command -- /bin/bash

curl开始模拟访问

bash-4.4# while true;do curl dpment;sleep 0.4;done
linuxea-dpment-linuxea-b-55694cb7f5-576qs.com-127.0.0.1/8 130.130.0.15/24 version number 2.0
linuxea-dpment-linuxea-b-55694cb7f5-lhkrb.com-127.0.0.1/8 130.130.1.122/24 version number 2.0
linuxea-dpment-linuxea-b-55694cb7f5-lhkrb.com-127.0.0.1/8 130.130.1.122/24 version number 2.0
linuxea-dpment-linuxea-b-55694cb7f5-lhkrb.com-127.0.0.1/8 130.130.1.122/24 version number 2.0
linuxea-dpment-linuxea-b-55694cb7f5-lhkrb.com-127.0.0.1/8 130.130.1.122/24 version number 2.0
linuxea-dpment-linuxea-b-55694cb7f5-lhkrb.com-127.0.0.1/8 130.130.1.122/24 version number 2.0
linuxea-dpment-linuxea-b-55694cb7f5-576qs.com-127.0.0.1/8 130.130.0.15/24 version number 2.0
linuxea-dpment-linuxea-b-55694cb7f5-lhkrb.com-127.0.0.1/8 130.130.1.122/24 version number 2.0
linuxea-dpment-linuxea-b-55694cb7f5-576qs.com-127.0.0.1/8 130.130.0.15/24 version number 2.0
linuxea-dpment-linuxea-b-55694cb7f5-576qs.com-127.0.0.1/8 130.130.0.15/24 version number 2.0
linuxea-dpment-linuxea-b-55694cb7f5-576qs.com-127.0.0.1/8 130.130.0.15/24 version number 2.0
linuxea-dpment-linuxea-b-55694cb7f5-576qs.com-127.0.0.1/8 130.130.0.15/24 version number 2.0
linuxea-dpment-linuxea-b-55694cb7f5-lhkrb.com-127.0.0.1/8 130.130.1.122/24 version number 2.0
linuxea-dpment-linuxea-b-55694cb7f5-576qs.com-127.0.0.1/8 130.130.0.15/24 version number 2.0
linuxea-dpment-linuxea-b-55694cb7f5-576qs.com-127.0.0.1/8 130.130.0.15/24 version number 2.0
linuxea-dpment-linuxea-b-55694cb7f5-576qs.com-127.0.0.1/8 130.130.0.15/24 version number 2.0
linuxea-dpment-linuxea-b-55694cb7f5-576qs.com-127.0.0.1/8 130.130.0.15/24 version number 2.0
linuxea-dpment-linuxea-c-568b9fcb5c-ltdcg.com-127.0.0.1/8 130.130.1.125/24 version number 3.0
linuxea-dpment-linuxea-c-568b9fcb5c-phn77.com-127.0.0.1/8 130.130.0.24/24 version number 3.0
linuxea-dpment-linuxea-b-55694cb7f5-576qs.com-127.0.0.1/8 130.130.0.15/24 version number 2.0
linuxea-dpment-linuxea-b-55694cb7f5-lhkrb.com-127.0.0.1/8 130.130.1.122/24 version number 2.0
linuxea-dpment-linuxea-b-55694cb7f5-lhkrb.com-127.0.0.1/8 130.130.1.122/24 version number 2.0
linuxea-dpment-linuxea-b-55694cb7f5-576qs.com-127.0.0.1/8 130.130.0.15/24 version number 2.0
linuxea-dpment-linuxea-b-55694cb7f5-lhkrb.com-127.0.0.1/8 130.130.1.122/24 version number 2.0
linuxea-dpment-linuxea-b-55694cb7f5-lhkrb.com-127.0.0.1/8 130.130.1.122/24 version number 2.0
linuxea-dpment-linuxea-c-568b9fcb5c-phn77.com-127.0.0.1/8 130.130.0.24/24 version number 3.0
linuxea-dpment-linuxea-b-55694cb7f5-lhkrb.com-127.0.0.1/8 130.130.1.122/24 version number 2.0
linuxea-dpment-linuxea-b-55694cb7f5-576qs.com-127.0.0.1/8 130.130.0.15/24 version number 2.0
linuxea-dpment-linuxea-b-55694cb7f5-576qs.com-127.0.0.1/8 130.130.0.15/24 version number 2.0
linuxea-dpment-linuxea-b-55694cb7f5-576qs.com-127.0.0.1/8 130.130.0.15/24 version number 2.0
linuxea-dpment-linuxea-b-55694cb7f5-lhkrb.com-127.0.0.1/8 130.130.1.122/24 version number 2.0
linuxea-dpment-linuxea-c-568b9fcb5c-ltdcg.com-127.0.0.1/8 130.130.1.125/24 version number 3.0
linuxea-dpment-linuxea-b-55694cb7f5-lhkrb.com-127.0.0.1/8 130.130.1.122/24 version number 2.0

此时的kiali的示意图就变成了istio-20220805-5.gif

相关文章

LeaferJS 1.0 重磅发布:强悍的前端 Canvas 渲染引擎
10分钟搞定支持通配符的永久有效免费HTTPS证书
300 多个 Microsoft Excel 快捷方式
一步步配置基于kubeadmin的kubevip高可用
istio全链路传递cookie和header灰度
REST Web 服务版本控制

发布评论