【问题标题】:Minikube with nginx ingress path rewrite issueMinikube 与 nginx 入口路径重写问题
【发布时间】:2019-06-24 12:16:02
【问题描述】:

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

我正在尝试使用 this 之类的 url 重写

这是我的入口定义:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: config-reader-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$2
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

以下网址改写如下:

  • /reload/

  • /reload/xyx/xyz

这很好。但是

  • /reload/x/y 重写为 /x// 而不是 /x/y

还有

  • /reload/x/y/ 重写为 /x/y// 而不是 /x/y/

minikube 版本:v0.35.0

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

更新

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

【问题讨论】:

  • 你有什么版本的 nginx-ingress 控制器?

标签: kubernetes minikube kubernetes-ingress nginx-ingress


【解决方案1】:

在 nginx-ingress v0.22.0 之前的版本中,存在一个尾部斜杠的已知问题。

要检测正在运行的入口控制器的版本,请在 pod 中执行并运行 nginx-ingress-controller version 命令。

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(/|$)(.*)" /$2 break;

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-06
    • 1970-01-01
    • 1970-01-01
    • 2021-12-27
    • 1970-01-01
    • 2019-04-04
    • 2019-01-16
    • 2020-07-25
    相关资源
    最近更新 更多