入口控制器未选择对新/现有入口资源的更改

问题描述 投票:0回答:1

我正在使用 AKS AGIC

描述错误 部署的入口控制不会选择现有或新创建的入口资源。 Ingress 资源已正确注释。在杀死控制器 Pod 时,新生成的 Pod 能够检测现有的 Ingress 并相应地更新应用程序网关。但在与应用程序网关初始同步后,Pod 将停止更新/侦听 Ingress 现有/新资源。

我使用了端口转发,资源已更新,但是当我使用入口路径时,内容未更新

我尝试查看日志入口日志和服务 Pod,但一切都很好。入口日志与附图中的类似

kubernetes-ingress azure-aks azure-application-gateway
1个回答
0
投票

您遇到的 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

enter image description here

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 

enter image description here

az network application-gateway create -n myApplicationGateway -g myResourceGroup --sku Standard_v2 --public-ip-address myPublicIp --vnet-name myVnet --subnet mySubnet --priority 100

enter image description here

现在在 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

enter image description here

如果您想使用 Azure 门户启用 AGIC 附加组件,请转到 (https://aka.ms/azure/portal/aks/agic) 并导航到您的 AKS 集群。从那里,转到 AKS 群集下的“网络”选项卡。您将看到应用程序网关入口控制器部分,其中包含使用 Azure 门户启用/禁用入口控制器加载项的选项。
enter image description here

由于我已将 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

enter image description here

完成。现在将示例应用程序部署到 AKS 集群,该应用程序将使用 Ingress 的 AGIC 加载项并将应用程序网关连接到 AKS 集群。

kubectl apply -f https://raw.githubusercontent.com/Azure/application-gateway-kubernetes-ingress/master/docs/examples/aspnetapp.yaml

kubectl get ingress

enter image description here
enter image description here

参考文档:

© www.soinside.com 2019 - 2024. All rights reserved.