1. 程式人生 > 其它 >ingress中的路徑型別(path type)各有什麼樣的作用?以及具體的示例

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

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