istio: обновить envoyfilter на istiogateway до нового синтаксиса - PullRequest
0 голосов
/ 17 марта 2020

Я пытаюсь применить некоторый код Lua только к модулю шлюза istio-ingressgateway. В общем, я хочу запускать код 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: enabled
  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

Я не нашел слишком много примеров нового синтаксиса, и ни один, который применяет фильтр к входному шлюзу. У меня есть развернутый шлюз, но я не использую инъекцию коляски.

Знаете ли вы, как я мог бы создать фильтр-посланник так, чтобы я мог применять код Lua к каждому входящему запросу с использованием нового синтаксиса? Есть ли хорошие примеры того, как это сделать, используя новый синтаксис? Любой совет очень ценится.

1 Ответ

1 голос
/ 09 апреля 2020

Вот то, что я попробовал на istio 1.5.x, я использовал тестовый пример tests/testdata/networking/envoyfilter-without-service/configs.yaml и изменил workload на istio: ingressgateway, чтобы соответствовать входному шлюзу istio.

apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
  name: test-lua
  namespace: istio-system
spec:
  workloadSelector:
    labels:
      istio: ingressgateway
  configPatches:
  - applyTo: HTTP_FILTER
    match:
      listener:
        filterChain:
          filter:
            name: "envoy.http_connection_manager"
            subFilter:
              name: "envoy.router"
    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:logWarn("Hello World")
            end
...