你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

教程:使用新的应用程序网关实例为新的 AKS 群集启用入口控制器加载项

你可以使用 Azure CLI 为新的 Azure Kubernetes 服务 (AKS) 群集启用应用程序网关入口控制器 (AGIC) 加载项。

在本教程中,你将创建一个启用 AGIC 加载项的 AKS 群集。 创建群集时,将自动创建要使用的 Azure 应用程序网关实例。 然后需部署一个示例应用程序,该应用程序将利用该加载项通过应用程序网关公开应用程序。

此加载项为 AKS 群集提供了一种比之前通过 Helm 进行部署快得多的 AGIC 部署方法。 它还提供了完全托管体验。

本教程介绍如何执行下列操作:

  • 创建资源组。
  • 创建启用 AGIC 加载项的新 AKS 群集。
  • 在 AKS 群集上部署将 AGIC 用于入口的示例应用程序。
  • 检查是否可以通过应用程序网关访问应用程序。

如果没有 Azure 订阅,请在开始之前创建一个 Azure 免费帐户

先决条件

创建资源组

在 Azure 中,可将相关的资源分配到资源组。 使用 az group create 创建资源组。 以下示例在“美国东部”位置(区域)创建名为“myResourceGroup”的资源组:

az group create --name myResourceGroup --location eastus

部署启用了加载项的 AKS 群集

现在将部署启用了 AGIC 加载项的新 AKS 群集。 如果你未提供要在此过程中使用的现有应用程序网关实例,你将自动创建并设置新的应用程序网关实例,用于向 AKS 群集提供流量。

注意

应用程序网关入口控制器加载项仅支持应用程序网关 v2 SKU(标准版和 WAF 版),不支持应用程序网关 v1 SKU。 通过 AGIC 加载项部署新的应用程序网关实例时,只能部署应用程序网关 Standard_v2 SKU。 如果要为应用程序网关 WAF_v2 SKU 启用该加载项,请使用以下方法之一:

下面的示例将使用 Azure CNI托管标识部署名为 myCluster 的新 AKS 群集。 还将在创建的 myResourceGroup 资源组中启用 AGIC 加载项。

在未指定现有应用程序网关实例的情况下部署启用了 AGIC 加载项的新 AKS 群集将自动创建 Standard_v2 SKU 应用程序网关实例。 需要为新的应用程序网关实例指定名称和子网地址空间。 地址空间必须来自 AKS 虚拟网络使用的 10.224.0.0/12 前缀,而不与 AKS 子网使用的 10.224.0.0/16 前缀重叠。 在本教程中,使用 myApplicationGateway 作为应用程序网关名称,使用 10.225.0.0/16 作为其子网地址空间。

az aks create -n myCluster -g myResourceGroup --network-plugin azure --enable-managed-identity -a ingress-appgw --appgw-name myApplicationGateway --appgw-subnet-cidr "10.225.0.0/16" --generate-ssh-keys

[注意!] 请确保 AGIC 使用的标识已将 Microsoft.Network/virtualNetworks/subnets/join/action 权限委托给应用程序网关部署到的子网。 如果未使用此权限定义自定义角色,则可以使用包含 Microsoft.Network/virtualNetworks/subnets/join/action 权限的内置网络参与者角色。

# Get application gateway id from AKS addon profile
appGatewayId=$(az aks show -n myCluster -g myResourceGroup -o tsv --query "addonProfiles.ingressApplicationGateway.config.effectiveApplicationGatewayId")

# Get Application Gateway subnet id
appGatewaySubnetId=$(az network application-gateway show --ids $appGatewayId -o tsv --query "gatewayIpConfigurations[0].subnet.id")

# Get AGIC addon identity
agicAddonIdentity=$(az aks show -n myCluster -g myResourceGroup -o tsv --query "addonProfiles.ingressApplicationGateway.identity.clientId")

# Assign network contributor role to AGIC addon identity to subnet that contains the Application Gateway
az role assignment create --assignee $agicAddonIdentity --scope $appGatewaySubnetId --role "Network Contributor"

要为上述命令配置更多参数,请参阅 az aks create

注意

创建的 AKS 群集将显示在创建的 myResourceGroup 资源组中。 但是,自动创建的应用程序网关实例将位于代理池所在的节点资源组中。 默认情况下,节点资源组将命名为 MC_resource-group-name_cluster-name_location,但可以修改。

部署使用 AGIC 的示例应用程序

现在将为创建的 AKS 群集部署示例应用程序。 该应用程序将使用 AGIC 加载项作为入口,并会将应用程序网关实例连接到 AKS 群集。

首先,通过运行 az aks get-credentials 命令获取 AKS 群集的凭据:

az aks get-credentials -n myCluster -g 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

应用程序网关可能需要一分钟才能获取更新。 如果应用程序网关在门户上仍处于“正在更新”状态,请等待更新完成,然后再尝试访问该 IP 地址。

清理资源

如果不再需要这些资源,请删除本教程中创建的所有资源,方法是删除 myResourceGroup 和 MC_myResourceGroup_myCluster_eastus 资源组:

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

后续步骤

在本教程中,你将了解:

  • 创建了已启用 AGIC 加载项的新 AKS 群集
  • 在 AKS 群集上部署了将 AGIC 用于入口的示例应用程序

若要了解有关 AGIC 的详细信息,请参阅什么是应用程序网关入口控制器为 AKS 群集禁用并重新启用 AGIC 加载项

若要了解如何使用现有应用程序网关为现有的 AKS 群集启用应用程序网关入口控制器加载项,请转到下一教程。