将带有snippet的nginx ingress规则转移到Istio



我有一个nginx ingress控制器,并与他一起公开服务,我们计划将istio更改为ingress流量。

我有一个包含片段的入口规则:

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

此ingress将http_x_forwarded_host复制到host并发送到nginx ingress。

有没有办法把这个规则转换成istio?谢谢

Marco

欢迎来到SO!,

从理论上讲,使用以下Istio构建组件应该是可行的:

  1. 使用基于正则表达式的重写

nginx.ingress.kubernetes.io/rewrite-target=>HTTP_ROUTE对象的EnvoyFilter

(示例可在github上找到(

  1. 将'X-Forwarded-For/X-Real-IP'标头转发到上游主机

如果您的应用程序需要知道真实的客户端IP地址,请使用网关网络拓扑(Alpha(功能。

备注:

您所附的源清单文件似乎受到了最新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 

最新更新