微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Ingress-Nginx 的正则表达式路径匹配

如何解决Ingress-Nginx 的正则表达式路径匹配

我正在 kubernetes 中使用 ingress-Nginx 来设置服务器。 问题是路径根本没有路由,我从 Nginx 服务器收到 404 错误。 以下是我的入口代码

apiVersion: networking.k8s.io/v1
kind: Ingress
Metadata:
  name: ingress-srv
  annotations:
    kubernetes.io/ingress.class: Nginx
    Nginx.ingress.kubernetes.io/use-regex: "true"
spec:
  # defaultBackend:
  #   service:
  #     name: auth-srv
  #     port:
  #       number: 3000
  rules:
    - host: app.dev
    - http:
        paths:
          - pathType: Prefix
            path: /api/auth/?(.*)
            backend:
              service:
                name: auth-srv
                port:
                  number: 3000
          - path: /api/coms/?(.*)
            pathType: Prefix
            backend:
              service:
                name: coms-srv
                port:
                  number: 3000

如果我取消对认后端服务的注释,我会收到响应,但一旦我删除它,我就会收到 404 Nginx 错误。所以我知道它连接到我设置的服务。

我不知道我哪里出错了如何解决这个问题,因为我直接从 docs 复制。任何帮助或见解都会很棒。提前致谢!

编辑 1: 我从路径中删除了正则表达式并注释掉了 /api/auth 路径,因此没有请求应该发送到 auth-srv。出于某种原因,即使没有映射到 auth-srv,所有请求也会路由到它。注意:auth 和 coms pods/services 都在后台运行,只是 ingress-Nginx 仍然没有正确路由。

解决方法

所以这不能正确路由的原因是:

    - host: app.dev
    - http:

“http”前面的“-”让控制器认为这是它自己的规则集,所以下面的路由有一个“*”的主机。删除“http”前面的“-”后,规则被设置到app.dev的正确主机上,并相应地开始路由。

感谢大家的帮助!这是多么漫长的一天:')

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。