使用應用程式路由附加元件的受控 NGINX 輸入

謹慎

Kubernetes SIG 網路與安全回應委員會宣布 Ingress NGINX 專案即將退休,維護將於 2026 年 3 月結束。 目前使用 NGINX 應用程式路由外掛的 AKS 叢集目前不需要立即採取行動。 Microsoft 將為應用程式路由附加 NGINX Ingress 資源提供關鍵安全修補程式的官方支援,支援至 2026 年 11 月。

AKS 正與上游 Kubernetes 對齊,將 Gateway API 作為入口和 L7 流量管理的長期標準。 我們建議您根據目前的設定開始規劃遷移路徑:

將超文字傳輸通訊協定 (HTTP) 與安全 (HTTPS) 流量路由至在 Azure Kubernetes Service (AKS) 叢集中執行的應用程式,其中一種方式是使用 Kubernetes Ingress 物件。 當你啟用 NGINX 的應用程式路由外掛時,它會在你的 AKS 叢集中建立、設定並管理一個 Ingress 控制器。

本文將向您展示如何啟用受管理的 NGINX Ingress 控制器,並設定 Ingress 物件將流量路由至您的 AKS 叢集中的應用程式。

具備 NGINX 功能的應用程式路由附加元件

具備 NGINX 的應用程式路由附加元件提供下列功能:

如需其他組態,請參閱:

重要事項

自 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-nginx app-routing-system。

  • 如果某個片段註解值與以下任何阻塞值相符,則 Ingress 未被設定:

    封鎖的值 Effect
    load_module Ingress 沒有設定好。
    lua_package Ingress 沒有設定好。
    _by_lua Ingress 沒有設定好。
    location Ingress 沒有設定好。
    root Ingress 沒有設定好。
    proxy_pass Ingress 沒有設定好。
    serviceaccount Ingress 沒有設定好。
    { 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 控制器的路由規則。 使用應用程式路由外掛的管理入口類別及支援的註解,來配置控制器如何處理流量。

  1. 使用 aks-store 命令建立名為 kubectl create namespace 的應用程式命名空間,以執行範例 Pod。

    kubectl create namespace aks-store
    
  2. 使用下列 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 控制器。

  1. 將下列 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
    
  2. 使用 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 刪除該命名空間以移除它們。