教學課程:使用現有的應用程式閘道,啟用現有 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 Cloud Shell 中使用 Bash 環境。 如需詳細資訊,請參閱 Azure Cloud Shell 中的 Bash 快速入門。
若要在本地執行 CLI 參考命令,請安裝 Azure CLI。 若您在 Windows 或 macOS 上執行,請考慮在 Docker 容器中執行 Azure CLI。 如需詳細資訊,請參閱〈如何在 Docker 容器中執行 Azure CLI〉。
如果您使用的是本機安裝,請使用 az login 命令,透過 Azure CLI 來登入。 請遵循您終端機上顯示的步驟,完成驗證程序。 如需其他登入選項,請參閱使用 Azure CLI 登入。
出現提示時,請在第一次使用時安裝 Azure CLI 延伸模組。 如需擴充功能詳細資訊,請參閱使用 Azure CLI 擴充功能。
執行 az version 以尋找已安裝的版本和相依程式庫。 若要升級至最新版本,請執行 az upgrade。
建立資源群組
在 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
透過 Azure 入口網站在現有 AKS 叢集啟用 AGIC 附加元件
- 從 Azure 入口網站 首頁,流覽至您的 AKS 叢集資源。
- 在服務功能表中的 [設定] 底下,選取 [網络>虛擬網络整合]。
- 在 [應用程式閘道 輸入控制器] 底下,選取 [管理]。
- 在 [應用程式閘道 輸入控制器] 頁面上,選取複選框以啟用輸入控制器,然後從下拉式清單中選取現有的應用程式網關。
- 選取 [儲存]。
重要
如果您在與 AKS 叢集資源群組不同的資源群組中使用應用程式閘道,所建立的受控識別 ingressapplicationgateway-{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 位址。
清除資源
再需要這些資源時,可以刪除 myResourceGroup 和 MC_myResourceGroup_myCluster_eastus 資源群組,來刪除本教學課程中建立的所有資源:
az group delete --name myResourceGroup
az group delete --name MC_myResourceGroup_myCluster_eastus