kubernetes - Minikube 与 nginx 入口路径重写问题
问题描述
我正在使用带有 nginx 入口的 minikube。
我正在尝试像这样使用 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
以下 url 重写如下:
/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 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;
推荐阅读
- javascript - 在 react redux 中处理具有不同参数的多个请求
- c# - 如何在网格 acumatica 上添加自定义操作按钮
- javascript - 在 React 组件之外使用路由信息
- python - Django 表单不关心 html 输入
- wso2 - 如何使用 Siddhi 解析数组数组
- javascript - 同一脚本中的 Google 文档、Google 表格或 Google 幻灯片的插件菜单?
- r - 提取字符串中关键字周围的值
- java - Java中的分布式计数信号量
- powershell - Powershell - Sharepoint 自动文件上传返回“远程服务器返回错误:(403)禁止。” 错误
- database - 我正在尝试设置 Dynamodb aws 数据库但出现错误