我正在使用 AKS AGIC
描述错误 部署的入口控制不会选择现有或新创建的入口资源。 Ingress 资源已正确注释。在杀死控制器 Pod 时,新生成的 Pod 能够检测现有的 Ingress 并相应地更新应用程序网关。但在与应用程序网关初始同步后,Pod 将停止更新/侦听 Ingress 现有/新资源。
我使用了端口转发,资源已更新,但是当我使用入口路径时,内容未更新
我尝试查看日志入口日志和服务 Pod,但一切都很好。入口日志与附图中的类似
您遇到的 AGIC 未拾取对新的或现有 Ingress 资源的更改的问题可能是由于 AGIC pod 的问题造成的。您提到,终止控制器 Pod 并生成一个新控制器 Pod 可以让它检测现有的 Ingress 资源并相应地更新应用程序网关。这表明 AGIC pod 本身可能存在问题。
您的控制器日志对进一步解决此问题没有多大帮助,它只是表明,日志表明 AGIC 已启动,配置为监视 AKS 集群中所有命名空间的入口资源,已成功使用 MSI 进行身份验证,已同步其内部缓存包含集群的当前状态,并且已将配置更新应用到 Azure 应用程序网关。
如果您想解决此问题,请检查
kubectl get pods -n kube-system
并检查 AGIC Pod 的状态。交叉验证 Ingress 资源是否未用 kubernetes.io/ingress.class: azure/application-gateway
进行注释。您可以通过 kubectl describe ingress <ingress-name>
并检查注释来验证这一点。
下面是使用现有应用程序网关在 AKS 集群上设置 AGIC 的示例。
如果您已有 AKS 群集,请跳过它。如果不创建如下所示的集群-
az aks create -n <ClusterName> -g <ResourceGroup> --network-plugin azure --enable-managed-identity --generate-ssh-keys
部署新的应用程序网关,使用您选择的名称更改 myResourceGroup 、 myPublicIp、myVnet、mySubnet、myApplicationGateway 的名称
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
现在在 AKS 集群中启用 AGIC 插件
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
如果您想使用 Azure 门户启用 AGIC 附加组件,请转到 (https://aka.ms/azure/portal/aks/agic) 并导航到您的 AKS 集群。从那里,转到 AKS 群集下的“网络”选项卡。您将看到应用程序网关入口控制器部分,其中包含使用 Azure 门户启用/禁用入口控制器加载项的选项。
由于我已将 AKS 集群部署在其自己的虚拟网络中,并将应用程序网关部署在另一个虚拟网络中,因此我必须将两个虚拟网络对等互连,以便流量从应用程序网关流向集群中的 Pod .
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 集群,该应用程序将使用 Ingress 的 AGIC 加载项并将应用程序网关连接到 AKS 集群。
kubectl apply -f https://raw.githubusercontent.com/Azure/application-gateway-kubernetes-ingress/master/docs/examples/aspnetapp.yaml
kubectl get ingress
参考文档: