AKS 1.25.5中Nginx Ingress Controller关联External DNS失效排查
排查External DNS令牌刷新失败(404,无法获取Pod身份分配)
结合你的AKS部署场景,以下是最可能遗漏的配置项及验证步骤:
1. 未配置Pod身份绑定(Pod Identity Binding)
你已将托管身份添加到AKS VMSS,但AKS的用户托管身份需要通过AzurePodIdentity和AzurePodIdentityBinding资源绑定到External DNS的ServiceAccount:
- 检查是否在External DNS所在命名空间创建了
AzurePodIdentity资源,需指定托管身份的clientID或resourceID - 确认
AzurePodIdentityBinding资源已创建,其selector字段要与External DNS ServiceAccount的标签匹配,且绑定到上述AzurePodIdentity
2. External DNS Deployment缺少Pod身份注解
External DNS的Pod模板必须添加特定注解才能触发身份分配:
- 查看Deployment的Pod模板,确认包含
aadpodidbinding: <你的绑定名称>注解(该名称需与AzurePodIdentityBinding的selector一致) - 注意:注解必须添加在Pod模板层级,而非Deployment层级
3. AKS未启用Pod Identity扩展
AKS集群必须安装azure-pod-identity扩展才能支持Pod身份功能:
- 执行命令检查扩展状态:
若返回az aks show -n <集群名> -g <资源组> --query "addonProfiles.azurepodidentity.enabled"false,需启用该扩展(启用后可能需要重启节点池或重新部署External DNS Pod)
4. 托管身份的角色权限范围错误
虽然你已分配角色,但需确认:
- 角色(如
DNS Zone Contributor)的作用范围精确覆盖目标DNS区域,而非仅资源组或更宽泛的范围 - 角色分配的主体是托管身份的Object ID,而非Client ID(部分场景下Object ID是必填项)
5. External DNS启动参数配置错误
检查External DNS的启动参数:
- 确保添加了
--azure-use-managed-identity参数,同时移除--azure-subscription-id等基于服务主体的参数 - 若指定
--azure-client-id,需使用托管身份的Client ID,而非Object ID - 确认
--azure-resource-group指向DNS区域所在的资源组
6. 节点池身份缺少Managed Identity Operator权限
AKS节点池的托管身份(系统分配或用户分配)需要拥有Managed Identity Operator权限,才能将用户托管身份分配给Pod:
- 检查节点池身份是否在托管身份的资源组上被授予该权限
验证命令
- 查看Pod身份资源状态:
kubectl get azurepodidentities,azurepodidentitybindings -n <external-dns-namespace> - 查看NMI日志获取详细错误:
kubectl logs -n kube-system -l k8s-app=nmi - 验证托管身份的角色分配:
az role assignment list --assignee <managed-identity-object-id> --all
内容的提问来源于stack exchange,提问作者One Developer
相关产品推荐
相关产品推荐

