regex - Nginx Ingress 规则找不到匹配项
问题描述
我在 yaml 中的 Ingress 配置上苦苦挣扎,因为模式匹配似乎不起作用。
我希望前端部署的frontend-lb ClusterIP 服务能够响应以下任何一个:
- https://example.com
- https://example.com/home
- https://example.com/login
- ...任何其他没有 /api/
后端部署的backend-lb ClusterIP 服务可以响应以下任何一项:
入口规则的 yaml 如下:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: example-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
tls:
- secretName: example-com-tls
hosts:
- example.com
rules:
- host: example.com
http:
paths:
- path: /api
backend:
serviceName: gateway-lb
servicePort: 80
- path: /
backend:
serviceName: frontend-lb
servicePort: 80
结果是每个后端 url 都被识别为前端 url 并返回 404 Not Found。
我尝试了许多其他正则表达式,也尝试在前端路径(!?api)中排除/api 。*但没有成功。
更新:
我在日志中看到的内容就像在后端一样,url 路径会被空白,因为如果我调用:
https://example.com/api/javalin-api-gateway/login
我收到此错误:
未找到。请求低于上下文路径(上下文路径:'/javalin-api-gateway')
当我使用特定的 url 路径调用前端时:
/ home控制器被有效调用(它不会被空白)。
如果我使用相同的 url 直接调用后端服务(如果服务是 LoadBalancer):http: //192.168.64.17 :31186/javalin-api-gateway/login 我得到正确的响应,表明后端部分正在工作适当地。只有后端服务没有收到完整路径怎么可能?
解决方案
推荐阅读
- python - UnicodeDecodeError utf-8 无法解码字节
- elasticsearch - 过滤器未应用于聚合
- vue.js - 在不同路由上使用具有不同值的相同类型数据时的 Vuex 状态结构和获取
- javascript - 当我尝试连接并使用 NodeJs 错误调用 OracleDb 的过程时:DPI-1010:未连接
- azure - Azcopy 错误“此请求无权执行此操作。”
- javascript - 内容更改时如何调整 iframe 的高度?
- javascript - 如何基于 JavaScript / Jquery 中的另一个选择禁用选择中的多个选项
- java - 循环需要一个输入,而它应该遍历先前输入的每个单词
- c - 为链表上的操作实现多线程的问题
- python - 为什么我可以使用 selenium 在本地计算机上抓取动态网站,但不能在 Google Colab 上抓取?