謹慎
Kubernetes SIG 網路與安全回應委員會宣布 Ingress NGINX 專案即將退休,維護將於 2026 年 3 月結束。 目前使用 NGINX 應用程式路由外掛的 AKS 叢集目前不需要立即採取行動。 Microsoft 將為應用程式路由附加 NGINX Ingress 資源提供關鍵安全修補程式的官方支援,支援至 2026 年 11 月。
AKS 正與上游 Kubernetes 對齊,將 Gateway API 作為入口和 L7 流量管理的長期標準。 我們建議您根據目前的設定開始規劃遷移路徑:
- 應用程式路由附加元件使用者:生產工作負載將完全支援至 2026 年 11 月。 遷移至 應用路由閘道 API 實作 ,以獲得基於閘道 API 的入口流量管理體驗。
-
OSS NGINX 使用者 有多種選擇:
- 在規劃長期閘道 API 遷移期間,請遷移至 NGINX 的應用程式路由外掛 ,享受官方支援至 2026 年 11 月。
- 遷移至 應用路由閘道 API 實作 ,以獲得基於閘道 API 的入口流量管理體驗。
- 遷移至 Application Gateway for Containers,該平台同時支援 Ingress API 與閘道 API。
- 服務網狀或進階入口需求:考慮 使用 Istio 服務網狀外掛的閘道 API 入口。 你可以將它用於 Ingress,而無需將 Sidecar 容器注入到你的工作負載內。 如果你需要請求標頭和主體大小限制、Lua 腳本或速率限制,請參考 Gateway API 的限制與替代方案。
將超文字傳輸通訊協定 (HTTP) 與安全 (HTTPS) 流量路由至在 Azure Kubernetes Service (AKS) 叢集中執行的應用程式,其中一種方式是使用 Kubernetes Ingress 物件。 當你啟用 NGINX 的應用程式路由外掛時,它會在你的 AKS 叢集中建立、設定並管理一個 Ingress 控制器。
本文將向您展示如何啟用受管理的 NGINX Ingress 控制器,並設定 Ingress 物件將流量路由至您的 AKS 叢集中的應用程式。
具備 NGINX 功能的應用程式路由附加元件
具備 NGINX 的應用程式路由附加元件提供下列功能:
- 根據 Kubernetes NGINX Ingress 控制器,輕鬆設定受控 NGINX Ingress 控制器。
- 與 Azure DNS 整合用於公有與私有區域管理。
- 使用儲存在 Azure Key Vault 中的憑證進行 SSL 終止。
如需其他組態,請參閱:
重要事項
自 2027 年 9 月 30 日起,Azure Kubernetes 服務(AKS)不再支援開放服務網狀(OSM)外掛。 上游的 Open Service Mesh 專案 已停止維護。
如果你的叢集使用 OSM 外掛,請在支援結束日前遷移到 Istio 外掛。 此退休通知僅適用於受管理的 OSM 外掛,並不涉及開源或自管理服務的網狀網路安裝。 關於遷移步驟,請參閱 從 OSM 外掛遷移到 Istio 外掛的指引。 想隨時掌握 AKS 公告與更新,請參考 AKS 發布說明。
先決條件
- Azure 訂用帳戶。 如果您沒有 Azure 訂用帳戶,您可以建立免費帳戶。
- 已安裝並設定 Azure CLI 版本 2.54.0 或更新版本。 執行
az --version以尋找版本。 如果您需要安裝或升級,請參閱安裝 Azure CLI。
限制
應用程式路由附加元件最多支援五個 Azure DNS 區域。
應用程式路由附加元件只能在已啟用受控識別的 AKS 叢集上使用。
與附加元件整合的所有全域 Azure DNS 區域都必須位於相同的資源群組中。
與附加元件整合的所有私人 Azure DNS 區域都必須位於相同的資源群組中。
不支援在
ConfigMap命名空間中編輯 ingress-nginxapp-routing-system。如果某個片段註解值與以下任何阻塞值相符,則 Ingress 未被設定:
封鎖的值 Effect load_moduleIngress 沒有設定好。 lua_packageIngress 沒有設定好。 _by_luaIngress 沒有設定好。 locationIngress 沒有設定好。 rootIngress 沒有設定好。 proxy_passIngress 沒有設定好。 serviceaccountIngress 沒有設定好。 {Ingress 沒有設定好。 }Ingress 沒有設定好。 'Ingress 沒有設定好。 該附加元件官方不支援將非 Microsoft 管理的側車(例如自訂遙測、日誌或安全代理)注入其所管理的 ingress-nginx 代理 pods。 如果您選擇將自己的側車注入受控 Proxy Pod 中,Microsoft 對於您遇到的任何問題,只能盡力支援。
啟用使用 Azure CLI 的應用程式路由附加元件
在新的叢集上啟用
若要在新的叢集上啟用應用程式路由,請使用 az aks create 命令,並指定 --enable-app-routing 旗標。
az aks create \
--resource-group <resource-group-name> \
--name <cluster-name> \
--location <location> \
--enable-app-routing \
--generate-ssh-keys
在現有叢集上啟用
若要在現有叢集上啟用應用程式路由,請使用 az aks approuting enable 命令。
az aks approuting enable --resource-group <resource-group-name> --name <cluster-name>
連線至您的 AKS 叢集
如果要從本機電腦連線至 Kubernetes 叢集,應使用 Kubernetes 命令列用戶端 kubectl。 您可以使用 az aks install-cli 命令在本機安裝。 如果您使用 Azure Cloud Shell,則已安裝 kubectl。
設定 kubectl 以使用 az aks get-credentials 命令連線到您的 Kubernetes 叢集。
az aks get-credentials --resource-group <resource-group-name> --name <cluster-name>
部署應用程式
Kubernetes Ingress 物件定義了 Ingress 控制器的路由規則。 使用應用程式路由外掛的管理入口類別及支援的註解,來配置控制器如何處理流量。
使用
aks-store命令建立名為kubectl create namespace的應用程式命名空間,以執行範例 Pod。kubectl create namespace aks-store使用下列 YAML 資訊清單檔案部署 AKS store 應用程式:
kubectl apply -f https://raw.githubusercontent.com/Azure-Samples/aks-store-demo/main/sample-manifests/docs/app-routing/aks-store-deployments-and-services.yaml -n aks-store
此清單會建立 rabbitmq、 order-service、 product-service以及 store-front 部署及相應的服務。
store-front 服務會公開 80 連接埠,下一節中的 Ingress 會將流量路由至該連接埠。
建立 Ingress 物件
當你啟用應用程式路由外掛時,它會建立一個名為 webapprouting.kubernetes.azure.com 的 Ingress 類別。 在 Ingress 物件中指定此類別,以使用外掛的管理 NGINX Ingress 控制器。
將下列 YAML 資訊清單複製到名為 ingress.yaml 的新檔案中,並將檔案儲存至您的本機電腦。
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: store-front namespace: aks-store spec: ingressClassName: webapprouting.kubernetes.azure.com rules: - http: paths: - backend: service: name: store-front port: number: 80 path: / pathType: Prefix使用
kubectl apply命令建立 ingress 資源。kubectl apply -f ingress.yaml -n aks-store下列範例輸出顯示已建立的資源:
ingress.networking.k8s.io/store-front created
驗證受管理的 Ingress 資源
您可以使用 kubectl get ingress 命令來確認已建立受控輸入。
kubectl get ingress -n aks-store
下列範例輸出顯示已建立的受控 Ingress:
NAME CLASS HOSTS ADDRESS PORTS AGE
store-front webapprouting.kubernetes.azure.com * 51.8.10.109 80 110s
你可以讓瀏覽器連線到 Ingress 控制器的公用 IP 位址,藉此驗證 AKS 商店是否正常運作。 以下指令可擷取負載平衡器指派給 app-routing-system 命名空間中受管理的 NGINX Ingress 控制器之 nginx Service 的外部 IP 位址:
kubectl get service -n app-routing-system nginx -o jsonpath="{.status.loadBalancer.ingress[0].ip}"
移除應用程式路由附加元件
若要移除相關聯的命名空間,請使用 kubectl delete namespace 命令。
kubectl delete namespace aks-store
若要從叢集中移除應用程式路由附加元件,請使用 az aks approuting disable 命令。
az aks approuting disable --name <cluster-name> --resource-group <resource-group-name>
附註
為了避免停用應用程式路由附加元件時可能干擾叢集的流量,部分 Kubernetes 資源,包括 configMaps、 secret 以及執行控制器的 部署 ,會保留在叢集上。 這些資源位於 app-routing-system 命名空間中。 如果不再需要這些資源,您可以使用 kubectl delete ns app-routing-system 刪除該命名空間以移除它們。
相關內容
- 啟用 應用程式路由閘道 API 實作 ,以管理 Kubernetes 閘道 API 的入口流量。
- 「配置自訂入口配置」 示範如何建立進階的入口設定。 用 Azure DNS 設定自訂網域來管理 DNS 區域並設定安全入口。
- 若要與 Azure 內部負載平衡器整合,並設定私人 Azure DNS 區域以啟用 DNS 解析,讓私人端點能夠解析特定網域,請參閱為 Azure 私人 DNS 區域設定內部 NGINX 輸入控制器。
- 了解如何在 Grafana 中使用 Prometheus 監控應用程式路由增益集所包含的 ingress-nginx 控制器計量(預覽),作為分析應用程式效能和使用情況的一部分。