k8s nginx ingress重写目标注释无法按预期工作

时间:2017-12-13 09:01:20

标签: mod-rewrite nginx kubernetes

在Minikube中运行,我有以下入口,有必要的后端:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: my-ingress
  annotations:
    kubernetes.io/ingress.class: "nginx"
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
    - http:
        paths:
        - path: /config/
          backend:
            serviceName: api-gateway
            servicePort: web

目的是为网关的Web UI提供服务,该UI期望路径为/,否则它假定它是一条逻辑路径并尝试将请求转发给正确的微服务。< / p>

路径的重写不能像我预期的那样工作。它不会用/config/替换/。我误解了the example吗?

在nginx控制器的日志中,我看到:

192.168.99.1 - [192.168.99.1] - - [13/Dec/2017:08:54:11 +0000] "GET /config HTTP/1.1" 301 185 "-" "curl/7.55.1" 78 0.000 [-] - - - -
192.168.99.1 - [192.168.99.1] - - [13/Dec/2017:08:54:11 +0000] "GET /config/ HTTP/1.1" 404 154 "-" "curl/7.55.1" 79 0.010 [dev-api-gateway-web] 172.17.0.10:8080 143 0.010 404

告诉我/config的请求被重写为/config/并导致404。

如何将/config重写为/

2 个答案:

答案 0 :(得分:4)

你误解了这个例子。使用您的配置请求重写目标/将被重写为/config/,而不是相反。因此,您需要切换路径:使用/config作为重写目标,并在规则中设置/路径。

因此,重写目标始终是外部请求所在的位置,即服务/ pod请求所在的规则路径。

答案 1 :(得分:0)

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: my-ingress
  annotations:
    kubernetes.io/ingress.class: "nginx"
    nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
  rules:
    - http:
        paths:
        - path: /config/(.+)
          backend:
            serviceName: api-gateway
            servicePort: web