Как заставить фильтр 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

Вы перепроверяли с помощью команды «kubectl get EnvoyFilter»?

mjkool 09.04.2019 19:10
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
1
4 806
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

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

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

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

или

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

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

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

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: |
        ...

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

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

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

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

Другие вопросы по теме