Как заставить фильтр lua envoy работать на кластере istio?

Я пытаюсь настроить фильтр lua envoy для работы со шлюзом 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

person Rodrigo Valladares    schedule 09.04.2019    source источник
comment
Вы выполняли перекрестную проверку с помощью команды kubectl get EnvoyFilter?   -  person mjkool    schedule 09.04.2019


Ответы (3)


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

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

  1. Изменить рабочие нагрузки
  workloadLabels:
    app: istio-ingressgateway

or

  1. Удалите workloadLabels. Istio автоматически применит изменения к модулю GATEWAY.
person larsitto    schedule 30.04.2019

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

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

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: |
        ...
person Ondrej    schedule 29.05.2019

Если вы используете filterType HTTP, вам также необходимо определить атрибут listenerProtocol со значением HTTP.

Смотрите также :

https://istio.io/docs/reference/config/networking/v1alpha3/envoy-filter/:

ПРИМЕЧАНИЕ 3. Для фильтров filterType: HTTP необходимо включить раздел listenerMatch с listenerProtocol: HTTP или фильтр не действуют.

person Peter Claes    schedule 12.11.2019