ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Envoy 流量迁移

2022-09-05 16:33:07  阅读:201  来源: 互联网

标签:name envoy Envoy 流量 address 迁移 runtime 路由


流量迁移

  • 通过在路由中配置运行时对象选择特定路由以及相应集群的概率的变动,从而实现将虚拟主机中特定路由的流量逐渐从一个集群迁移到另一个集群;
  • 在路由匹配方面,Envoy在检测到第一个匹配时即终止后续检测;因而,流量迁移应该如此配置

    • 配置两个使用相同的match条件的路由条目

    • 在第一个路由条目中配置runtime_fraction对象,并设定其接收的流量比例

    • 该流量比例之外的其它请求将由第二个路由条目所捕获

  • 用户再通过不断地通过Envoy的admin接口修改runtime_fraction对象的值完成流量迁移;

    • ~]# curl -XPOST http://envoy_ip:admin_port/runtime_modify?key1=val1&key2=val2

流量迁移配置格式

---
  routes:
  - match: # 定义路由匹配参数;
    prefix|path|regex: ... # 流量过滤条件,三者必须定义其中之一;
    runtime_fraction: # 额外匹配指定的运行时键值,每次评估匹配路径时,它必需低于此字段指示的匹配百分比;支持渐进式修改;
      default_value: # 运行时键值不可用时,则使用此默认值;
        numerator: # 指定分子,默认为0;
        denominator: # 指定分母,小于分子时,最终百分比为1;分母可固定使用HUNDRED(默认)、TEN_THOUSAND和MILLION;
      runtime_key: routing.traffic_shift.KEY # 指定要使用的运行时键,其值需要用户自定义;
    route:
      custer: app1_v1
  - match:
    prefix|path|regex: ... # 此处的匹配条件应该与前一个路由匹配条件相同,以确保能够分割流量;
    route:
      cluster: app1_v2 # 此处的集群通常是前一个路由项目中的目标集群应用程序的不同版本;

流量迁移配置示例

admin:
  profile_path: /tmp/envoy.prof
  access_log_path: /tmp/admin_access.log
  address:
    socket_address:
       address: 0.0.0.0
       port_value: 9901

layered_runtime:
  layers:
  - name: admin
    admin_layer: {}
       
static_resources:
  listeners:
  - name: listener_0
    address:
      socket_address: { address: 0.0.0.0, port_value: 80 }
    filter_chains:
    - filters:
      - name: envoy.filters.network.http_connection_manager
        typed_config:
          "@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
          stat_prefix: ingress_http
          codec_type: AUTO
          route_config:
            name: local_route
            virtual_hosts:
            - name: demoapp
              domains: ["*"]
              routes:
              - match:
                  prefix: "/"
                  runtime_fraction:
                    default_value:
                      numerator: 100
                      denominator: HUNDRED
                    runtime_key: routing.traffic_shift.demoapp
                route:
                  cluster: demoappv10
              - match:
                  prefix: "/"
                route:
                  cluster: demoappv11
          http_filters:
          - name: envoy.filters.http.router
            typed_config:
              "@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Router

  clusters:
  - name: demoappv10
    connect_timeout: 0.25s
    type: STRICT_DNS
    lb_policy: ROUND_ROBIN
    load_assignment:
      cluster_name: demoappv10
      endpoints:
      - lb_endpoints:
        - endpoint:
            address:
              socket_address:
                address: demoappv10
                port_value: 80

  - name: demoappv11
    connect_timeout: 0.25s
    type: STRICT_DNS
    lb_policy: ROUND_ROBIN
    load_assignment:
      cluster_name: demoappv11
      endpoints:
      - lb_endpoints:
        - endpoint:
            address:
              socket_address:
                address: demoappv11
                port_value: 80

动态调整流量分发比例

# 将保留给demoappv10集群的流量比例调整为90%,方法是将指定键的值定义为相应的分子数即可
curl -XPOST http://envoy_ip:9901/runtime_modify?routing.traffic_shift.demoapp=90

 

标签:name,envoy,Envoy,流量,address,迁移,runtime,路由
来源: https://www.cnblogs.com/wangguishe/p/16658601.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有