您可以將 NCP 設定為支援第三方入口控制器。

編輯 ncp.ini 檔案

您必須編輯組態檔案 /var/vcap/data/jobs/ncp/xxxxxxxx/config/ncp.ini (其中 xxxxxxxx 為 BOSH 部署識別碼)。然後,系統會將此檔案複製到 rootfs,且 NCP 每次重新啟動時都會使用此檔案。必須在每個主節點上編輯此檔案。

重要: 您對 ncp.ini 的變更無法與 TKGI 叢集更新整合。如果您先透過 TKGI 動態磚進行變更,然後更新 TKGI 部署,您對 ncp.ini 的變更將會遺失。
nsx_v3 區段中列有相關選項。
  • use_native_loadbalancer - 如果設定為 False,不論其註解為何,NCP 都不會處理 Loadbalancer 類型更新的任何入口或服務。此設定適用於整個 TKGI 叢集。預設值是 True
  • default_ingress_class_nsx - 如果設定為 True,NCP 將成為預設的入口控制器,會處理包含 kubernetes.io/ingress.class: "nsx" 註解和不包含任何註解的入口。如果設定為 False,NCP 將僅處理包含 kubernetes.io/ingress.class: "nsx" 註解的入口。預設值是 True
    從 NCP 3.2.1 開始, default_ingress_class_nsx 已棄用。在解析入口類別時,NCP 會查看以下內容:
    • 註解
    • ingressClass 物件
    • 如果未指定註解,且 use_native_loadbalancer 為 True,NSX-LB 將會處理入口。否則,NSX-LB 不會處理入口。
如果您希望 NCP 將浮動 IP 指派給 NGINX 控制器網繭,並透過浮動 IP 更新入口的狀態,請執行下列操作:
  • ncp.inik8s 區段中,設定 ingress_mode=nat
  • 將註解 ncp/ingress-controller: "True" 新增至 NGINX 入口控制器網繭。

NCP 將使用 NGINX 入口控制器網繭的浮動 IP,來更新包含 kubernetes.io/ingress.class: "nginx" 註解的入口狀態。如果 default_ingress_class_nsx=False,NCP 也會使用 NGINX 入口控制器網繭的浮動 IP,來更新不含 kubernetes.io/ingress.class 註解的入口狀態。

附註:即使 NGINX 入口控制器網繭沒有 ncp/ingress-controller: "True" 註解,NCP 也會將上述入口狀態更新為 loadBalancer: {}。入口可能會因此停滯在迴圈中,其中 NGINX 控制器將入口狀態更新為 loadBalancer: {ingress: [{ip: <IP>}]},NCP 將入口狀態更新為 loadBalancer: {}。若要避免發生此情況,請執行下列步驟:

對於在 NAT 模式中部署的第三方入口控制器,您可以修改 k8s 區段中的 http_ingress_porthttps_ingress_port 參數,以指定針對入口控制器公開之 NAT 規則的自訂連接埠。

案例 1:NCP 處理入口,但並非預設的入口控制器。

請遵循此程序操作,讓 NCP 處理 nsx 類別的入口。
  1. 在每個主節點上編輯 ncp.ini 中的 nsx_v3 區段。
    1. default_ingress_class_nsx 設為 False
    2. use_native_loadbalancer 的設定保留為預設值 True
  2. 在每個主節點上重新啟動 NCP。這可能會導致主節點容錯移轉。
  3. 針對您希望 NCP 搭配 kubernetes.io/ingress.class: "nsx" 處理的所有入口加上註解。

案例 2:NCP 是預設的入口控制器。

請遵循此程序:
  1. 不需要編輯 ncp.ini,但請確保每個入口皆已加上註解。
  2. 要由 NCP 處理的入口應包含 kubernetes.io/ingress.class: "nsx" 的註解。

    NCP 會處理不含 kubernetes.io/ingress.class 註解的入口。然而,若有多個入口控制器,最佳做法是一律加上 kubernetes.io/ingress.class 註解,不要仰賴預設的入口控制器行為。

  3. 要由第三方入口控制器處理的入口,必須使用這些入口控制器所需的值加上註解。
重要: 除非要將 NGINX 設為預設的入口控制器,否則請勿使用 nginx 作為 NGINX 入口控制器,因為這會使得 NGINX 變成預設的入口控制器。

案例 3:無論其註解為何,NCP 都不會處理任何的入口。

請遵循此程序:
  1. 在每個主節點上編輯 ncp.ini 中的 nsx_v3 區段。
    1. use_native_loadbalancer 設為 Falsedefault_ingress_class_nsx 的值會變成不相關。
  2. 在每個主節點上重新啟動 NCP。這可能會導致主節點容錯移轉。

請注意,NCP 也不會處理 LoadBalancer 類型的服務