Share via


教學課程:使用現有的應用程式閘道,啟用現有 AKS 叢集的應用程式閘道輸入控制器附加元件

您可以使用 Azure CLI 或入口網站來啟用現有的 Azure Kubernetes Services (AKS) 叢集的 應用程式閘道輸入控制器 (AGIC) 附加元件。 在本教學課程中,您將了解如何使用 AGIC 附加元件,透過部署在不同虛擬網路中的現有應用程式閘道,在現有的 AKS 叢集中公開您的 Kubernetes 應用程式。 首先,您會在一個虛擬網路中建立 AKS 叢集,並在另一個的虛擬網路中建立應用程式閘道來模擬現有的資源。 接著您會啟用 AGIC 附加元件,同時對兩個虛擬網路進行對等互連,並部署範例應用程式,透過應用程式閘道使用 AGIC 附加元件來公開。 如果要在相同的虛擬網路中為現有應用程式閘道和現有的 AKS 叢集啟用 AGIC 附加元件,則可以略過下面的對等互連步驟。 相較於透過 Helm,附加元件可讓您更快速地部署 AKS 叢集的 AGIC,同時也提供完全受控的經驗。

在本教學課程中,您會了解如何:

  • 建立資源群組
  • 建立新的 AKS 叢集
  • 建立新的應用程式閘道
  • 透過 Azure CLI 在現有 AKS 叢集啟用 AGIC 附加元件
  • 透過 Azure 入口網站在現有 AKS 叢集啟用 AGIC 附加元件
  • 將應用程式閘道虛擬網路與 AKS 叢集虛擬網路對等互連
  • 使用 AGIC 在 AKS 叢集上輸入,以部署範例應用程式
  • 檢查是否可透過應用程式閘道連線到應用程式

如果您沒有 Azure 訂閱,請在開始之前,先建立 Azure 免費帳戶

必要條件

建立資源群組

在 Azure 中,您可以將相關資源配置到資源群組。 使用 az group create 建立資源群組。 下列範例會在 [美國東部] 位置建立名為 myResourceGroup 的資源群組 (區域):

az group create --name myResourceGroup --location eastus

部署新的 AKS 叢集

您現在會部署新的 AKS 叢集,以模擬您想要為其啟用 AGIC 附加元件的現有的 AKS 叢集。

在下列範例中,您將會使用所建立之資源群組 myResourceGroup 中的 Azure CNI受控識別來部署名為 myCluster 的新 AKS 叢集。

az aks create --name myCluster --resource-group myResourceGroup --network-plugin azure --enable-managed-identity --generate-ssh-keys

若要為上述命令設定更多參數,請參閱 az aks 建立

注意

將會建立節點資源群組,名稱為 MC_resource-group-name_cluster-name_location

部署新的應用程式閘道

您現在會部署新的應用程式閘道以模擬現有的應用程式閘道,而您要使用此應用程式閘道對 AKS 叢集 myCluster 的流量進行負載平衡。 應用程式閘道的名稱會是 myApplicationGateway,但您必須先建立一個名為 myPublicIp 的公用 IP 資源,以及一個位址空間為 10.0.0.0/16 且名為 myVnet 的新虛擬網路,還有一個位址空間為 10.0.0.0/24 且名為 mySubnet 的子網路,並在 mySubnet 中使用 myPublicIp 部署您的應用程式閘道。

警告

您在不同的虛擬網路中使用 AKS 叢集和應用程式閘道時,這兩個虛擬網路的位址空間不能重疊。 AKS 叢集部署的預設位址空間是 10.224.0.0/12。

az network public-ip create --name myPublicIp --resource-group myResourceGroup --allocation-method Static --sku Standard
az network vnet create --name myVnet --resource-group myResourceGroup --address-prefix 10.0.0.0/16 --subnet-name mySubnet --subnet-prefix 10.0.0.0/24 
az network application-gateway create --name myApplicationGateway --resource-group myResourceGroup --sku Standard_v2 --public-ip-address myPublicIp --vnet-name myVnet --subnet mySubnet --priority 100

注意

應用程式閘道輸入控制器附加元件 (AGIC)「僅支援」應用程式閘道 v2 SKU (標準和 WAF),而「不支援」應用程式閘道 v1 SKU。

