Skip to content

IngressClass

IngressClass represents the class of the Ingress instance that can be referenced in the Ingress spec when an Ingress rule is created. The main cases are as follows.

Use cases

  • Need both internal Ingress and external Ingress in the same cluster
  • Different teams deploy different applications in the same cluster with different Ingress instances in the same namespace
  • In the same cluster, the same team deploys different applications with different Ingress instance resource ratios
    • For example, some services need exclusive access to 4C 4G data plane gateway resources

Prerequisites

Operations

Create Ingress via YAML and specifying the IngressClass

If you need to specify an IngressClass when creating an Ingress via YAML, specify it via ingressClassName. The annotation kubernetes.io/ingress.class is deprecated.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: dao-2048
spec:
  ingressClassName: contour # Specify the ingress class name
  rules:
  - http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: dao-2048
            port:
              number: 80

Create Ingress through the interface and specify IngressClass

If the route(Ingress) is created through the interface, you can directly enter the corresponding IngressClassName in the interface.

Default IngressClass

Each cluster can have a default IngressClass. When a default IngressClass exists (enable DefaultIngressClass when creating Ingress instances), Ingress can be created without specifying the ingressClassName.

The ingressclass.kubernetes.io/is-default-class annotation can be used to mark an IngressClass as the default class. Only one IngressClass can be set for a cluster at most. When this annotation is set to true for an IngressClass resource, new Ingress resources without a specified class will be assigned to this default class.

QA

Q: How can different tenants use different Ingress traffic without specifying ingressClassName?

A: Different instances can watch different namespaces by specifying --watch-namespace. ingress-nginx can be installed via helm by specifying -controller.scope.enabled=true and -set controller.scope.namespace=$NAMESPACE. More information can be found in scope.

Comments