IngressClass¶
IngressClass 代表 Ingress 实例 的类,当创建 Ingress 规则时,可在 Ingress 的 spec 中引用。主要的适用场景如下:
适用场景
- 同一个集群中,有内部 Ingress 和外部 Ingress 需求
- 同一个集群同一个命名空间中,不同团队部署不同的应用,使用不同 Ingress 实例
- 同一个集群中,同一团队部署不同应用对 Ingress 实例资源配比有要求
- 例如某些业务需要独享 4C 4G 的数据面网关资源
前提条件¶
- 已经完成 Ingress nginx 实例部署,并设置了 IngressClassName。
- 已获取对应的 IngressClassName。
使用操作¶
通过 YAML 创建 Ingress 并指定 IngressClass¶
通过 YAML 创建 Ingress 时,如需要指定 ingressClass 时,需要通过 ingressClassName
指定。 注解 kubernetes.io/ingress.class
已经废弃。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: dao-2048
spec:
ingressClassName: contour # 指定 ingress class 名称
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: dao-2048
port:
number: 80
通过界面创建 Ingress 并指定 IngressClass¶
如通过图形化创建路由(Ingress )时,可直接在界面输入对应的 IngressClassName
。
默认 IngressClass¶
每个集群都可以有一个默认的 IngressClass。存在默认 IngressClass 时( 创建 Ingress 实例时,开启 DefaultIngressClass ),创建 Ingress 时可以不指定 ingressClassName
字段。
ingressclass.kubernetes.io/is-default-class
注解可以用来标明一个 IngressClass 作为默认类。一个集群最多只能设置一个。 当某个 IngressClass
资源将此注解设置为 true
时,没有指定 class 的新 Ingress 资源将被分配到此默认类。
QA¶
问:不同租户如何使用不同 Ingress 负载流量而且还不用指定 ingressClassName?
答:可以通过指定 --watch-namespace
的方式,不同的实例 watch 不同的 namespace。 ingress-nginx 可以通过 helm 安装时指定 controller.scope.enabled=true
和 --set controller.scope.namespace=$NAMESPACE
, 更多信息可以参考 scope。