一、单域名匹配多 Path 到不同服务¶
一个扇出(fanout)配置根据请求的 HTTP URI 将来自同一 IP 地址的流量路由到多个 Service。 Ingress 允许你将负载均衡器的数量降至最低。例如,这样的设置:

针对上面设置,进行示例说明:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: simple-fanout-example
spec:
rules:
- host: foo.bar.com
http:
paths:
- path: /foo
pathType: Prefix
backend:
service:
name: service1
port:
number: 4200
- path: /bar
pathType: Prefix
backend:
service:
name: service2
port:
number: 8080
二、多域名匹配到相同服务¶
基于名称的虚拟主机支持将针对多个主机名的 HTTP 流量路由到同一 IP 地址上。例如,这样的设置:

针对上面设置,进行示例说明:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: name-virtual-host-ingress
spec:
rules:
- host: foo.bar.com
http:
paths:
- pathType: Prefix
path: "/"
backend:
service:
name: service1
port:
number: 80
- host: bar.foo.com
http:
paths:
- pathType: Prefix
path: "/"
backend:
service:
name: service2
port:
number: 80
说明:如果你创建的 Ingress 资源没有在 rules 中定义的任何 hosts,则可以匹配指向 Ingress 控制器 IP 地址的任何网络流量,而无需基于名称的虚拟主机。
三、更新 Ingress¶
更新Ingress可以直接使用kubectl edit进行更改,也可以通过kubectl apply/replace进行更改。
在线编辑更新¶
要更新现有的 Ingress可以通过编辑资源来对其进行更新:
$ k edit ingress ingress-name
YAML 文件更新¶
要更新现有的 Ingress可以通过编辑yaml文件来对其进行更新:
$ k replace/apply -f new-ingress.yaml
Ingress 接口变化解析¶
1.19 之前的 v1beta1
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: simple-fanout-example
annotations:
kubernetes.io/ingress.class: "nginx"
spec:
rules:
- host: foo.bar.com
http:
paths:
- path: /foo
pathType: Prefix
backend:
serviceName: service1
servicePort: 80
- path: /bar
pathType: ImplementationSpecific
backend:
serviceName: service2
servicePort: 8080
1.19之后的v1
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: name-virtual-host-ingress
spec:
rules:
- host: foo.bar.com
http:
paths:
- pathType: Prefix
path: "/"
backend:
service:
name: service1
port:
number: 80
二者之间的区别:
| 特性 | v1beta1 |
v1 |
|---|---|---|
| API 版本 | Kubernetes 1.19 之前,已弃用 | Kubernetes 1.19 及之后,稳定版本 |
pathType 字段 |
不支持,默认为 Prefix |
支持 Prefix、Exact、ImplementationSpecific |
| 后端服务定义 | serviceName 和 servicePort |
service.name 和 service.port.number |
| 默认行为 | 宽松,默认路径匹配为 Prefix |
严格,要求明确指定 pathType |
| 兼容性 | Kubernetes 1.19 之前 | Kubernetes 1.19 及之后 |