为什么URL重写不起作用,而我在末尾不使用斜杠



我有一个简单的入口配置文件-

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /link2/link3/
name: tut-ingress
namespace: default
spec:
rules:
- host: tutorial.com
http:
paths:
- path: /link1/
pathType: Prefix
backend:
service:
name: nginx-ingress-tut-service
port:
number: 8080

其中到达CCD_ 1或CCD_/link2/link3/。当我使用http://tutorial.com/link1/访问它时我看到了正确的结果,但当我使用http://tutorial.com/link1,我得到一个404找不到。nginx-ingress-tut-service具有以下端点-

  • /
  • /link1
  • /link2/link3

我是网络领域的初学者,任何帮助都将不胜感激。

当我将其更改为-时

- path: /link1

它开始工作得很好,但有人能说出为什么它不能与/link10一起工作吗。

有用的资源-https://kubernetes.io/docs/concepts/services-networking/ingress/#examples

https://kubernetes.github.io/ingress-nginx/examples/rewrite/

编辑-还请解释当您在nginx.ingress.kubernetes.io/rewrite-target

答案发布在评论中:

好吧,/link1/不是/link1的前缀,因为前缀的长度必须与目标字符串相同或更长

如果您有

- path: /link1/

要匹配的字符串必须在路径的末尾具有CCD_ 14字符。一切正常。在这种情况下,如果您尝试通过链接http://tutorial.com/link1访问,您将得到404错误,因为ingress期望http://tutorial.com/link1/

有关更多信息,您可以看到重写规则的示例和有关路径类型的文档:

Ingress中的每个路径都需要具有相应的路径类型。不包括显式pathType的路径将无法通过验证。有三种支持的路径类型:

  • ImplementationSpecific:使用此路径类型,匹配取决于IngressClass。实现可以将其视为单独的pathType,也可以将其与/link1/0或Exact路径类型相同。

  • Exact:精确匹配URL路径,区分大小写。

  • Prefix:基于由/分割的URL路径前缀进行匹配。匹配是区分大小写的,并且是在逐个元素的基础上进行的。路径元素是指由/分隔符分割的路径中的标签列表。如果每个p都是请求路径的p的元素前缀,则请求与路径p-匹配

编辑:根据文档,这应该可以工作,但看起来nginx入口出现了新问题。这个问题仍未解决。你可以使用这个主题中发布的变通方法,或者尝试将你的你更改为类似的:

- path: /link1(/|$)

相关内容

  • 没有找到相关文章

最新更新