EnvoyFilter流量过滤器

Istio中使用的SideCar(Envoy代理),支持EnvoyFilter过滤器配置。EnvoyFilter能够通过累加式的配置,定制Istio Pilot生成的Envoy配置。

Istio官方文档:https://istio.io/latest/docs/reference/config/networking/envoy-filter/

EnvoyProxy官方文档:https://www.envoyproxy.io/docs/envoy/latest/

警告:EnvoyFilter配置和Istio内部实现、Envoy的xDS API密切相关,Istio版本不同其配置可能发生大幅变化,错误的配置可能导致整个集群不可用,而且官方文档也极为隐晦难懂,实际使用时,需要参考文档具体实验并小心部署。

相关概念

EnvoyFilterEnvoyFilter本身本身是Istio中定义的一种资源对象,其中能够通过配置Lua脚本等方式定义HTTP流量的请求和响应拦截处理逻辑,EnvoyFilter能通过k8s标签机制绑定到Istio网关或VirtualService上。

自定义EnvoyFilter例子

我们这里实现一个简单的例子,来展示EnvoyFilter的用法,Istio版本为1.14.1。下面例子中,我们对网关使用Lua脚本进行了配置,让所有流量统统返回403

apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
  name: demo-gateway-lua-filter
  namespace: istio-system
spec:
  workloadSelector:
    labels:
      istio: ingressgateway
  configPatches:
    - applyTo: HTTP_FILTER
      match:
        context: GATEWAY
      patch:
        operation: INSERT_BEFORE
        value:
          name: envoy.lua
          typed_config:
            "@type": "type.googleapis.com/envoy.extensions.filters.http.lua.v3.Lua"
            inlineCode: |
              function envoy_on_request(request_handle)
                request_handle:respond({[":status"] = "403"},"nope")
              end
  • spec.workloadSelector:用于通过标签机制匹配EnvoyFilter起作用的Pod集合。
  • spec.configPatches:这个配置就比较复杂了,我们前面说过EnvoyFilter是累加式的配置,可以看作一个过滤器链上有许多“补丁”,这里配置的就是EnvoyFilter在哪起作用,以及具体的逻辑。
作者:Gacfox
版权声明:本网站为非盈利性质,文章如非特殊说明均为原创,版权遵循知识共享协议CC BY-NC-ND 4.0进行授权,转载必须署名,禁止用于商业目的或演绎修改后转载。
Copyright © 2017-2024 Gacfox All Rights Reserved.
Build with NextJS | Sitemap