Условная маршрутизация входящего трафика Kubernetes

Можно ли настроить контроллер входящего трафика в Kubernetes для маршрутизации HTTP-запросов к службе, только если входящие запросы имеют определенное значение для заголовка?

Пример

HTTP-запрос со следующим заголовком

X-MY-CUSTOM-HEADER: accepted-value

следует направить в службу 1

HTTP-запрос со следующим заголовком

X-MY-CUSTOM-HEADER: invalid-value

должен быть заблокирован

Если возможно, не могли бы вы немного подробно рассказать или указать на какую-то документацию, так как мне не удалось найти документацию для такого варианта использования.


person Community    schedule 07.12.2018    source источник
comment
Пример есть в Istio документах istio.io/docs/concepts/traffic-management/# приоритет. Он использует envoy proxy под капотом, поэтому я считаю, что вы можете использовать его непосредственно в качестве контроллера входящего трафика в кластере, хотя у меня нет опыта с этим.   -  person Egor Stambakio    schedule 07.12.2018


Ответы (2)


Если вы используете контроллер входящего трафика nginx, вы можете сделать это с помощью аннотация фрагмента конфигурации. Тогда вы можете добавить что-то вроде этого:

nginx.ingress.kubernetes.io/configuration-snippet: |
  map $http_x_custom_header $not_ok {
      default "1";
      Value1  "0";
      Value2  "0";
      Value3  "0";
  }

  if ($not_ok) {
      return 403; 
  }

Дополнительная информация здесь.

person Rico    schedule 07.12.2018
comment
Вышеупомянутое не работает для меня. Я ввожу директиву карты через аннотацию nginx.ingress.kubernetes.io/configuration-snippet, как предложено выше, и получаю это сообщение об ошибке на модуле входа nginx: "map" directive is not allowed here - person miticoluis; 08.07.2019
comment
Я не уверен, где он его добавляет в вашу конфигурацию nginx. Может быть, у вас есть другая директива карты? Вы также можете попробовать серверный сниппет. Согласно документам http://nginx.org/en/docs/http/ngx_http_map_module.html#map необходимо добавить карту в контекст http, а фрагмент конфигурации добавляет конфигурацию в фрагмент местоположения, находящийся в контексте http. - person Rico; 08.07.2019
comment
Только что попробовал nginx.ingress.kubernetes.io/server-snippet, директива карты сообщений об ошибках здесь не разрешена :( - person miticoluis; 08.07.2019
comment
Попробуйте добавить его в конфигурационную карту (фрагмент http) kubernetes.github.io/ingress-nginx/user-guide/ - person Rico; 08.07.2019
comment
Пожалуйста, посмотрите здесь, если сможете. Я только что создал новый вопрос относительно моей конкретной проблемы, спасибо за вашу помощь: stackoverflow.com/questions/56941847/ - person miticoluis; 08.07.2019

Traefik 2.0, Istio и Ambassador поддерживают маршрутизацию на основе заголовков.

Дополнительная информация на https://discuss.kubernetes.io/t/header-based-ingress-routing/6322

person Green Lei    schedule 23.12.2019