跳转至

IngressClass

IngressClass 代表 Ingress 实例 的类,当创建 Ingress 规则时,可在 Ingress 的 spec 中引用。主要的适用场景如下:

适用场景

  • 同一个集群中,有内部 Ingress 和外部 Ingress 需求
  • 同一个集群同一个命名空间中,不同团队部署不同的应用,使用不同 Ingress 实例
  • 同一个集群中,同一团队部署不同应用对 Ingress 实例资源配比有要求
    • 例如某些业务需要独享 4C 4G 的数据面网关资源

前提条件

使用操作

通过 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

评论