1、概述
本文档,我们主要来说明,在创建ingress的时候呢,里面会有个字段叫做,path type,这个字段都可以设置为哪些的值,设置为不同的值,对我们设置的path有什么影响。
OK,话不多说,我们开始。
2、路径类型(pathType)介绍
在ingress中的每个path都需要一个对应的pathType。
如下:
kubectl apply -f - <<EOF
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nginx-test-ingress
namespace: test01
spec:
ingressClassName: nginx
rules:
- host: nginx-test.k8s.com
http:
paths:
- backend:
service:
name: nginx-test-02
port:
number: 80
path: /
pathType: Prefix
EOF
如果创建ingress的时候,没有指定pathType,那么创建会失败,如下:
[root@nccztsjb-node-23 ~]# kubectl apply -f - <<EOF
> apiVersion: networking.k8s.io/v1
> kind: Ingress
> metadata:
> name: nginx-test-ingress
> namespace: test01
> spec:
> ingressClassName: nginx
> rules:
> - host: nginx-test.k8s.com
> http:
> paths:
> - backend:
> service:
> name: nginx-test-02
> port:
> number: 80
> path: /
> EOF
error: error validating "STDIN": error validating data: ValidationError(Ingress.spec.rules[0].http.paths[0]): missing required field "pathType" in io.k8s.api.networking.v1.HTTPIngressPath; if you choose to ignore these errors, turn validation off with --validate=false
[root@nccztsjb-node-23 ~]#
提示:missing required field "pathType"
好的,那么在ingress中,支持哪些path类型呢,我们接着往下看
3、支持的path类型
有3种支持的path类型:
ImplementationSpecific:对于这种path类型,匹配取决于IngressClass。可以将其视为一个单独的pathType或者将其认为和Prefix或者Exact路径类型一样。
Exact:精确匹配URL路径,并且区分大小写
Prefix: 根据URL中的,被/分割的前缀进行匹配。匹配区分大小写并且按照元素对路径进行匹配。path元素指的是路径中由/分隔符分隔的标签列表。
注意:如果路径的最后一个元素是请求路径中最后一个元素的子字符串,那么这个是不匹配的。【举例:/foo/bar匹配/foo/bar/baz,但是不匹配/foo/barbaz】
4、示例
以下为匹配的具体的示例:
路径类型 |
路径 |
请求路径 |
匹配与否 |
Prefix |
/ |
(all paths) |
Yes |
Exact |
/foo |
/foo |
Yes |
Exact |
/foo |
/bar |
No |
Exact |
/foo |
/foo/ |
No |
Exact |
/foo/ |
/foo |
No |
Prefix |
/foo |
/foo, /foo/ |
Yes |
Prefix |
/foo/ |
/foo, /foo/ |
Yes |
Prefix |
/aaa/bb |
/aaa/bbb |
No |
Prefix |
/aaa/bbb |
/aaa/bbb |
Yes |
Prefix |
/aaa/bbb/ |
/aaa/bbb |
Yes, ignores trailing slash-忽略结尾/ |
Prefix |
/aaa/bbb |
/aaa/bbb/ |
Yes, matches trailing slash-忽略结尾/ |
Prefix |
/aaa/bbb |
/aaa/bbb/ccc |
Yes, matches subpath-匹配子路径 |
Prefix |
/aaa/bbb |
/aaa/bbbxyz |
No, does not match string prefix-不匹配字符串前缀 |
Prefix |
/, /aaa |
/aaa/ccc |
Yes, matches /aaa prefix-最长匹配 |
Prefix |
/, /aaa, /aaa/bbb |
/aaa/bbb |
Yes, matches /aaa/bbb prefix--最长匹配 |
Prefix |
/, /aaa, /aaa/bbb |
/ccc |
Yes, matches / prefix |
Prefix |
/aaa |
/ccc |
No, uses default backend-使用默认后端 |
Mixed |
/foo (Prefix), /foo (Exact) |
/foo |
Yes, prefers Exact-精确匹配优先 |
5、多路径匹配原则
在某些情况下,一个Ingress中的多个路径将匹配一个请求。在这些情况下,优先级将首先给最长的匹配路径。如果两条路径仍然相等匹配,则优先级将给具有精确路径类型的路径,而不是前缀路径类型。
简单来说,就是,精确匹配,最长匹配的原则。