您可以將 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.ini 的 k8s 區段中,設定 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: {}。若要避免發生此情況,請執行下列步驟:
- 如果入口控制器來自於 https://github.com/kubernetes/ingress-nginx,
- 請在入口控制器上,將 ingress-class 變更為 "nginx" 以外的內容。
- 如果有包含 kubernetes.io/ingress-class: "nginx" 註解的入口,請將註解變更為其他值。
- 如需詳細資訊,請參閱https://kubernetes.github.io/ingress-nginx/user-guide/multiple-ingress。
- 如果入口控制器來自於 https://github.com/nginxinc/kubernetes-ingress,
- 請在入口控制器上,將 ingress-class 變更為 "nginx" 以外的內容。
- 如果有包含 kubernetes.io/ingress-class: "nginx" 註解的入口,請將註解變更為其他值。
- 請在入口控制器網繭上,將 use-ingress-class-only 設定為 True。這會避免此控制器更新不含 kubernetes.io/ingress-class 註解的入口。
- 如需詳細資訊,請參閱https://github.com/kubernetes/ingress-nginx/blob/master/docs/user-guide/multiple-ingress.md。
對於在 NAT 模式中部署的第三方入口控制器,您可以修改 k8s 區段中的 http_ingress_port 和 https_ingress_port 參數,以指定針對入口控制器公開之 NAT 規則的自訂連接埠。
案例 1:NCP 處理入口,但並非預設的入口控制器。
請遵循此程序操作,讓 NCP 處理
nsx 類別的入口。
- 在每個主節點上編輯 ncp.ini 中的 nsx_v3 區段。
- 將 default_ingress_class_nsx 設為 False。
- 將 use_native_loadbalancer 的設定保留為預設值 True。
- 在每個主節點上重新啟動 NCP。這可能會導致主節點容錯移轉。
- 針對您希望 NCP 搭配 kubernetes.io/ingress.class: "nsx" 處理的所有入口加上註解。
案例 2:NCP 是預設的入口控制器。
請遵循此程序:
- 不需要編輯 ncp.ini,但請確保每個入口皆已加上註解。
- 要由 NCP 處理的入口應包含 kubernetes.io/ingress.class: "nsx" 的註解。
NCP 會處理不含 kubernetes.io/ingress.class 註解的入口。然而,若有多個入口控制器,最佳做法是一律加上 kubernetes.io/ingress.class 註解,不要仰賴預設的入口控制器行為。
- 要由第三方入口控制器處理的入口,必須使用這些入口控制器所需的值加上註解。
重要: 除非要將 NGINX 設為預設的入口控制器,否則請勿使用
nginx 作為 NGINX 入口控制器,因為這會使得 NGINX 變成預設的入口控制器。
案例 3:無論其註解為何,NCP 都不會處理任何的入口。
請遵循此程序:
- 在每個主節點上編輯 ncp.ini 中的 nsx_v3 區段。
- 將 use_native_loadbalancer 設為 False。default_ingress_class_nsx 的值會變成不相關。
- 在每個主節點上重新啟動 NCP。這可能會導致主節點容錯移轉。
請注意,NCP 也不會處理 LoadBalancer 類型的服務