Перенести правило входа nginx со сниппетом в Istio

У меня есть контроллер входа nginx и с ним выставляю сервисы, мы планировали изменить istio для входящего трафика.

У меня есть правило входа, которое содержит фрагмент:

      apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$1
    nginx.ingress.kubernetes.io/server-snippet: |
      location  ~* "^/" {
        proxy_pass "https://127.0.0.1";
        proxy_set_header Host $http_x_forwarded_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_connect_timeout 10s;
        proxy_send_timeout 120s;
        proxy_read_timeout 120s;
        client_max_body_size 300m;
      }

  name: foo
spec:
  ingressClassName: bar
  rules:
    - host: foo.bar
  tls:
  - hosts:
    -  foo.bar

Эта входящая копия http_x_forwarded_host на Host и отправляется на вход nginx.

Есть идея преобразовать это правило в istio? Спасибо.

Марко

1 ответ

Добро пожаловать в SO!,

Теоретически это должно быть выполнено с помощью следующих компонентов Istio:

  1. Используйте перезапись на основе регулярных выражений

nginx.ingress.kubernetes.io/rewrite-target=> EnvoyFilter в HTTP_ROUTE объект

(пример можно найти на github здесь )

  1. Перенаправить заголовки X-Forwarded-For / X-Real-IP на восходящий хост

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

Замечание:

Прикрепленный вами исходный файл манифеста, похоже, страдает известной проблемой последнего входящего контроллера nginx, которая проявляется в следующей ошибке в моем env:

      Error from server (BadRequest): error when creating "STDIN": admission webhook "validate.nginx.ingress.kubernetes.io" denied the request:
-------------------------------------------------------------------------------
Error: exit status 1
2021/06/21 11:05:45 [emerg] 851#851: invalid number of arguments in "proxy_set_header" directive in /tmp/nginx-cfg063051389:453
nginx: [emerg] invalid number of arguments in "proxy_set_header" directive in /tmp/nginx-cfg063051389:453
nginx: configuration file /tmp/nginx-cfg063051389 test failed 
Другие вопросы по тегам