我有一个简单的入口配置文件-
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
它开始工作得很好,但有人能说出为什么它不能与/link1
0一起工作吗。
有用的资源-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(/|$)