從 Ingress( NGINX )遷移至 Traefik Ingress 控制器
將您的 Ingress 設定遷移至使用 Traefik 控制器,取代原有的 Ingress- NGINX 控制器。
開始之前
在進行遷移之前,請先檢視這些先決條件。
-
請確保您擁有必要的權限。
- 叢集的管理員平台存取角色
- 所有命名空間中的「管理員」服務存取角色
-
檢視現有的 Ingress 資源,以確認其中是否包含針對 Ingress- NGINX 的特定註解或設定。 請參閱有關 這兩款 Ingress 控制器之間主要差異的 文件。
-
請根據工作負載需求、停機容忍度及資源可用性,規劃您的遷移策略。 在遷移過程中,這兩台控制器均可同時運作。
-
為確保高可用性,請確保您的叢集在每個區域中至少擁有兩個工作節點。
-
在進行變更之前,請先備份您目前的 Ingress 設定。
策略 1:使用不同網域將 Ingress 設定分開
在保持生產環境繼續使用 Ingress 的同時,透過獨立的設定來測試 Traefik —— NGINX。 這項策略能提供最大的隔離與安全保障。
在以下情況下請採用此策略:
- 在將生產環境的工作負載遷移之前,您應先徹底測試 Traefik。
- 您可以部署另一組應用程式來進行測試。
- 您擁有足夠的資源來運行更多 ALB。
- 您希望在測試期間,生產環境完全不會面臨任何風險。
步驟
- 取得可用的 Traefik 版本。
ibmcloud ks ingress alb versions - 使用 Traefik 建立一個新的 ALB。
經典簇
sh {: pre} ibmcloud ks ingress alb create classic --cluster CLUSTER_NAME --type PUBLIC_OR_PRIVATE --zone ZONE --vlan VLAN_ID --version TRAEFIK_VERSION
VPC 叢集
sh {: pre} ibmcloud ks ingress alb create vpc-gen2 --cluster CLUSTER_NAME --type PUBLIC_OR_PRIVATE --zone ZONE --version TRAEFIK_VERSION
-
對於 VPC 叢集,請手動部署一個額外的 LoadBalancer 服務,以供測試之用。 將
spec.selector設定為包含app.kubernetes.io/vpcComponent: public-cr<cluster_id>-traefik(若為私有 ALB,則為private-cr<cluster_id>-traefik)。 在 Classic 叢集上,系統會自動配置新的負載平衡器,無需進行任何額外設定。 -
為 Traefik ALB 建立一個自訂網域,並將其指向負載平衡器的主機名稱或 IP 位址。 請參閱「建立自訂網域」以獲取詳細說明。
-
使用 Traefik Ingress 類別為測試應用程式建立一個 Ingress 資源。 請依照 步驟 3:建立 Ingress 資源,並指定
ingressClassName: public-iks-traefik(若為私有 ALB,則指定private-iks-traefik)。 -
透過 Traefik 網域測試應用程式,並驗證其功能。
-
測試完成後,請繼續進行 「切換」 步驟,以遷移您的生產環境工作負載。
策略 2:配備相同工作負載的雙負載平衡器
透過建立兩個指向同一項服務的 Ingress 資源,在相同的工作負載上測試這兩組控制器。 您可以直接比較控制器行為,而不會影響生產環境的流量。
在以下情況下請採用此策略:
- 您想比較 Ingress( NGINX )與 Traefik 在相同工作負載下的運作行為。
- 您需要確認 Traefik 能否正確處理您的特定應用程式。
- 您可以使用非生產環境的網域進行測試。
- 您希望將所需的測試應用程式數量降至最低。
步驟
- 啟用一個基於 Traefik 的新 ALB。
經典簇
sh {: pre} ibmcloud ks ingress alb create classic --cluster CLUSTER_NAME --type PUBLIC_OR_PRIVATE --zone ZONE --vlan VLAN_ID --version TRAEFIK_VERSION
VPC 叢集
sh {: pre} ibmcloud ks ingress alb create vpc-gen2 --cluster CLUSTER_NAME --type PUBLIC_OR_PRIVATE --zone ZONE --version TRAEFIK_VERSION
-
對於 VPC 叢集,請手動部署一個額外的 LoadBalancer 服務,以供測試之用。 將
spec.selector設定為包含app.kubernetes.io/vpcComponent: public-cr<cluster_id>-traefik(若為私有 ALB,則為private-cr<cluster_id>-traefik)。 在 Classic 叢集上,系統會自動配置新的負載平衡器,無需進行任何額外設定。 -
為 Traefik ALB 建立一個自訂網域,並將其指向負載平衡器的主機名稱或 IP 位址。 請參閱「建立自訂網域」以獲取詳細說明。
-
建立第二個 Ingress 資源,該資源應使用 Traefik Ingress 類別,但指向與您現有的 Ingress 資源( NGINX )相同的服务。 請依照「步驟 3:建立 Ingress 資源」中的指示操作,並務必確保:
- 請指定
ingressClassName: public-iks-traefik(若為私有 ALB,則為private-iks-traefik) - 請使用與您現有的 Ingress( NGINX )Ingress 資源相同的
service.name值 - 請在「
host」和「tls.hosts」欄位中填入您的測試網域
- 請指定
-
請透過這兩個網域測試您的應用程式。
- 透過 Ingress- NGINX 網域(正式環境)存取
- 透過 Traefik 網域 (testing) 存取
-
比較這兩款控制器在行為、效能及功能方面的差異。
-
驗證完成後,請繼續進行 「切換」 步驟,將您的生產環境網域遷移至 Traefik。
策略 3:分割 DNS 測試
利用分割 DNS 設定,在類似生產環境的條件下,使用您的生產環境網域測試 Traefik,同時不會影響您的使用者。
在以下情況下請採用此策略:
- 您想使用實際的生產網域進行測試。
- 您可以自行控制測試環境的 DNS 設定。
- 您需要驗證確切的生產環境配置。
- 您希望將測試環境與生產環境之間的差異降至最低。
步驟
- 啟用一個基於 Traefik 的新 ALB。
經典簇
sh {: pre} ibmcloud ks ingress alb create classic --cluster CLUSTER_NAME --type PUBLIC_OR_PRIVATE --zone ZONE --vlan VLAN_ID --version TRAEFIK_VERSION
VPC 叢集
sh {: pre} ibmcloud ks ingress alb create vpc-gen2 --cluster CLUSTER_NAME --type PUBLIC_OR_PRIVATE --zone ZONE --version TRAEFIK_VERSION
-
對於 VPC 叢集,請手動部署一個額外的 LoadBalancer 服務,以供測試之用。 將
spec.selector設定為包含app.kubernetes.io/vpcComponent: public-cr<cluster_id>-traefik(若為私有 ALB,則為private-cr<cluster_id>-traefik)。 在 Classic 叢集上,系統會自動配置新的負載平衡器,無需進行任何額外設定。 -
取得新 Traefik ALB 的 IP 位址(傳統模式)或主機名稱(VPC)。
ibmcloud ks ingress alb ls --cluster CLUSTER_NAME -
請在您的測試環境中設定分割 DNS。
- 針對您的測試機器或網路,請將 DNS 設定為將您的生產環境網域解析至 Traefik ALB 的 IP 位址/主機名稱
- 生產環境的使用者持續將流量導向 Ingress — NGINX ALB
- 這可透過本機端的
/etc/hosts檔案、內部 DNS 伺服器,或 VPN 專用的 DNS 設定來實現
-
使用 Traefik Ingress 類別,並搭配您的生產環境網域,建立一個新的 Ingress 資源。 請依照 步驟 3:建立 Ingress 資源,並在
host和tls.hosts欄位中分別指定ingressClassName: public-iks-traefik(若為私有 ALB,則指定private-iks-traefik)以及您的正式環境網域。 -
請從您的分割 DNS 環境進行測試,以驗證 Traefik 在生產環境網域及設定下的運作狀況。
-
驗證完成後,請繼續進行「切換設定」步驟,將生產環境的 DNS 指向 Traefik。
策略 4:直接遷移
只需進行最少的設定變更與資源管理,即可直接從 Ingress( NGINX )切換至 Traefik。
此策略會在遷移期間導致服務中斷。 開始之前,請先規劃好維護時段。
在以下情況下請採用此策略:
- 您的工作負載較小,或是使用的是非關鍵型應用程式。
- 您可容忍遷移過程中出現短暫的服務中斷。
- 您希望將需要管理的資源數量降至最低。
- 您已在另一個環境中驗證過 Traefik 的相容性。
- 在 Classic 環境中,您必須保持 ALB 的 IP 位址不變,因為您的客戶端是透過 IP 位址而非 DNS 網域進行連線的。
停用並重新啟用 ALB 時,其原始 IP 位址將予以保留,除非該 IP 位址在此期間已被其他服務佔用。 如需更多資訊,請參閱「啟用或停用 ALB」。
步驟
-
取得您目前 Ingress- NGINX ALB 的 ID。
ibmcloud ks ingress alb ls --cluster CLUSTER_NAME -
停用 Ingress- NGINX ALB。
ibmcloud ks ingress alb disable --alb ALB_ID --cluster CLUSTER_NAMEVPC 叢集:若您停用最後一個公有或私有 ALB,請等待 ALB 部署及對應的負載平衡器服務資源被刪除後,再啟用 Traefik ALB。
-
啟用搭配 Traefik 版本 的 ALB。
經典簇
sh {: pre} ibmcloud ks ingress alb enable classic --alb ALB_ID --version TRAEFIK_VERSION --cluster CLUSTER_NAME 若要在 Classic 版本中為 ALB 指定特定 IP 位址,請使用 --ip 標誌。 如需更多資訊,請參閱「啟用或停用 ALB」。
[VPC 叢集]{: tag-vpc}
```sh {: pre}
ibmcloud ks ingress alb enable vpc-gen2 --alb ALB_ID --version TRAEFIK_VERSION --cluster CLUSTER_NAME
```
- 對於 VPC 叢集,請將負載平衡器的後端設定為 Traefik。
VPC 叢集
sh {: pre} ibmcloud ks ingress load-balancer backend set --cluster CLUSTER-ID --public-backend traefik [--private-backend traefik]
-
請更新您的 Ingress 資源,以使用 Traefik Ingress 類別。 若您的資源已明確設定 Ingress 類別,請將
spec.ingressClassName從public-iks-k8s-nginx更新為public-iks-traefik(若為私有 ALB,則從private-iks-k8s-nginx更新為private-iks-traefik)。 -
套用更新後的 Ingress 資源。
kubectl apply -f ingress.yaml -
請確認您的應用程式可透過 Traefik 控制器存取。
curl https://<domain>/<app_path>
轉用 Traefik
測試完成後,請將生產流量切換至使用 Traefik 控制器。 經典叢集與 VPC 叢集的操作步驟有所不同。 請選擇與您的叢集類型及設定相符的選項。
經典簇
對於經典叢集,請將您的生產環境網域更新為指向暴露 Traefik 的負載平衡器,而非 Ingress —— NGINX。
選項 1:更新網域對應
- 取得您的 Traefik ALB 的 IP 位址。
ibmcloud ks ingress alb ls --cluster CLUSTER_NAME - 將您的網域更新為指向 Traefik ALB。
ibmcloud ks ingress domain update --cluster CLUSTER_NAME --domain DOMAIN_NAME --ip TRAEFIK_ALB_IP - 請確認網域更新。
ibmcloud ks ingress domain ls --cluster CLUSTER_NAME - 請透過生產環境網域測試您的應用程式,以確認它們現已由 Traefik 提供服務。
選項 2:停用 Ingress — NGINX ALB
此外,您也可以停用所有基於 Ingress- NGINX 的 ALB,系統會自動更新網域映射。
- 列出所有 ALB,並識別出基於 Ingress- NGINX 的那些。
ibmcloud ks ingress alb ls --cluster CLUSTER_NAME - 停用每個 Ingress- NGINX ALB。
ibmcloud ks ingress alb disable --alb NGINX_ALB_ID --cluster CLUSTER_NAME - 請確認您的網域目前已指向 Traefik ALB。
ibmcloud ks ingress domain ls --cluster CLUSTER_NAME
選項 3:保留 ALB IP 位址
如果您的客戶是直接連線至 ALB IP 位址,而非 DNS 名稱,您可以在遷移過程中保留這些 IP 位址。 若要保留 IP 位址,必須暫時停用 ALB,這會導致服務短暫中斷。
停用並重新啟用 ALB 時,其原始 IP 位址將予以保留,除非該 IP 位址已被其他服務佔用。
-
列出所有 ALB,並識別出基於 Ingress- NGINX 的那些,以取得其 ID 和 IP 位址。
ibmcloud ks ingress alb ls --cluster CLUSTER_NAME -
停用 Ingress- NGINX ALB。 這會導致該 IP 位址的流量出現短暫的中斷。
ibmcloud ks ingress alb disable --alb ALB_ID --cluster CLUSTER_NAME -
請使用 Traefik 版本重新啟用 ALB,以便重複使用相同的 IP 位址。
ibmcloud ks ingress alb enable classic --alb ALB_ID --version TRAEFIK_VERSION --cluster CLUSTER_NAME或者,建立一個新的 ALB,並使用
--ip標誌來重複使用原始的 IP 位址。 -
請更新您的 Ingress 資源,以使用 Traefik Ingress 類別。 若您的資源已明確設定 Ingress 類別,請將
spec.ingressClassName從public-iks-k8s-nginx更新為public-iks-traefik(若為私有 ALB,則從private-iks-k8s-nginx更新為private-iks-traefik)。 -
套用更新後的 Ingress 資源。
kubectl apply -f ingress.yaml -
請確認您的應用程式可透過 Traefik 控制器存取。
curl https://<domain>/<app_path>
VPC 叢集
對於 VPC 叢集,請將負載平衡器的後端更新為暴露 Traefik 而非 Ingress —— NGINX。
選項 1:更新負載平衡器的後端
- 將負載平衡器更新為使用 Traefik 後端。
ibmcloud ks ingress load-balancer backend set --cluster CLUSTER_NAME --public-backend traefik [--private-backend traefik] - 請驗證負載平衡器的設定。
ibmcloud ks ingress load-balancer get --cluster CLUSTER_NAME - 請測試您的應用程式,以確認它們現在是否已由 Traefik 提供服務。
選項 2:停用 Ingress — NGINX ALB
此外,您也可以停用所有基於 Ingress- NGINX 的 ALB。
- 列出所有 ALB,並識別出基於 Ingress- NGINX 的那些。
ibmcloud ks ingress alb ls --cluster CLUSTER_NAME - 停用每個 Ingress- NGINX ALB。
ibmcloud ks ingress alb disable --alb NGINX_ALB_ID --cluster CLUSTER_NAME - 請確認負載平衡器現在是否已使用 Traefik ALB。
ibmcloud ks ingress load-balancer get --cluster CLUSTER_NAME
遷移後的任務
遷移至 Traefik 後,請完成以下任務:
-
遷移完成後,請監控您的應用程式,以確認是否出現任何意外行為或錯誤。
-
更新內部文件,以反映使用 Traefik 進行的新版 Ingress 設定。
-
移除所有不再需要的測試用 ALB、網域或 Ingress 資源。
-
確認 Traefik 運作如預期後,請停用剩餘的 Ingress- NGINX 應用層負載平衡器 (ALB)。
ibmcloud ks ingress alb disable --alb NGINX_ALB_ID --cluster CLUSTER_NAME
疑難排解
若您在遷移過程中或遷移後遇到問題,請依照以下步驟進行診斷並解決。
- 檢查 Ingress 階級
-
請確認 Ingress 資源是否使用了正確的 Traefik 類別(
public-iks-traefik或private-iks-traefik)。 - 驗證 ALB 狀態
-
請確保您的 Traefik ALB 處於正常運作狀態。
ibmcloud ks ingress alb ls --cluster CLUSTER_NAME - 檢查 Ingress 狀態
-
請檢視您的 Ingress 資源狀態。
kubectl get ingress -A - 檢視日誌
-
請檢查 Traefik 控制器日誌中是否有錯誤。
kubectl logs -n kube-system -l alb-image-type=traefik - 執行診斷
-
請利用 Ingress 狀態報告來找出問題。
ibmcloud ks ingress status-report get --cluster CLUSTER_NAME - 如有需要,請還原
-
NGINX 若遇到嚴重問題,請停用 Traefik ALB,並重新啟用原始版本的 Ingress- NGINX ALB,以回滾至 Ingress- 版本。 規劃解決這些問題,並再次進行遷移。
如需進一步協助,請參閱《 Ingress 疑難排解 》或聯絡 IBM Cloud 技術支援。