概括
我指定了一个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
with name example-com-public
。但是,在我们的集群中,情况并非如此,因为我们正在从旧的仅注释方法迁移。然而一切正常。看来我们可能不需要创建 IngressClass 资源?
我分析了这种情况,得出以下结论:
IngressClass定义了 Ingress Controller,每个 Ingress 规则都可以用相应的
ingress.class
注解进行标记。如果自定义值用于
--ingress-class
参数中,则是否存在具有相同名称controller Deployment manifest
的对应对象无关紧要。IngressClass
但是,您需要保持 Ingress 的spec.ingressClass
值与控制器的参数相同。此外,如果存在,IngressClassspec.controller
可以具有与所需模式“类似域”匹配的任何值,并且不会影响Ingress
工作流行为。Ingress
如果您将正确的值设置为ingress-class
tospec.ingressClassName
属性或 to ,则工作正常metadata.annotation.kubernetes.io/ingress.class
。但是,如果您尝试将这两个值放入同一个 Ingress 对象,您将看到如下错误:工作示例
IngressClass
:名称为 IngressClassexample-com-public
+ Nginx Ingress Controller,--ingress-class
参数设置为example-com-public
+ Ingress,example-com-public
值在 ingressClassName请参阅此图:以获得更好的视觉理解。