跳到主要内容

spec

2024年11月13日
柏拉文
越努力,越幸运

一、spec


二、rules


IngressKubernetes 中用来定义如何将外部 HTTP(S) 流量路由到集群内部服务的资源。Ingress RulesIngress 的核心部分,用于配置具体的流量路由规则。

三、rules.http


3.1 认识

KubernetesIngress 配置中,spec.rules.http 是用于定义 HTTP 流量路由规则的部分。它负责描述请求的路径匹配规则以及这些请求的后端服务目标。

3.2 语法

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: multi-path-ingress
spec:
rules:
- host: my-website.com
http:
paths:
- path: /api
pathType: Prefix
backend:
service:
name: api-service
port:
number: 8080
- path: /static
pathType: Prefix
backend:
service:
name: static-service
port:
number: 80

四、rules.host


4.1 认识

spec.rules.hostKubernetes Ingress 的一部分,用于定义基于域名(Host)的 HTTP 路由规则。它允许将外部请求根据目标域名转发到集群内部的服务。在一个 Ingress 配置中,spec.rules.host 指定了域名规则,通常与 spec.rules.http 搭配使用。如果未定义 host,该规则将应用于所有域名。

4.2 语法

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: multi-host-ingress
spec:
rules:
- host: api.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: api-service
port:
number: 8080
- host: www.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: web-service
port:
number: 80
  • 访问 api.example.com 的请求转发到 api-service

  • 访问 www.example.com 的请求转发到 web-service

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: default-host-ingress
spec:
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: default-service
port:
number: 80

任何域名的请求都会被路由到 default-service

五、rules.http.paths


5.1 认识

spec.rules.http.pathsKubernetes Ingress 的关键部分,用于定义 HTTP 请求的路径规则,并指定与路径匹配时流量的转发目标(即服务和端口)。结合域名规则(spec.rules.host),它可以实现细粒度的 HTTP 路由控制。

5.2 语法

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
spec:
rules:
- host: example.com
http:
paths:
- path: /app
pathType: Prefix
backend:
service:
name: app-service
port:
number: 8080
- path: /blog
pathType: Prefix
backend:
service:
name: blog-service
port:
number: 80

六、rules.http.paths.path


6.1 认识

Kubernetes Ingress 中,spec.rules.http.paths.path 是路径路由规则的核心部分,用于定义 HTTP 请求的路径。通过 path 字段,可以将特定路径的流量匹配并转发到相应的后端服务。

6.2 语法

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
spec:
rules:
- host: example.com
http:
paths:
- path: /app
pathType: Prefix
backend:
service:
name: app-service
port:
number: 8080

/app 表示匹配以 /app 开头的所有请求

七、rules.http.paths.pathType


7.1 认识

pathTypeKubernetes Ingress 中用于指定路径匹配策略的字段,定义了 Ingress 控制器如何解释 HTTP 请求路径与 path 字段的匹配方式。

7.2 语法

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
spec:
rules:
- host: example.com
http:
paths:
- path: /api
pathType: Prefix
backend:
service:
name: api-service
port:
number: 8080

7.3 可选值

pathType 支持以下三种类型:

  • Prefix: 匹配以指定路径为前缀的请求。如果 path 设置为 /app,则以下路径都会匹配:/app/app/hello/app/page 。非常适合常见的路径分流场景,例如微服务。

  • Exact: 严格匹配完整路径。如果 path 设置为 /login,只有 /login 会匹配,而 /login/user/login/abc 都不会匹配。适合需要精确处理的场景,如登录或认证。

  • ImplementationSpecific: 匹配策略取决于具体的 Ingress Controller 实现。在 NGINX Ingress Controller 中,ImplementationSpecific 通常等同于 Prefix。适合特定控制器的高级用例,例如正则表达式匹配(取决于支持的实现)。

八、rules.http.paths.backend


8.1 认识

backendKubernetes Ingress 资源中定义 HTTP 请求匹配后如何转发的关键部分。它指定请求应该转发到哪个服务以及使用的端口。

8.2 语法

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
spec:
rules:
- host: example.com
http:
paths:
- path: /api
pathType: Prefix
backend:
service:
name: api-service
port:
number: 8080

8.3 配置项

backend 下包含以下两个子字段:

backend.service: 指定目标 Kubernetes Service 的名称。

  • backend.service.name: 目标 Service 的名称。

  • backend.service.port: 定义请求应该转发到 Service 的哪个端口

  • backend.service.port.name: 目标端口的名称(与 Service 定义中的 port.name 一致)

  • backend.service.port.number: 目标端口的具体数值

backend.resource: 用于指定自定义的 Kubernetes 资源作为请求的处理目标。一般用于指向扩展控制器(如 Knative 或其他资源)。