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

簡單來說,就是,精確匹配,最長匹配的原則。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM