Как заставить фильтр lua envoy работать на кластере istio? - PullRequest
1 голос
/ 09 апреля 2019

Я пытаюсь настроить фильтр посланника lua для работы с шлюзом istio, но я добавил в кластер, и он работает так, как будто фильтр не существует.

Я настроил свой кластер istio на GKEиспользуя это руководство https://istio.io/docs/setup/kubernetes/install/kubernetes/.

У кого-нибудь была такая же проблема?

apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
  name: edge-lua-filter
spec:
  workloadLabels:
    app: httpbin-gateway
  filters:
  - listenerMatch:
      listenerType: GATEWAY
    filterName: envoy.lua
    filterType: HTTP
    filterConfig:
      inlineCode: |
        -- Called on the request path.
        function envoy_on_request(request_handle)
            request_handle:headers():add("foo", "bar")
        end
        -- Called on the response path.
        function envoy_on_response(response_handle)
            body_size = response_handle:body():length()
            response_handle:headers():add("response-body-size", tostring(body_size))
        end
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: httpbin-gateway
  namespace: foo
spec:
  selector:
    istio: ingressgateway # use Istio default gateway implementation
  servers:
  - port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
    - "*"
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: httpbin
  namespace: foo
spec:
  hosts:
  - "*"
  gateways:
  - httpbin-gateway
  http:
  - route:
    - destination:
        port:
          number: 8000
        host: httpbin.foo.svc.cluster.local

Ответы [ 3 ]

0 голосов
/ 30 мая 2019

Я согласен с larsitto , что у вас, вероятно, проблема с workloadLabels - попробуйте оставить его пустым или указать метку, указанную в вашем развертывании> spec> template> label []

Этот код работает для меня, например:

apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
  name: hello_world
spec:
  workloadLabels:
  filters:
  - listenerMatch:
      listenerType: SIDECAR_INBOUND
      listenerProtocol: HTTP
    filterName: envoy.lua
    filterType: HTTP
    filterConfig:
      inlineCode: |
        ...
0 голосов
/ 05 июня 2019

У меня точно такая же проблема.Я хотел бы применить EnvoyFilter с GATEWAY listenerType.

Моя проблема заключается в том, что этот фильтр применяется ко всем шлюзам istio, развернутым в моем кластере, и это не то, что я хочу.

Например, у меня есть 2 шлюза: один для образца bookinfo и другой для MyOwnService.

Теперь, если я разверну EnvoyFilter с GATEWAY listenerType, он будет выполнен на шлюзе bookinfo И шлюзе MyOwnService.

Итак, я намеревалсяиспользуйте свойство spec.workloadLabels моего EnvoyFilter, чтобы применить его только к шлюзу MyOwnService, но я не знаю, какие метки я должен назначить здесь.Поскольку я нахожусь на уровне GATEWAY, если я укажу метку моего конечного развертывания, фильтр никогда не будет применен.

Если я изменю значение listenerType на SIDECAR_INBOUND, он будет работать, как и ожидалось, потому что на уровне коляски, посланникпрокси-сервер «знает» метки своего собственного модуля и может применять (или нет) фильтр в соответствии с рабочими метками.

Но на уровне GATEWAY, как я могу сказать, что фильтр должен применяться или нет?Действительно ли spec.workloadLabels совместим с GATEWAY listenerType?

0 голосов
/ 30 апреля 2019

Вы применяете фильтр к Шлюзу.Имя «приложения» для входного шлюза - «istio-ingressgateway», а не «httpbin-gateway»

. У вас есть 2 варианта:

  1. Смена рабочей нагрузкиLabels
  workloadLabels:
    app: istio-ingressgateway

или

Удалить рабочую метку.Istio автоматически применит изменения к модулю GATEWAY
...