ingress中的路径类型(path type)各有什么样的作用?以及具体的示例

时间:2022-04-18
本文章向大家介绍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中的多个路径将匹配一个请求。在这些情况下,优先级将首先给最长的匹配路径。如果两条路径仍然相等匹配,则优先级将给具有精确路径类型的路径,而不是前缀路径类型。

简单来说,就是,精确匹配,最长匹配的原则。

原文地址:https://www.cnblogs.com/chuanzhang053/p/16160287.html