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

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

可以使用 Azure CLI 或门户为现有的 Azure Kubernetes 服务 (AKS) 群集启用应用程序网关入口控制器 (AGIC) 加载项。 本教程介绍如何使用 AGIC 加载项通过部署在不同虚拟网络中的现有应用程序网关在现有 AKS 群集中公开你的 Kubernetes 应用程序。 首先,你将在一个虚拟网络中创建一个 AKS 群集,在一个单独的虚拟网络中创建一个应用程序网关,以模拟现有资源。 然后,你将启用 AGIC 加载项,将两个虚拟网络对等互连在一起,并部署一个示例应用程序,系统将使用 AGIC 加载项通过应用程序网关公开该应用程序。 如果要为同一虚拟网络中的现有应用程序网关和现有 AKS 群集启用 AGIC 加载项,则可跳过下面的对等互连步骤。 此加载项为 AKS 群集提供了一种比通过 Helm 进行部署快得多的 AGIC 部署方法,而且还提供了完全托管体验。

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

  • 创建资源组
  • 创建新的 AKS 群集
  • 创建新的应用程序网关
  • 通过 Azure CLI 在现有的 AKS 群集中启用 AGIC 加载项
  • 通过 Azure 门户在现有的 AKS 群集中启用 AGIC 加载项
  • 将应用程序网关虚拟网络与 AKS 群集虚拟网络对等互连
  • 在 AKS 群集上部署将 AGIC 用于入口的示例应用程序
  • 检查是否可以通过应用程序网关访问应用程序

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

先决条件

创建资源组

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

az group create --name myResourceGroup --location eastus

部署新的 AKS 群集

现在,你将部署新的 AKS 群集,以模拟你有一个现有 AKS 群集且需要为其启用 AGIC 加载项的情况。

在下面的示例中,你将在所创建的资源组 myResourceGroup 中使用 Azure CNI托管实例部署名为 myCluster 的新 AKS 群集 。

az aks create -n myCluster -g myResourceGroup --network-plugin azure --enable-managed-identity --generate-ssh-keys

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

注意

将使用名称 MC_resource-group-name_cluster-name_location 创建节点资源组。

部署新的应用程序网关

现在,你将部署新的应用程序网关,以模拟你有一个现有的应用程序网关且需要使用它对发往 AKS 群集 myCluster 的流量进行负载均衡的情况。 应用程序网关的名称将是 myApplicationGateway,但你需要首先创建一个名为 myPublicIp 的公共 IP 资源、一个名为 myVnet 且地址空间为 10.0.0.0/16 的新虚拟网络、一个名为 mySubnet 且地址空间为 10.0.0.0/24 的子网,然后使用 myPublicIp 在 mySubnet 中部署你的应用程序网关。

注意

在不同虚拟网络中使用 AKS 群集和应用程序网关时,两个虚拟网络的地址空间不得重叠。 AKS 群集部署的默认地址空间为 10.224.0.0/12。

az network public-ip create -n myPublicIp -g myResourceGroup --allocation-method Static --sku Standard
az network vnet create -n myVnet -g myResourceGroup --address-prefix 10.0.0.0/16 --subnet-name mySubnet --subnet-prefix 10.0.0.0/24 
az network application-gateway create -n myApplicationGateway -g 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 -n myApplicationGateway -g myResourceGroup -o tsv --query "id") 
az aks enable-addons -n myCluster -g myResourceGroup -a ingress-appgw --appgw-id $appgwId

重要

在 AKS 群集资源组以外的资源组中使用应用程序网关时,创建的托管标识 ingressapplicationgateway-{AKSNAME} 必须具有在应用程序网关资源组中设置的“网络参与者”和“读者”角色。

将两个虚拟网络对等互连在一起

由于已将 AKS 群集部署在其自己的虚拟网络中,并将应用程序网关部署在另一个虚拟网络中,因此你需要将这两个虚拟网络对等互连在一起,以便流量从应用程序网关流向群集中的 Pod。 将两个虚拟网络对等互连需要两次运行 Azure CLI 命令,以确保连接是双向的。 第一个命令将创建从应用程序网关虚拟网络到 AKS 虚拟网络的对等连接;第二个命令将创建另一个方向的对等连接。

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

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

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

注意

在上面的“部署新的 AKS 群集”步骤中,我们使用 Azure CNI 创建了 AKS,如果你具有使用 Kubenet 模式的现有 AKS 群集,则需要更新路由表,以帮助发往 POD IP 的数据包到达托管 pod 的节点。 实现此目的的一种简单方法是将 AKS 创建的同一路由表关联到应用程序网关的子网。

部署使用 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 进行检查。 应用程序网关可能需要花费一分钟来获取更新,因此,如果应用程序网关在 Azure 门户上仍然处于“正在更新”状态,则等待其完成更新,然后再尝试访问该 IP 地址。

清理资源

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

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

后续步骤