首页 > 其他分享 >Istio 目标规则 (Destination Rule)

Istio 目标规则 (Destination Rule)

时间:2023-05-15 16:24:42浏览次数:43  
标签:httpd destination name web app Destination Istio Rule nginx

 

 

 

 

 

 

 

 

 

 

 

 

Destination Rule 还可以做什么
通常在生产场景下,用使用 Destination Rule 对用户进行身份、地址位置等条件的识别后的流量路由,例如部分用户优先享用新版本,则可以通过HTTP Header附加相关的字段进行识别,路由到新版本的服务上。或者在版本更新的时候,使用灰度发布,对新旧版本标记子集,按照不同的负载百分比进行调整逐步迭代。

通过例子来理解
有两个Deployment(nginx 及 httpd),通过Service关联到一起,通过访问Service只能做到简单的负载均衡,通过实验发现 nginx 和 httpd 流量各自在 50% 左右。


 apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: nginx
  name: nginx-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: nginx
        server: web
    spec:
      containers:
        - image: 'nginx:latest'
          name: nginx-deployment
---
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: httpd
  name: httpd-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: httpd
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: httpd
        server: web
    spec:
      containers:
        - image: 'httpd:latest'
          name: httpd-deployment
---
apiVersion: v1
kind: Service
metadata:
  name: web-service
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    server: web
  type: ClusterIP

如果想实现更加细颗粒度的流量管控,通过引入Istio Vistrual Service 及 Destination Rule,非常简单的就实现复杂的流量管理。

DestinationRule 根据标签将流量分成不同的子集,已提供 VirtualService 进行调度,并且设置相关的负载百分比实现精准的控制。

 apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: web-dr
spec:
  host: web-svc
  subsets:
  - name: httpd
    labels:
      app: httpd
  - name: nginx
    labels:
      app: nginx
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: web-vs
spec:
  hosts:
  - web-service
  http:
  - route:
    - destination:
        host: web-service
        subset: nginx
      weight: 80
    - destination:
        host: web-service
        subset: httpd
      weight: 20
通过客户端测试以上的实验,请留意客户端也必须经过 Istio 注入,因为只有客户端被 Istio 注入才可以接收到来自 Pilot 有关 Virtual Service 和 Destination Rule 的配置信息,才可以保证流量接管生效。

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: client-deployment
  name: client-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: client-deployment
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: client-deployment
    spec:
      containers:
        - image: 'busybox:latest'
          name: client-deployment
          command: [ "/bin/sh", "-c", "sleep 3600"]

更丰富的流量策略
在生产环境中,应用到的流量策略不单单只是加权的负载均衡那么简单, Destination Rule 还支持 最小连接数、随机负载等等。

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: web-dr
spec:
  host: web-svc
  trafficPolicy:
    loadBalancer:
      simple: RANDOM
  subsets:
  - name: httpd
    labels:
      app: httpd
  - name: nginx
    labels:
      app: nginx
    trafficPolicy:
      loadBalancer:
        simple: LEAST_CONN

Destination Rule 字段解析
host - 指的是 Kuberentes 中的服务
subsets - 针对不同标签选择的流量子集
loadBalancer - 负载均衡路由策略

更丰富的流量策略
在生产环境中,应用到的流量策略不单单只是加权的负载均衡那么简单, Destination Rule 还支持 最小连接数、随机负载等等。

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: web-dr
spec:
  host: web-svc
  trafficPolicy:
    loadBalancer:
      simple: RANDOM
  subsets:
  - name: httpd
    labels:
      app: httpd
  - name: nginx
    labels:
      app: nginx
    trafficPolicy:
      loadBalancer:
        simple: LEAST_CONN

Destination Rule 字段解析
host - 指的是 Kuberentes 中的服务
subsets - 针对不同标签选择的流量子集
loadBalancer - 负载均衡路由策略

  上章展示了 destination rule 一个实例。

        destination rules 是 Istio 流量路由的关键功能,它不能独自使用,必须跟 Virtual Service 共同发挥作用。当 destination rules 跟 virtual service 共同使用的时候,virtual service 决定将流量路由到逻辑地址,而 destination rules 则决定流量路由到物理地址。

        virtual service 跟 destination rules 路由关系就像变量到内存的地址映射一样,destination 代表内存实际地址,而 virtual service 作用就像程序的指针。

        destination rules 通常用在微服务的版本分组上(例如可以通过 version 标签将微服务进行分组)。通过 destination rules 的分组规则可以实现将流量路由到服务的不同版本中,进而实现类似灰度、金丝雀、蓝绿等版本分流的策略。

        destination rules 不仅可以决定把流量路由到何处,还可以制定如何路由流量(比如是轮询路由流量,还是随机路由流量等等)。有关 destination rules 选项可以参考  Destination Rule 指南。

 

  默认情况下,Istio 使用轮询的负载均衡路由策略(round-robin),也就是说服务所有实例按顺序接收请求。当然 Istio 也支持如下的模型,这些模型都可以通过在 destination rule 中进行指定:

