首页 > 解决方案 > 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?谢谢。

马可

标签: istionginx-ingressistio-gateway

解决方案


欢迎来到 SO!,

理论上应该可以使用以下 Istio 构建组件:

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

nginx.ingress.kubernetes.io/rewrite-target=> EnvoyFilterHTTP_ROUTE对象

(示例可在 github 上找到

  1. 将“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 

推荐阅读