我有一个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构建组件应该是可行的:
- 使用基于正则表达式的重写
nginx.ingress.kubernetes.io/rewrite-target
=>HTTP_ROUTE
对象的EnvoyFilter
(示例可在github上找到(
- 将'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