istio: 将istio网关上的envoyfilter升级到新语法

我正在尝试将一些Lua代码应用到istio-ingressgateway pod上。基本上,我想对进入ingress gateway的每个请求运行一些Lua代码。

我已经能够使用旧的已弃用的语法将其工作,如下所示filters。

这适用于Istio 1.4.6:

`` ` apiVersion:networking.istio.io/v1alpha3 kind:EnvoyFilter metadata: name:my-filter namespace:default labels: some-labels spec: workloadSelector: labels: istio:ingressgateway authn-ns1:启用 filters:

  • filterName:envoy.lua filterType:HTTP listenerMatch: listenerType:GATEWAY listenerProtocol:HTTP filterConfig: inlineCode:| function envoy_on_request(request_handle) request_handle:logDebug("Hello World") end

'' '

但是,我无法使其与新语法一起工作,并且对如何将其组合在一起有些困惑。我尝试合并文档中的示例, https://istio.io/docs/reference/config/networking/envoy-filter/ 但是没有成功让它起作用。

`` ` apiVersion:networking.istio.io/v1alpha3 kind:EnvoyFilter metadata: name:my-filter namespace:default spec: workloadSelector: labels: istio:ingress-gateway configPatches:

  • applyTo:NETWORK_FILTER match: context:GATEWAY listener: filterChain: filter: name:"envoy.http_connection_manager" patch: operation:INSERT_BEFORE value:# LUA filter specification name: envoy.lua typed_config: "@ type":"type.googleapis.com/envoy.config.filter.http.lua.v2.Lua" inlineCode:| function envoy_on_request(request_handle) request_handle:logDebug("Hello World") end

'' '

我没有找到太多新语法的例子,也没有将过滤器应用于入口网关的任何例子。我确实已经部署了网关,但我没有使用sidecar注入。

您知道如何制作envoyfilter,以便我可以使用新语法将Lua代码应用于每个传入请求吗?是否有使用新语法进行此操作的好示例?任何建议都将不胜感激。

点赞
用户9370348
用户9370348

以下是我在 istio 1.5.x 上尝试的内容,我使用了测试用例 tests/testdata/networking/envoyfilter-without-service/configs.yaml,并更改了 workload 以匹配 istio ingressgateway。

apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
  name: test-lua
  namespace: istio-system
spec:
  workloadSelector: # 选择目标工作负载
    labels:
      istio: ingressgateway
  configPatches:
  - applyTo: HTTP_FILTER # 应用于 HTTP_FILTER
    match:
      listener:
        filterChain:
          filter:
            name: "envoy.http_connection_manager"
            subFilter:
              name: "envoy.router"
    patch:
      operation: INSERT_BEFORE
      value: # lua 过滤器规范
        name: envoy.lua
        typed_config:
          "@type": "type.googleapis.com/envoy.config.filter.http.lua.v2.Lua"
          inlineCode: | # 内联代码
            function envoy_on_request(request_handle)
              request_handle:logWarn("Hello World")
            end
2020-04-09 14:12:36