新的 Kubernetes IngressClass 资源且仅指定 IngressClassName(nginx ingress 控制器)

新的 Kubernetes IngressClass 资源且仅指定 IngressClassName(nginx ingress 控制器)

概括

我指定了一个IngressClassName没有对应的IngressClass资源,出乎意料地运行良好;我的理解是你IngressClass还需要定义资源。以前我们使用基于注释的方法,kubernetes.io/ingress.class所以我正在迁移到新方法。

细节

我读了上述文档后,我想如果你设置IngressClassName如下

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
  labels:
    app: example-service.example.com
    manager: nginx-ingress-controller
  name: example
spec:
  ingressClassName: example-com-public
  rules:
  - host: example-service.example.com
    http:
      paths:
      - backend:
          serviceName: example-service
          servicePort: 8080
        path: /

然后需要有一个IngressClass名称example-com-public。但是,在我们的集群中,情况并非如此,因为我们正在从旧的仅注释方法迁移。但一切正常。似乎我们可能不需要创建 IngressClass 资源?

答案1

我分析了这种情况并得出以下结论:

  • 入口类定义Ingress Controller,每个Ingress规则可以标注相应的ingress.class注解。

  • --ingress-class如果在 中使用自定义值作为参数,则是否存在同名的controller Deployment manifest对应对象并不重要。但是,您需要保持 Ingress 的值与控制器的参数相同。此外,如果存在,IngressClass可以具有与所需模式“类似域”匹配的任何值,并且不会影响工作流行为。IngressClassspec.ingressClassspec.controllerIngress

  • 如果您输入了to属性或 toIngress的正确值,则工作正常。但是如果您尝试将两个值都放入同一个 Ingress 对象,您将看到如下错误:ingress-classspec.ingressClassNamemetadata.annotation.kubernetes.io/ingress.class


The Ingress "test-ingress" is invalid: annotations.kubernetes.io/ingress.class: Invalid value: "nginx": can not be set when the class field is also set

  • 工作示例IngressClass需要:名称为 IngressClass +参数设置为example-com-publicNginx Ingress Controller + ingressClassName 中值为Ingress 的 Ingress--ingress-classexample-com-publicexample-com-public

  • 参见此图:此图为了更好的视觉理解。

相关内容