IngressClassName介绍

IngressClassName 在 Kubernetes 中的作用是明确指定 Ingress 资源应该使用哪个 Ingress Controller 来处理流量。以下是详细解释:

什么是 IngressClassName

IngressClassNameIngress 资源的一部分,用于定义这个 Ingress 资源应该由哪个 Ingress Controller 处理。Kubernetes 环境中可以部署多个 Ingress Controller,每个控制器可能配置不同的行为和规则。通过使用 IngressClassName,你可以明确指定哪一个控制器应该处理特定的 Ingress 资源。

作用

  1. 明确控制器
    指定 IngressClassName 可以明确告诉 Kubernetes 集群,哪个 Ingress Controller 应该处理这个 Ingress 资源。这有助于避免冲突和混乱,特别是在一个集群中有多个 Ingress Controller 的情况下。
  2. 分离职责
    在多租户环境或复杂部署场景中,不同的应用或团队可能需要不同的 Ingress 控制器配置。通过使用 IngressClassName,可以将不同的 Ingress 资源分配给不同的控制器,从而实现职责分离。
  3. 提高可维护性
    明确指定控制器使得配置更加清晰,易于维护和理解。运维人员和开发者可以快速确定哪个控制器处理了哪个 Ingress 资源,方便调试和优化。

使用示例

假设你有一个 nginx Ingress Controller 和一个 traefik Ingress Controller,你可以创建两个不同的 IngressClass 资源:

创建 IngressClass 资源

  1. nginx IngressClass:
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
  name: nginx
spec:
  controller: k8s.io/ingress-nginx

  1. traefik IngressClass:
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
  name: traefik
spec:
  controller: traefik.io/ingress-controller

创建 Ingress 资源并指定 IngressClassName

  1. 使用 nginx Ingress Controller:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: example-nginx-ingress
  namespace: default
spec:
  ingressClassName: nginx
  rules:
  - host: example-nginx.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: example-service
            port:
              number: 80
  1. 使用 traefik Ingress Controller:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: example-traefik-ingress
  namespace: default
spec:
  ingressClassName: traefik
  rules:
  - host: example-traefik.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: example-service
            port:
              number: 80

通过这些示例,可以看到 IngressClassName 的作用在于明确指定哪个 Ingress Controller 处理特定的 Ingress 资源,确保流量路由和处理的清晰和准确性。

oc get ingressclasses.networking.k8s.io -o yaml

你可能感兴趣的:(openshift,kubernetes,云原生)