Random:请求被随机分配给服务的实例

Weighted:请求基于权重被分配给服务的实例

Least requests:请求被分配给服务最少被访问的实例

 

标签:httpd,destination,name,web,app,Destination,Istio,Rule,nginx
From: https://www.cnblogs.com/fenghua001/p/17402234.html

相关文章

  • 问题解决:TNS-12543: TNS:destination host unreachable
    环境:11.2.0.3ADG(db11g\db11gadg\db11gcas)在自己先前克隆后的环境互相tnsping报错。tnsping本机ok,tnsping其他机器均报错:[oracle@db11g~]$tnspingjingyuTNSPingUtilityforLinux:Version11.2.0.3.0-Productionon13-MAY-202308:09:11Copyright(c)1997,......
  • 《 Istio 权威指南 》新著重磅发行!华为云云原生团队匠心力作
    摘要:由Istio社区指导委员会成员和华为云云原生团队联合编著的云原生服务网格书籍《Istio权威指南》重磅上市本文分享自华为云社区《《Istio权威指南》新著重磅发行!华为云云原生团队匠心力作》,作者:云容器大未来。由 Istio社区指导委员会成员和华为云云原生团队联合编著......
  • Istio数据面新模式:Ambient Mesh技术解析
    摘要:AmbientMesh以一种更符合大规模落地要求的形态出现,克服了大多数Sidecar模式的固有缺陷,让用户无需再感知网格相关组件,真正将网格下沉为基础设施。本文分享自华为云社区《华为云云原生团队:Istio数据面新模式AmbientMesh技术解析》,作者:云容器大未来。如果说在以Kubernetes......
  • flask--app.add_url_rule()函数 和 类视图详解
    flask--app.add_url_rule()函数和类视图详解app.add_url_rule()函数在flask中,我们知道给一个函数添加url的时候,只需要使用装饰器@app.route('')装饰对应的函数就可以了。为什么这个装饰器就可以给函数视图添加url规则呢?查看app.route()源码发现,这个装饰器在里面调用的另外一......
  • 无法将“Autodesk.autocad.livepreview.previewruleprovider”的对象强制转换为类型“
    具体问题如下图所示:在vs2010中调试中,会调用CAD2014,这时就会出现上述的问题错误;经查找,具体的问题是因为:cad的dll引用中,“复制本地”设置为True,因更改为false;这里要注意的是,每个项目中的引用都要更改为false,如Hello项目和InitAndOpt项目中的引用,都要为false,否则这个错误一直会出......
  • istio的安装
     1.下载istio-1.17.1-linux-amd64.tar.gz,解压之后成istio-1.17.12.进入istiodrwxr-x--- 2rootroot   22Feb2217:57bin ---------------istio的命令-rw-r--r-- 1rootroot11348Feb2217:57LICENSEdrwxr-xr-x 5rootroot   52Feb2217:57manife......
  • istio 请求超时相关详解
    虚拟服务中这段代码含义虚拟服务中这段代码含义“spec:gateways:-magicboard-meshhosts:-magicboard-magicboard.lh.prodhttp:-name:defaultretries:attempts:3retryOn:'reset,connect-failure,retriable-......
  • istio: 修改默认cpu/memory limit
    1.概述默认istio的limist是:cpu:2000m memory:1024Mirequest也是很大,部署用例一多,很浪费资源,所以就想修改istio的默认配置2. 生成当前的manifest文件istioctlmanifestgenerate>generated-manifest.yaml这个文件很大,有1w多行,我就不贴出来了,这个是istio的部署......
  • istio: 取消注入sidecar
    1.问题Consul注入istio以后,功能异常了,后台管理页面都打不开,无法选择leader:2023-04-19T09:33:27.886Z[ERROR]agent:Coordinateupdateerror:error="Noclusterleader"2023-04-19T09:33:46.598Z[ERROR]agent.anti_entropy:failedtosyncremotestate:error="Noclu......
  • DG搭建报错 ORA-16047: DGID mismatch between destination setting and target datab
    最近有需求要给数据库新搭一个DG变为一主两从,搭好之后测试发现一直没有同步,检查问题。从库一直等待接收71855号日志主库有归档日志发送失败的报错,可以看到归档到dest_2(原从库)是成功的,而到desc_3(新从库)则是失败的根据日志提示查看arc2进程的trace日志看到有ora-16058和ora-16047的报......