Маршрутизация на основе заголовков Openshift 3.11 - PullRequest
0 голосов
/ 28 июня 2019

Я пытаюсь реализовать маршрутизацию на основе заголовков в Openshift 3.11.

Я имею в виду, я хочу, чтобы HAProxy направлял запросы к определенной службе на основе наличия и значения заголовка, а не имени хоста. Значение заголовка будет установлено в конфигурации маршрута.

Я знаю, что это возможно с HAProxy, но я не знаю, как это сделать. Я последовал совету, который нашел здесь , но кажется, что конфигурация изменилась, и она больше не работает.

Любое предложение будет приветствоваться. У меня есть альтернатива, которая будет заключаться во втором прокси, который будет работать, но это совсем не будет элегантно ...

1 Ответ

0 голосов
/ 29 июня 2019

ОК, мне удалось заставить его работать должным образом. Но не документация помогла. Кусок кода, показанный в ссылке, которую я разместил в вопросе, должен быть размещен под следующими частями конфигурации:

  • frontend public (http прокси)
  • frontend fe_sni (https прокси с пользовательскими сертификатами)
  • frontend fe_no_sni (Прокси https с сертификатом по умолчанию)

Кроме того, кусок кода был старым и не содержал реальных имен переменных. Вот тот, который для каждого маршрута:

  • ищет аннотацию маршрута с именем haproxy.router.openshift.io/tenant-id
  • создать 2 acls, проверяя значение файла cookie с именем tenant-id и, если хост является ожидаемым (значение хоста настраивается с помощью аннотации маршрута haproxy.router.openshift.io/tenant-hostname
  • проверяет, возвращают ли 2 acls значение true, и в этом случае отправляет http-запрос службе за маршрут
  # Custom snippet for balancing through HTTP headers
  {{- range $cfgIdx, $cfg := .State }}
  {{- if (ne (index $cfg.Annotations "haproxy.router.openshift.io/tenant-id") "") }}
  acl custom_header_{{index $cfg.Annotations "haproxy.router.openshift.io/tenant-id"}} cook(tenant-id) {{index $cfg.Annotations "haproxy.router.openshift.io/tenant-id"}}
  acl configured_host_{{index $cfg.Annotations "haproxy.router.openshift.io/tenant-id"}} hdr(host) {{index $cfg.Annotations "haproxy.router.openshift.io/tenant-hostname"}}
  use_backend be_edge_http:{{$cfgIdx}} if configured_host_{{index $cfg.Annotations "haproxy.router.openshift.io/tenant-id"}} custom_header_{{index $cfg.Annotations "haproxy.router.openshift.io/tenant-id"}}

  {{- end }}
  {{- end }}
...