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

將超文字傳輸通訊協定 (HTTP) 和安全 (HTTPS) 流量路由至在 Azure Kubernetes Service (AKS) 叢集上執行中應用程式的方法之一,就是使用 Kubernetes 輸入物件。 利用應用程式路由附加元件 NGINX 輸入類別建立輸入物件時,附加元件會在 AKS 叢集內建立、設定並管理一或多個輸入控制器。

本文說明如何在 AKS 叢集中部署和設定基本輸入控制器。

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

具有 NGINX 功能的應用程式路由附加元件可實現:

  • 根據 Kubernetes NGINX 輸入控制器,輕鬆設定受控 NGINX 輸入控制器。
  • Azure DNS 整合,以進行公用和私人區域管理
  • 使用儲存於 Azure Key Vault 中的憑證進行 SSL 終止。

如需其他組態,請參閱:

隨著 Cloud Native Computing Foundation (CNCF) 淘汰 Open Service Mesh (OSM),不建議將應用程式路由附加元件與 OSM 搭配使用。

必要條件

  • Azure 訂用帳戶。 如果您沒有 Azure 訂用帳戶,您可以建立免費帳戶
  • 已安裝及設定的 Azure CLI 2.54.0 版或更新版本。 執行 az --version 以尋找版本。 如果您需要安裝或升級,請參閱安裝 Azure CLI

限制

  • 應用程式路由附加元件最多可支援五個 Azure DNS 區域。
  • 應用程式路由附加元件只能在具有受控識別的 AKS 叢集上啟用。
  • 與附加元件整合的所有全域 Azure DNS 區域,都必須位於相同的資源群組中。
  • 與附加元件整合的所有私人 Azure DNS 區域,都必須位於相同的資源群組中。
  • 不支援在 app-routing-system 命名空間中編輯 ingress-nginx ConfigMap
  • 以下程式碼片段註釋遭到封鎖,將阻止設定輸入:load_modulelua_package_by_lualocationrootproxy_passserviceaccount{}'

使用 Azure CLI 啟用應用程式路由

在新叢集上啟用

若要在新的叢集上啟用應用程式路由,請使用 az aks create 命令,指定 --enable-app-routing 旗標。

az aks create \
    --resource-group <ResourceGroupName> \
    --name <ClusterName> \
    --location <Location> \
    --enable-app-routing \
    --generate-ssh-keys

在現有的叢集上啟用

若要在現有的叢集上啟用應用程式路由,請使用 az aks approuting enable 命令。

az aks approuting enable --resource-group <ResourceGroupName> --name <ClusterName>

連線至您的 AKS 叢集

若要從本機電腦連線至 Kubernetes 叢集,您應使用 kubectl (Kubernetes 命令列用戶端)。 您可以使用 az aks install-cli 命令在本機安裝。 如果您使用 Azure Cloud Shell,則 kubectl 已安裝。

使用 az aks get-credentials 命令,設定 kubectl 連線到 Kubernetes 叢集。

az aks get-credentials --resource-group <ResourceGroupName> --name <ClusterName>

部署應用程式

應用程式路由附加元件會使用 Kubernetes 輸入物件上的註釋來建立適當的資源。

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

    kubectl create namespace aks-store
    
  2. 使用下列 YAML 指令清單檔部署 AKS 存放區應用程式:

    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
    

此指令清單會為 AKS 存放區應用程式建立必要的部署和服務。

建立輸入物件

應用程式路由附加元件會在名為 webapprouting.kubernetes.azure.com 的叢集上建立輸入類別。 使用此類別建立輸入物件時,會啟動附加元件。

  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 命令建立輸入資源。

    kubectl apply -f ingress.yaml -n aks-store
    

    下列範例輸出顯示已建立的資源:

    ingress.networking.k8s.io/store-front created
    

確認已建立受控輸入

您可以使用 kubectl get ingress 來確認已建立受控輸入。

kubectl get ingress -n aks-store

下列範例輸出顯示已建立的受控輸入:

NAME          CLASS                                HOSTS   ADDRESS       PORTS   AGE
store-front   webapprouting.kubernetes.azure.com   *       51.8.10.109   80      110s

您可以確認 AKS 存放區的運作方式,將瀏覽器指向輸入控制器的公用 IP 位址。 使用 kubectl 尋找 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 <ClusterName> --resource-group <ResourceGroupName>

注意

為了避免在應用程式路由附加元件停用時,對叢集流量的潛在中斷,某些 Kubernetes 資源,包括 configMaps、秘密,以及執行控制器的部署,都會保留在叢集上。 這些資源位於 應用程式路由系統 命名空間中。 如果不再需要這些資源,請使用 刪除命名空間 kubectl delete ns app-routing-system來移除這些資源。

下一步