AKS AGIC Ingress Controller无法同步Ingress资源变更问题
检查RBAC权限是否完整
AGIC要持续监听Ingress等资源变更,必须拥有对应的watch和list权限。试试用命令查看它绑定的ClusterRole:kubectl describe clusterrole <agic-cluster-role-name>确认这个ClusterRole包含以下权限:
ingresses(extensions、networking.k8s.io组)的get、list、watchservices、endpoints、pods的get、list、watchconfigmaps的get权限(用于读取自身配置)
核对AGIC的核心配置参数
检查AGIC部署的环境变量,确认APPGW_RESOURCE_GROUP、AKS_CLUSTER_NAME配置正确,同时确认INGRESS_CLASS(旧版本)或Ingress资源的spec.ingressClassName(新版本)完全匹配——不匹配的话AGIC会直接忽略该Ingress。
另外查看AGIC的ConfigMap(通常叫agic-config),如果设置了watchNamespace,它只会监听指定命名空间的Ingress,要是你的Ingress在其他命名空间,自然不会触发更新。清理缓存并重启AGIC
AGIC内部的K8s客户端缓存可能出现 stale 情况,试试删除它的ConfigMap再重启Pod(记得先备份配置):kubectl delete configmap agic-config kubectl rollout restart deployment <agic-deployment-name>同时检查节点的网络策略,有没有限制AGIC Pod和K8s API Server的通信,DNS解析故障也会导致AGIC断连无法监听变更。
开启调试日志排查静默错误
默认日志级别可能看不到深层问题,把AGIC的日志级别改成debug:kubectl set env deployment <agic-deployment-name> LOG_LEVEL=debug然后查看日志,确认有没有接收到Ingress变更事件却没处理,或者同步到Application Gateway时出现了静默失败的情况。另外去Azure门户看看Application Gateway本身的健康状态,网关故障也会导致同步卡住。
验证Ingress变更的有效性
确保你修改的是Ingress的关键字段(比如路径规则、后端服务),而非无关的元数据(比如描述字段)——AGIC可能忽略非核心字段的变更。同时查看Ingress的status字段,要是status.loadBalancer.ingress没更新,说明AGIC根本没处理这个Ingress的变更。
内容的提问来源于stack exchange,提问作者Levi Cezane

