美文网首页
Rancher中使用Istio流量分配

Rancher中使用Istio流量分配

作者: OPS_Joy | 来源:发表于2020-09-18 21:26 被阅读0次
  • 什么是istio
    Istio 是一个由谷歌、IBM 与 Lyft 共同开发的开源项目,旨在提供一种统一化的微服务连接、安全保障、管理与监控方式,
    Istio 项目能够为微服务架构提供流量管理机制,同时亦为其它增值功能(包括安全性、监控、路由、连接管理与策略等)
    更详细的资料参考istio中文网站https://istio.io/latest/zh/docs/
  • 通过rancher平台安装istio


    图片.png

    等待几分钟,安装完毕,查看组件信息


    图片.png
    图片.png
  • 测试流量分发准备
    新建一个命名空间joy-ns,开启istio自动注入,一个busybox做客户端,两个deployment,两个service,一个通用service,一个istio虚拟service
    简易流程图


    图片.png

    Deployment文件

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-v1
  namespace: joy-ns
spec:
  replicas: 1
  selector:
    matchLabels:
      app: myapp
      version: v1
  template:
    metadata:
      labels:
        app: myapp
        version: v1
    spec:
      containers:
      - name: myapp
        image: ikubernetes/myapp:v1
        imagePullPolicy: IfNotPresent
        ports:
        - name: http
          containerPort: 80
-----
apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-v2
  namespace: joy-ns
spec:
  replicas: 1
  selector:
    matchLabels:
      app: myapp
      version: v2
  template:
    metadata:
      labels:
        app: myapp
        version: v2
    spec:
      containers:
      - name: myapp
        image: ikubernetes/myapp:v2
        imagePullPolicy: IfNotPresent
        ports:
        - name: http
          containerPort: 80

service文件

apiVersion: v1
kind: Service
metadata:
  name: myappv1-svc
  namespace: joy-ns
  labels:
    app: myapp
    version: v1
spec:
  selector:
    app: myapp
    version: v1
  type: ClusterIP
  ports:
  - port: 80
    targetPort: 80
-----
apiVersion: v1
kind: Service
metadata:
  name: myappv2-svc
  namespace: joy-ns
  labels:
    app: myapp
    version: v2
spec:
  selector:
    app: myapp
    version: v2
  type: ClusterIP
  ports:
  - port: 80
    targetPort: 80

通用service

apiVersion: v1
kind: Service
metadata:
  name: myapp-svc
  namespace: joy-ns
  labels:
    app: myapp
spec:
  selector:
    app: myapp
  type: ClusterIP
  ports:
  - port: 80
    targetPort: 80

创建所有yaml

kubectl apply -f .
[root@harbor myapp]# kubectl get pods -n joy-ns
NAME                        READY   STATUS    RESTARTS   AGE
busybox-65fd4885b7-hjfx9    2/2     Running   0          17h
myapp-v1-6f6788f845-r9cpm   2/2     Running   0          19h
myapp-v2-5c98456b77-r9z7r   2/2     Running   0          19h
[root@harbor myapp]# kubectl get svc -n joy-ns
NAME          TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE
busybox       ClusterIP   None            <none>        42/TCP    17h
myapp-svc     ClusterIP   10.43.111.247   <none>        80/TCP    17h
myappv1-svc   ClusterIP   10.43.175.13    <none>        80/TCP    17h
myappv2-svc   ClusterIP   10.43.21.36     <none>        80/TCP    17h

进入客户端访问
使用wget -q -O - http://myapp-svc不停刷新

图片.png
可以看到默认情况下,应该是轮询状态50%分配。
现在通过启用istio虚拟服务,配置权重比例的路由
虚拟service文件
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: myapp-svc-vt
  namespace: joy-ns
spec:
  hosts:
  - myapp-svc
  http:
  - route:
    - destination:
        host: myappv1-svc
      weight: 90
    - destination:
        host: myappv2-svc
      weight: 10

创建yaml,查看


图片.png
图片.png

相关文章

网友评论

      本文标题:Rancher中使用Istio流量分配

      本文链接:https://www.haomeiwen.com/subject/amrcyktx.html