ingress中的路徑型別(path type)各有什麼樣的作用?以及具體的示例
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中的多個路徑將匹配一個請求。在這些情況下,優先順序將首先給最長的匹配路徑。如果兩條路徑仍然相等匹配,則優先順序將給具有精確路徑型別的路徑,而不是字首路徑型別。
簡單來說,就是,精確匹配,最長匹配的原則。