Kubernetes

新的 Kubernetes IngressClass 資源,僅指定 IngressClassName(nginx 入口控制器)

  • April 28, 2021

概括

我指定了一個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: /

然後需要有一個IngressClasswith 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-classtospec.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

  • 工作範例IngressClass:名稱為 IngressClass example-com-public+ Nginx Ingress Controller,--ingress-class參數設置為example-com-public+ Ingress,example-com-public值在 ingressClassName
  • 請參閱此圖:這個圖以獲得更好的視覺理解。

引用自:https://serverfault.com/questions/1061530