Kubernetes
新的 Kubernetes IngressClass 資源,僅指定 IngressClassName(nginx 入口控制器)
概括
我指定了一個
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 nameexample-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 對象,您將看到如下錯誤: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