首页 > 解决方案 > Nginx Ingress 规则找不到匹配项

问题描述

我在 yaml 中的 Ingress 配置上苦苦挣扎,因为模式匹配似乎不起作用。

我希望前端部署的frontend-lb ClusterIP 服务能够响应以下任何一个:

后端部署的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 路径调用前端时:

https://example.com/home

/ home控制器被有效调用(它不会被空白)。

如果我使用相同的 url 直接调用后端服务(如果服务是 LoadBalancer):http: //192.168.64.17 :31186/javalin-api-gateway/login 我得到正确的响应,表明后端部分正在工作适当地。只有后端服务没有收到完整路径怎么可能?

标签: regexkubernetesregex-negationkubernetes-ingressnginx-ingress

解决方案


推荐阅读