带有 nginx 入口路径重写问题的 Minikube

Minikube with nginx ingress path rewrite issue

我正在使用带有 nginx 入口的 minikube。

我正在尝试使用 url 重写 this

这是我的入口定义:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: config-reader-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  backend:
    serviceName: default-http-backend
    servicePort: 80
  rules:
  - host: microservices.info
    http:
      paths:
      - path: /reload(/|$)(.*)
        backend:
          serviceName: spring-cloud-reload
          servicePort: 8080
      - path: /upload(/|$)(.*)
        backend:
          serviceName: spring-cloud-upload
          servicePort: 8080

下面的urls改写成这样:

很好。但是

还有

minikube version: v0.35.0

如何解决多路径元素的情况?

更新

-------------------------------------------------------------------------------
NGINX Ingress controller
  Release:    0.21.0
  Build:      git-b65b85cd9
  Repository: https://github.com/aledbf/ingress-nginx
-------------------------------------------------------------------------------

之前的 nginx-ingress v0.22.0 存在尾部斜杠的已知问题。

要检测哪个版本的入口控制器是 运行ning,执行 pod 和 运行 nginx-ingress-控制器版本命令。

kubectl exec -it $POD_NAME -- /nginx-ingress-controller --version

-------------------------------------------------------------------------------
NGINX Ingress controller
  Release:    0.24.1
  Build:      git-ce418168f
  Repository: https://github.com/kubernetes/ingress-nginx
-------------------------------------------------------------------------------

重写目标注释对尾部斜杠非常敏感。如果不存在,则不会重写请求。

因此,您应该始终提供 url 作为 /reload/x/y/

重复尾部斜杠的另一个问题(已在 v 0.22.0 及更高版本中修复)。

为了了解那里发生了什么,您可以执行 ingress-controller pod,找到 /etc/nginx/nginx.conf 并搜索

set $location_path  "/reload(/|${literal_dollar})(.*)";

rewrite "(?i)/reload(/|$)(.*)" / break;

要修复它,请将 ingress-controller 版本更新到最新版本,或者您也可以使用 configuration-snippet 注释:

nginx.ingress.kubernetes.io/configuration-snippet: |
    rewrite (?i)/reload/x/y/ /x/y break;