You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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:

  • 检查节点池身份是否在托管身份的资源组上被授予该权限

验证命令

  1. 查看Pod身份资源状态:
    kubectl get azurepodidentities,azurepodidentitybindings -n <external-dns-namespace>
    
  2. 查看NMI日志获取详细错误:
    kubectl logs -n kube-system -l k8s-app=nmi
    
  3. 验证托管身份的角色分配:
    az role assignment list --assignee <managed-identity-object-id> --all
    

内容的提问来源于stack exchange,提问作者One Developer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 11:15:37