你可以使用 Azure CLI 为新的 Azure Kubernetes 服务 (AKS) 群集启用应用程序网关入口控制器 (AGIC) 加载项。
在本教程中,你将创建一个启用 AGIC 加载项的 AKS 群集。 创建群集时,将自动创建要使用的 Azure 应用程序网关实例。 然后需部署一个示例应用程序,该应用程序将利用该加载项通过应用程序网关公开应用程序。
此加载项为 AKS 群集提供了一种比之前通过 Helm 进行部署快得多的 AGIC 部署方法。 它还提供了完全托管体验。
本教程中,您将学习如何:
- 创建资源组。
- 创建启用 AGIC 加载项的新 AKS 群集。
- 在 AKS 群集上部署将 AGIC 用于入口的示例应用程序。
- 检查是否可以通过应用程序网关访问应用程序。
如果没有 Azure 试用版订阅,请在开始前创建 Azure 试用版订阅。
先决条件
创建资源组
在 Azure 中,可将相关的资源分配到资源组。 使用 az group create 创建资源组。 以下示例在“中国北部 2”位置(区域)中创建名为 myResourceGroup 的资源组:
az group create --name myResourceGroup --location chinanorth2
部署启用了加载项的 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
为现有 AKS 群集启用加载项
你已有一个现有的 AKS 群集,并将启用 AGIC 加载项。 可以通过 Azure 门户或使用 Azure CLI 启用加载项。
在屏幕截图的此页面中,只需选中复选框即可创建它。 如果要指定子网前缀,请选择“ 新建 ”并将其手动配置。
可以通过命令为应用程序网关和子网 CIDR 提供名称。
appgw-subnet-cidr 应位于虚拟网络的地址前缀中。 请将 10.0.250.0/24 更改为首选的应用程序网关子网 CIDR。 这必须始终位于虚拟网络的地址空间范围内。
$ az aks enable-addons --resource-group ${RG_NAME} --name ${CLUSTER_NAME} --addons ingress-appgw --appgw-subnet-cidr "10.0.250.0/24"
在大多数情况下,启用加载项会自动分配所需的权限。 但是,根据环境,可能不会自动授予权限。 在这种情况下,应验证权限,并在必要时手动分配权限。
注释
请确保 AGIC 使用的标识具有适当的权限。 可在此处找到标识所需的权限列表:配置基础结构 - 权限。 如果自定义角色没有定义所需的权限,可以使用“网络参与者”角色。
# 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_chinanorth2 资源组:
az group delete --name myResourceGroup
az group delete --name MC_myResourceGroup_myCluster_chinanorth2
后续步骤
在本教程中,你将:
- 创建了已启用 AGIC 加载项的新 AKS 群集
- 在 AKS 群集上部署了将 AGIC 用于入口的示例应用程序
要了解有关 AGIC 的详细信息,请参阅什么是应用程序网关入口控制器和为 AKS 群集禁用并重新启用 AGIC 加载项。
要了解如何使用现有应用程序网关为现有的 AKS 群集启用应用程序网关入口控制器加载项,请转到下一教程。