一、背景
Ingress是k8s中实现7层负载的实现方式,是公开集群外部流量到集群内服务的HTTP和HTTPS路由
二、Ingress基础
通常Ingress实现由Ingress 控制器和Ingress组成,Ingress控制器负责具体实现反向代理及负载均衡,Ingress负责定义匹配规则和路由
Ingress-nginx控制器部署参见:Installation Guide - Ingress-Nginx Controller
Ingress流程示意图:
三、示例
apiVersion: networking.k8s.io/v1 kind: Ingress metadata:name: minimal-ingressannotations:nginx.ingress.kubernetes.io/rewrite-target: / spec:ingressClassName: nginx-examplerules:- http:paths:- path: /testpathpathType: Prefixbackend:service:name: testport:number: 80
参数解释说明:
1. ingressClassName: 指定Ingressclass名称,集群可以有多个class
2. rules:规则具体定义
3. paths:指定匹配URI
4. backend: 指定匹配到URI后转发到后端的service
5. annotations: 配合Ingress控制器来配置;不同的控制器,这里注解不一样
其他参数:
host:未指定host,则规则适用于通过指定IP地址的所有入站流量;反之,则只是适用于特定的host
backend: service加端口的组合;
defaultBackend:默认后端,通常在Ingress控制器配置,实现无法和rules匹配的其他路由处理
四、路径类型
pathType有如下选项:
1. Exact: 精确匹配URL路径,且区分大小写
2. Prefix:基于/分隔的URL路径前缀匹配,区分大小写
3.
ImplementationSpecific
:对于这种路径类型,匹配方法取决于 IngressClass
五、Ingress类
Ingress可以有不同的控制器,通常也使用不同的配置;每个Ingress应当改指定一个类,也就是对ingressClass资源的引用
apiVersion: networking.k8s.io/v1 kind: IngressClass metadata:name: external-lb spec:controller: example.com/ingress-controllerparameters:apiGroup: k8s.example.comkind: IngressParametersname: external-lb