Перенести правило входа 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:
- Используйте перезапись на основе регулярных выражений
nginx.ingress.kubernetes.io/rewrite-target
=> EnvoyFilter в
HTTP_ROUTE
объект
(пример можно найти на github здесь )
- Перенаправить заголовки 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