我正在 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 pod/服务都在后台运行,只是 ingress-nginx 仍然无法正确路由。
最佳答案
所以这不能正确路由的原因是:
- host: app.dev
- http:
“http”前面的“-”使 Controller 认为它是自己的规则集,因此以下路由有一个主机“*”。删除“http”前面的“-”后,规则被设置为 app.dev 的正确主机,并开始相应的路由。
谢谢大家的帮助!这是多么漫长的一天啊:')
关于nginx - Ingress-Nginx 的正则表达式路径匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67994965/