istio envoyfilter yaml 解释

envoyfilter 内容较多,每个部分分开解释

workloadSelector

描述后续的限流操作在哪些负载上生效
如果省略则将配置应用到 namespace 下所有的负载,如果 namespace 为根 namespace(istio-system)则应用于所有命名空间下的负载

spec:
  workloadSelector:
    labels:
      app: reviews

configPatches

包含三个核心对象:applyTo、match 和 patch(满足 match 条件的 applyTo 对象上进行 patch 操作)

applyTo:限流配置应用的具体对象

applyTo 的取值较多,且很多我目前还没了解过,因此就记录目前接触最多的 HTTP_FILTER

HTTP_FILTER:可以实现大多数七层能力的扩展,比如限流、指标监控等

applyTo 必须配套 match 条件,例如:以下配置表示 match 条件选择 envoy.filters.network.http_connection_manager 这个网络过滤器

configPatches:
  - applyTo: HTTP_FILTER
    match:
      context: SIDECAR_INBOUND
      listener:
        filterChain:
          filter:
            name: envoy.filters.network.http_connection_manager

match:匹配条件

context:配置 envoy 的生效位置(出流量、入流量或网关)
  • ANY:所有 Sidecar 和 Gateway 的 listener、router 和 cluster
  • SIDECAR_INBOUND:只作用 Sidecar 入流量的 listener、router 和 cluster
  • SIDECAR_OUTBOUND:只作用 Sidecar 出流量的 listener、router 和 cluster
  • GATEWAY:只作用 Gateway 的 listener、router 和 cluster
listener:监听器匹配
  • name:匹配特定 name 的监听器(少量使用)

  • portNumber:匹配监听器接收或发送流量的端口(少量使用)

  • filterChain:匹配监听器上的一个特定的过滤器链(常见)
    通过 subfilter 匹配过滤器上的子过滤器,可以用于七层的过滤器匹配

    spec:
      configPatches:
    	- applyTo: HTTP_FILTER
    	  match:
    	    context: SIDECAR_INBOUND
    		listener:
    		  portNumber: 8080
    		  filterChain:
    		    filter:
    			  name: "envoy.filters.network.http_connection_manager"
    
routeConfigurationMatch:路由匹配

路由配置用于在 envoy 中定义七层流量路由,应用最广泛的是 vhost(VirtualHostMatch)
以下示例表示根据 vhost 的名称 name 匹配一个 virtual_host:

spec:
  configPatches:
    - applyTo: VIRTUAL_HOST
      match:
        context: GATEWAY
        routeConfiguration:
          vhost:
            name: "virtual_host"
            route:
              action: ANY

action 支持以下取值:

  • ROUTE:将流量路由到集群/加权集群
  • REDIRECT:重定向请求
  • DIRECT_RESPONSE:直接响应具有特定有效负载的请求
  • ANY:以上所有三个路由操作

patch:操作描述

operation:具体的操作

支持以下取值:MERGE、ADD、REMOVE、INSERT_BEFORE、INSERT_AFTER、INSERT_FIRST、REPLACE
其中,针对 HTTP_FILTER,operation 的取值为 INSERT_BEFORE

spec:
  configPatches:
    - applyTo: HTTP_FILTER
      match:
        context: SIDECAR_OUTBOUND
        listener:
          filterChain:
            filter:
              name: "envoy.filters.network.http_connection_manager"
      patch:
        operation: INSERT_BEFORE
value:操作的配置

针对 HTTP_FILTER,value 的值通常配置如下:

spec:
  configPatches:
    - applyTo: HTTP_FILTER
      match:
        context: SIDECAR_INBOUND
        listener:
          filterChain:
            filter:
              name: "envoy.filters.network.http_connection_manager"
      patch:
        operation: INSERT_BEFORE
        value:
          name: envoy.filters.http.local_ratelimit
          typed_config:
            "@type": type.googleapis.com/udpa.type.v1.TypedStruct
            type_url: type.googleapis.com/envoy.extensions.filters.http.local_ratelimit.v3.LocalRateLimit
            value:
              stat_prefix: http_local_rate_limiter

因为目前也正在学习,学到一点更新一点,同时也不可避免的会存在错误,望指正!

你可能感兴趣的:(istio,istio,云原生)