你可以使用 Azure CLI 为新的 Azure Kubernetes 服务 (AKS) 群集启用应用程序网关入口控制器 (AGIC) 加载项。
在本教程中,你将创建一个启用 AGIC 加载项的 AKS 群集。 创建群集时,将自动创建要使用的 Azure 应用程序网关实例。 然后需部署一个示例应用程序,该应用程序将利用该加载项通过应用程序网关公开应用程序。
此加载项为 AKS 群集提供了一种比之前通过 Helm 进行部署快得多的 AGIC 部署方法。 它还提供了完全托管体验。
在本教程中,你将了解如何执行以下操作:
- 创建资源组。
- 创建启用 AGIC 加载项的新 AKS 群集。
- 在 AKS 群集上部署将 AGIC 用于入口的示例应用程序。
- 检查是否可以通过应用程序网关访问应用程序。
如果没有 Azure 帐户,请在开始前创建一个免费帐户。
先决条件
在 Azure Cloud Shell 中使用 Bash 环境。 有关详细信息,请参阅开始使用 Azure Cloud Shell。
如果要在本地运行 CLI 引用命令,请安装 Azure CLI。 如果在 Windows 或 macOS 上运行,请考虑在 Docker 容器中运行 Azure CLI。 有关详细信息,请参阅如何在 Docker 容器中运行 Azure CLI。
如果使用的是本地安装,请使用 az login 命令登录到 Azure CLI。 要完成身份验证过程,请执行终端中显示的步骤。 有关其他登录选项,请参阅 使用 Azure CLI 向 Azure 进行身份验证。
按照提示,请在首次使用时安装 Azure CLI 扩展。 有关扩展详细信息,请参阅使用和管理 Azure CLI 的扩展。
运行 az version 以查找安装的版本和依赖库。 若要升级到最新版本,请运行 az upgrade。
创建资源组
在 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 启用该加载项,请使用以下方法之一:
- 通过门户启用应用程序网关上的 WAF。
- 首先创建 WAF_v2 应用程序网关实例,然后按照如何在现有的 AKS 群集和现有应用程序网关实例中启用 AGIC 加载项中的说明进行操作。
下面的示例将使用 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 使用的标识具有适当的权限。 可在此处找到标识所需的权限列表:配置基础结构 - 权限。 如果自定义角色没有定义所需的权限,可以使用“网络参与者”角色。
注意
如果打算将 AGIC 与使用 CNI 覆盖的 AKS 群集配合使用,请指定配置 AGIC 以处理与已启用 CNI 覆盖的群集的连接的参数 --aks-custom-headers AKSHTTPCustomFeatures=Microsoft.ContainerService/AppGatewayWithOverlayPreview
。
# 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 群集启用应用程序网关入口控制器加载项,请转到下一教程。