ingress中的路径类型pathType具体的示例

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中的多个路径将匹配一个请求。在这些情况下,优先级将首先给最长的匹配路径。如果两条路径仍然相等匹配,则优先级将给具有精确路径类型的路径,而不是前缀路径类型。

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您提供一个简单的示例来演示如何使用 Kubernetes Ingress、Service 和 Deployment 部署 Nginx Web 服务器。 首先,您需要创建一个 Deployment,用来部署 Nginx Web 服务器: ``` apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment spec: selector: matchLabels: app: nginx replicas: 3 template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.20.1 ports: - containerPort: 80 ``` 接下来,您需要创建一个 Service,用来暴露 Nginx Web 服务器的端口: ``` apiVersion: v1 kind: Service metadata: name: nginx-service spec: selector: app: nginx ports: - name: http port: 80 targetPort: 80 type: ClusterIP ``` 现在,您可以使用 Ingress 来暴露 Nginx Web 服务器的端口,使其可以通过公共 IP 地址访问: ``` apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: nginx-ingress spec: rules: - host: example.com http: paths: - path: / pathType: Prefix backend: service: name: nginx-service port: name: http ``` 在上面的示例,使用了 host 属性来指定要使用的域名,使用 path 属性来指定要使用的路径。您可以根据需要添加多个规则来支持不同的域名和路径。 最后,您可以使用 kubectl 命令来将上述 YAML 文件部署到 Kubernetes 集群: ``` kubectl apply -f nginx-deployment.yaml kubectl apply -f nginx-service.yaml kubectl apply -f nginx-ingress.yaml ``` 现在,您可以在浏览器输入您指定的域名和路径来访问 Nginx Web 服务器了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值