透過 Azure CLI 在現有 AKS 叢集啟用 AGIC 附加元件

如果您想要繼續使用 Azure CLI,可以在您建立的 AKS 叢集 myCluster 中啟用 AGIC 附加元件,並指定 AGIC 附加元件以使用您建立的現有應用程式閘道 myApplicationGateway

appgwId=$(az network application-gateway show --name myApplicationGateway --resource-group myResourceGroup -o tsv --query "id") 
az aks enable-addons --name myCluster --resource-group myResourceGroup --addon ingress-appgw --appgw-id $appgwId

重要

當您在與 AKS 叢集資源群組不同的資源群組中使用應用程式閘道時,所建立的受控識別 輸入應用程式閘道-{AKSNAME} 必須在 應用程式閘道資源群組中設定網路參與者讀取者 角色。

讓兩個虛擬網路一起對等互連

由於您已將 AKS 叢集部署在自己的虛擬網路,而將應用程式閘道在另一個虛擬網路,因此您必須將兩個虛擬網路對等互連,才能讓流量從應用程式閘道流到叢集中的 Pod。 將兩個虛擬網路對等互連需要在不同的時間執行 Azure CLI 命令,以確保連線是雙向的。 第一個命令會建立從應用程式閘道虛擬網路到 AKS 虛擬網路的對等互連連線;第二個命令會建立另一個方向的對等互連連線。

nodeResourceGroup=$(az aks show --name myCluster --resource-group myResourceGroup -o tsv --query "nodeResourceGroup")
aksVnetName=$(az network vnet list --resource-group $nodeResourceGroup -o tsv --query "[0].name")

aksVnetId=$(az network vnet show --name $aksVnetName --resource-group $nodeResourceGroup -o tsv --query "id")
az network vnet peering create --name AppGWtoAKSVnetPeering --resource-group myResourceGroup --vnet-name myVnet --remote-vnet $aksVnetId --allow-vnet-access

appGWVnetId=$(az network vnet show --name myVnet --resource-group myResourceGroup -o tsv --query "id")
az network vnet peering create --name AKStoAppGWVnetPeering --resource-group $nodeResourceGroup --vnet-name $aksVnetName --remote-vnet $appGWVnetId --allow-vnet-access

注意

若您有使用 Kubenet 模式的現有 AKS 叢集,請在上方的「部署新的 AKS 叢集」步驟中使用 Azure CNI 建立 AKS,以更新路由表以協助 POD IP 的封包到達裝載 Pod 的節點。 達成此目的的簡單方式是將 AKS 所建立的相同路由表與應用程式閘道的子網路產生關聯。

使用 AGIC 部署範例應用程式

您現在會將範例應用程式部署至您所建立的 AKS 叢集,該叢集會使用 AGIC 附加元件輸入,並將應用程式閘道連線到 AKS 叢集。 首先,您可以藉由執行 az aks get-credentials 命令,取得部署之 AKS 叢集的認證。

az aks get-credentials --name myCluster --resource-group myResourceGroup

取得所建立之叢集的認證後,請執行下列命令來設定使用 AGIC 來輸入叢集的範例應用程式。 AGIC 會將您先前設定的應用程式閘道,更新為您所部署之新範例應用程式的對應路由規則。

kubectl apply -f https://raw.githubusercontent.com/Azure/application-gateway-kubernetes-ingress/master/docs/examples/aspnetapp.yaml 

檢查是否可連線到應用程式

既然應用程式閘道已設定為可提供 AKS 叢集的流量,讓我們來驗證您的應用程式是否可連線。 首先取得輸入的 IP 位址。

kubectl get ingress

請造訪執行上述命令所得到之應用程式閘道的 IP 位址,或使用 curl 檢查,以檢查您所建立的範例應用程式是否已啟動且正在執行。 應用程式閘道可能需要一分鐘才能取得更新;因此如果應用程式閘道在 Azure 入口網站上仍處於「更新中」狀態,請先讓其完成,然後再嘗試連線到 IP 位址。

清除資源

再需要這些資源時,可以刪除 myResourceGroupMC_myResourceGroup_myCluster_eastus 資源群組,來刪除本教學課程中建立的所有資源:

az group delete --name myResourceGroup 
az group delete --name MC_myResourceGroup_myCluster_eastus

下一步