首页 > 其他分享 >Istio envoy filter

Istio envoy filter

时间:2022-10-27 16:14:01浏览次数:48  
标签:补丁 Envoy 配置 EnvoyFilter Istio filter envoy

EnvoyFilter CR

  • EnvoyFilter

    •  EnvoyFilter CR提供了自定义Sidecar Envoy配置的接口,其支持的配置功能包括修改指定字段的值、添加特定的过滤器甚至是新增Listener和Cluster等
    • 常在Istio原生的各CR未能提供足够的配置机制,或者无法支持到的配置场景中使用

      • 简单来说,EnvoyFilter提供的是直接向Envoy配置文件打补丁的接口,从而为网格中的各Envoy实例提供了以Envoy原生方式进行配置的机制
    • 同Sidecar等其它几个位于同一API群组(networking.istio.io/v1beta1)内的CR不同的是,EnvoyFilter CR资源对象通过自适应的方式应用于workload之上
      • 一个名称空间当中可同时存在多个应用于同一workload实例的EnvoyFilter CR资源对象

      • 多个EnvoyFilter资源对象在应用时会有着特定的次序:首先是root namespace中的所有EnvoyFilter,而后才是workload实例当前名称空间中所有匹配到的各EnvoyFilter资源对象
  • 注意事项

    • 对于不同的Istio发行版来说,EnvoyFilter提供的配置可能不具有向后兼容性;

    • Istio Proxy版本升级时,需要仔细识别配置字段的废弃和添加等所产生的影响;

    • 多个EnvoyFilters资源对象应用于同一个workload时,它们会根据创建的时间顺次生效,而配置冲突时其结果将无从预料;
    • 切记要谨慎使用该功能,不当的配置定义,可能会破坏网格的稳定性;

EnvoyFilter CR 的资源规范

使用EnvoyFilter配置Envoy

  • EnvoyFilter的关键组成部分

    • 使用workloadSelector指定要配置的Envoy实例

      • 省略该字段,意味着将配置到同一个名称空间下的所有Envoy实例;

      • 若EnvoyFilter定义在了根名称空间,且省略了该字段,则意味着配置到网格中所有名称空间中的Envoy实例

    • 由configPatches给出配置补丁

    • 补丁排序

      • 多个补丁间存在依赖关系时,其应用次序举足轻重

      • EnvoyFilter API内置了两种应用次序

        • 根名称空间下的EnvoyFilter将先于名称空间下的EnvoyFilter资源;

        • 补丁集中的多个补丁以它们定义的顺序完成打补丁操作;

      • 也可以为EnvoyFilter使用priority字段定义其优先级,可用的取值范围是0至2^32-1;

        • 负数优先级,表示将于default EnvoyFilter之前应用

  • 补丁及其位置

    • applyTo指定补丁在Envoy配置文件中要应用到的位置(配置段)

    • match指定补丁在Envoy配置文件中相应的位置上要应用到的具体配置对象(Listener、RouteConfiguration或Cluster)
    • 补丁的内容及相应的操作则由patch字段定义

EnvoyFilter配置示例

apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
  name: custom-protocol
  namespace: istio-config # as defined in meshConfig resource.
spec:
  configPatches:
  - applyTo: NETWORK_FILTER
    match:
      context: SIDECAR_OUTBOUND # will match outbound listeners in all sidecars
      listener:
        portNumber: 9307
        filterChain:
          filter:
            name: "envoy.filters.network.tcp_proxy"
    patch:
      operation: INSERT_BEFORE
      value:
        # This is the full filter config including the name and typed_config section.
        name: "envoy.extensions.filters.network.mongo_proxy"
        typed_config:
          "@type": "type.googleapis.com/envoy.extensions.filters.network.mongo_proxy.v3.MongoProxy"
          ...
  - applyTo: NETWORK_FILTER # http connection manager is a filter in Envoy
    match:
      # context omitted so that this applies to both sidecars and gateways
      listener:
        filterChain:
          filter:
            name: "envoy.filters.network.http_connection_manager"
    patch:
      operation: MERGE
      value:
        name: "envoy.filters.network.http_connection_manager"
        typed_config:
          "@type": "type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager"
          common_http_protocol_options:
            idle_timeout: 30s

参考文档

https://istio.io/latest/zh/docs/reference/config/networking/envoy-filter/

标签:补丁,Envoy,配置,EnvoyFilter,Istio,filter,envoy
From: https://www.cnblogs.com/wangguishe/p/16832579.html

相关文章

  • istio部署demoapp应用 (十三)Outlier Detection
    异常值探测配置示例常用的错误标识consecutiveLocalOriginFailuresconsecutiveGatewayErrors只包括502、503和504错误0值表示禁用consecutive5xxErrors......
  • Spring中过滤器(Filter)和拦截器(Interceptor)的区别和联系
    在我们日常的开发中,我们经常会用到Filter和Interceptor。有时同一个功能。Filter可以做,Interceptor也可以做。有时就需要考虑使用哪一个比较好。这篇文章主要介绍一下,二者......
  • istio部署demoapp应用 (十一)负载均衡
    destinationrule-demoapp.yamlapiVersion:networking.istio.io/v1beta1kind:DestinationRulemetadata:name:demoappspec:host:demoapptrafficPolicy:......
  • istio部署demoapp应用 (十)流量镜像
    virtualservice-demoapp.yamlapiVersion:networking.istio.io/v1beta1kind:VirtualServicemetadata:name:demoappspec:hosts:-demoapphttp:-name:......
  • istio部署demoapp应用 (八)故障注入
    故障注入故障注入有两种典型的场景delay:注入“延迟”abort:注入“中断”virtualservice-demoapp.yamlapiVersion:networking.istio.io/v1beta1kind:Virtu......
  • Istio ServiceEntry
    ServiceEntry介绍ServiceEntry用于将未能自动添加至网格中的服务,以手动形式添加至网格中,以使得网格内的自动发现机制能够访问或路由到这些服务未能自动添加至网格中的......
  • Istio gateway
    Gateway配置要点Gateway定义运行在网格边缘的负载均衡器,负责接收入站或出站的HTTP/TCP连接主要定义应该暴露到网格外部的端口、要使用的协议类型、以及SNI配置等......
  • Istio DestinationRule
    DestinationRule配置要点DestinationRule用于配置路由完成之后的应用于服务的流量策略,即配置如何将流量调度至上游端点,同时也是为VirtualService的Destination指定的目标......
  • istio部署demoapp应用 (六)基于权重的流量分割
    架构图virtualservice-demoapp.yamlapiVersion:networking.istio.io/v1beta1kind:VirtualServicemetadata:name:demoappspec:hosts:-demoapphttp:......
  • istio部署demoapp应用 (四) Ingress-gateway暴露demoapp
    proxy-gateway.yamlapiVersion:networking.istio.io/v1beta1kind:Gatewaymetadata:name:proxy-gatewaynamespace:istio-systemspec:selector:app:i......