istio - Traslate 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 复制到主机并发送到 nginx 入口。
有什么想法可以将此规则转换为 istio?谢谢。
马可
解决方案
欢迎来到 SO!,
理论上应该可以使用以下 Istio 构建组件:
- 使用基于正则表达式的重写
nginx.ingress.kubernetes.io/rewrite-target
=> EnvoyFilter到HTTP_ROUTE
对象
(示例可在 github 上找到)
- 将“X-Forwarded-For/X-Real-IP”标头转发到上游主机
如果您的应用程序需要知道真实的客户端 IP 地址,请使用网关网络拓扑(Alpha) 功能。
评论:
您附上的源清单文件似乎受到最新 nginx 入口控制器的已知问题的影响,这在我的环境中显示以下错误:
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
推荐阅读
- ios - 带有自定义域的 Firebase 动态链接
- python - random.sample 中的随机状态
- firebase - 是否有 Firebase 版本的替换
- python - Windows、Python:time.sleep() 权限错误
- list - Python 3 使用列表值遍历字典以显示为表
- r - R中两个轴上的日,月和年
- python-3.x - 我正在执行代码:nlp.vocab['Hun'].vector 并获得一个 ValueError : [E010] Word vectors set to length 0
- python - 查找文本的相似程度 - 一类分类器 (NLP)
- android - UIBrowsableContentSupportsImmediatePlayback 等效?
- python-3.x - 多行列表提取