spec
一、spec
二、rules
Ingress
是 Kubernetes
中用来定义如何将外部 HTTP(S)
流量路由到集群内部服务的资源。Ingress Rules
是 Ingress
的核心部分,用于配置具体的流量路由规则。
三、rules.http
3.1 认识
在 Kubernetes
的 Ingress
配置中,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.host
是 Kubernetes 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.paths
是 Kubernetes 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 认识
pathType
是 Kubernetes 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 认识
backend
是 Kubernetes 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
或其他资源)。