如何通过Terraform自行创建AGIC用户分配托管身份部署AKS集群
自定义AGIC用户分配托管身份部署AKS集群
问题背景
我通过Terraform部署带有AGIC入口控制器的AKS集群,要求集群运行涉及的所有身份必须为用户分配托管身份(UAMI),禁止Azure自动创建身份。目前已手动创建AGW、集群、kubelet的三个UAMI,部署可正常运行,但AGIC会在my_node_rg中自动生成名为ingressapplicationgateway...的额外UAMI。需自行创建该AGIC所需的UAMI,并在集群创建时直接分配给AGIC,避免自动生成。
解决方案
要实现需求,需手动创建AGIC专用UAMI,配置必要权限后,在AKS集群配置中指定该身份供AGIC使用。
步骤1:创建AGIC专用用户分配托管身份
添加Terraform资源定义AGIC的UAMI:
// AGIC专用的用户分配托管身份 resource "azurerm_user_assigned_identity" "my_agic_id" { name = "my-agic-uami" resource_group_name = "你的目标资源组名称" // 可与集群/AGW同RG,也可独立设置 location = azurerm_kubernetes_cluster.my_cluster.location }
步骤2:为AGIC身份分配应用网关管理权限
给该UAMI配置管理应用网关的权限(遵循最小权限原则,可按需调整角色):
// 分配应用网关Contributor权限给AGIC身份 resource "azurerm_role_assignment" "agic_agw_contributor" { scope = azurerm_application_gateway.my_agw.id role_definition_name = "Contributor" principal_id = azurerm_user_assigned_identity.my_agic_id.principal_id }
步骤3:在AKS集群中指定AGIC使用自定义身份
修改AKS集群的ingress_application_gateway块,添加自定义身份配置:
resource "azurerm_kubernetes_cluster" "my_cluster" { (...) node_resource_group = "my_node_rg" network_profile { network_plugin = "azure" network_policy = "azure" } identity { type = "UserAssigned" identity_ids = [azurerm_user_assigned_identity.my_cluster_id.id] } kubelet_identity { client_id = azurerm_user_assigned_identity.my_kubelet_id.client_id object_id = azurerm_user_assigned_identity.my_kubelet_id.principal_id user_assigned_identity_id = azurerm_user_assigned_identity.my_kubelet_id.id } ingress_application_gateway { gateway_id = azurerm_application_gateway.my_agw.id // 指定AGIC使用自定义UAMI identity { client_id = azurerm_user_assigned_identity.my_agic_id.client_id object_id = azurerm_user_assigned_identity.my_agic_id.principal_id user_assigned_identity_id = azurerm_user_assigned_identity.my_agic_id.id } } }
注意事项
- 确保AGIC的UAMI与AKS集群、应用网关处于同一Azure区域
- 权限可根据实际需求精细化调整,例如使用
Application Gateway Contributor角色替代全局Contributor - 部署时需保证角色分配完成后再创建AKS集群,避免AGIC启动阶段出现权限不足问题
内容的提问来源于stack exchange,提问作者ocrooh
相关产品推荐
相关产品推荐

