在 Kubernetes 中,IngressClass 是一个用于指定哪种 Ingress 控制器(Ingress Controller)应该处理某个特定 Ingress 资源的标识符。IngressClass 参数是在 Ingress 资源中指定的,目的是让集群能够区分多个不同类型的 Ingress 控制器。
IngressClass 的定义和作用IngressClass 是一种资源类型,它用来描述不同的 Ingress 控制器。例如,如果你在 Kubernetes 集群中部署了多个 Ingress 控制器(如 NGINX Ingress 控制器、Traefik、HAProxy 等),你就需要使用 IngressClass 来明确指定每个 Ingress 资源应该由哪个控制器来处理。
IngressClass 通过指定一个类(IngressClass 名称)来与实际的控制器匹配。这个名称会在 Ingress 资源中通过 ingressClassName 字段来引用。
IngressClass 参数与对应关系IngressClass 是一种资源对象,它通常通过 IngressClass API 来创建。例如:
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
name: nginx
spec:
controller: k8s.io/ingress-nginx在这个例子中,IngressClass 被命名为 nginx,并且指定了该类的 controller 为 k8s.io/ingress-nginx,这表明它是一个 NGINX Ingress 控制器。
Ingress 资源的 ingressClassName 字段用于指定该 Ingress 资源对应的 IngressClass。例如:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-app-ingress
spec:
ingressClassName: nginx
rules:
- host: my-app.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-app-service
port:
number: 80在这个例子中,ingressClassName: nginx 表明该 Ingress 资源应由 nginx Ingress 控制器来处理。
IngressClass 和多个控制器的对应如果你有多个 Ingress 控制器,使用 IngressClass 可以让你灵活地将流量导向不同的控制器。例如:
如果有一个 NGINX 控制器和一个 Traefik 控制器,你可以创建两个 IngressClass:
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
name: nginx
spec:
controller: k8s.io/ingress-nginxapiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
name: traefik
spec:
controller: traefik.io/ingress-controller然后你可以在不同的 Ingress 资源中使用不同的 ingressClassName 来指定由哪个控制器处理:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nginx-ingress
spec:
ingressClassName: nginx
rules:
# NGINX Ingress 相关的规则apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: traefik-ingress
spec:
ingressClassName: traefik
rules:
# Traefik Ingress 相关的规则IngressClass如果 Ingress 资源没有明确指定 ingressClassName,Kubernetes 会使用集群中设置的默认 IngressClass。在 NGINX Ingress 控制器中,默认的 IngressClass 可以通过 ingressClass 参数进行配置(例如,通过 nginx-ingress 的部署配置来设置)。
IngressClass 是一个标识 Ingress 控制器类型的资源。ingressClassName 用于在 Ingress 资源中指定该资源应由哪个 Ingress 控制器处理。IngressClass 允许一个 Kubernetes 集群中运行多个 Ingress 控制器,并能够灵活地管理哪些 Ingress 资源由哪些控制器处理。通过这种方式,你可以实现跨多个控制器的灵活流量管理。