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中的多個路徑將匹配一個請求。在這些情況下,優先級將首先給最長的匹配路徑。如果兩條路徑仍然相等匹配,則優先級將給具有精確路徑類型的路徑,而不是前綴路徑類型。
簡單來說,就是,精確匹配,最長匹配的原則。
