概括
我指定了一个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可以具有与所需模式“类似域”匹配的任何值,并且不会影响工作流行为。IngressClass
spec.ingressClass
spec.controller
Ingress
如果您输入了to属性或 to
Ingress
的正确值,则工作正常。但是如果您尝试将两个值都放入同一个 Ingress 对象,您将看到如下错误:ingress-class
spec.ingressClassName
metadata.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