为何为启用RBAC的AKS配置Terraform Kubernetes数据源属性会报未授权错误
错误原因
你当前的配置使用了AKS普通kubeconfig中的静态客户端证书进行认证,但你的AKS集群启用了Azure AD集成RBAC后,这类静态证书默认没有被分配集群操作权限,你所属AD组的管理员权限仅对Azure AD身份生效,静态证书认证无法关联到你的AD账号权限,因此触发未授权错误。
解决方案
方案一:使用Azure AD身份认证(推荐,符合RBAC权限管理规范)
这种方式直接复用你当前已登录的Azure CLI身份进行AKS认证,权限和你所属的AD组完全匹配,无需依赖静态集群凭证。
前置要求
- 本地已安装kubelogin认证插件
- 已通过
az login完成Azure账号登录,登录账号属于集群管理员AD组
修改kubernetes provider配置如下:
provider "kubernetes" { host = data.azurerm_kubernetes_cluster.k8s.kube_config.0.host cluster_ca_certificate = base64decode(data.azurerm_kubernetes_cluster.k8s.kube_config.0.cluster_ca_certificate) exec { api_version = "client.authentication.k8s.io/v1beta1" command = "kubelogin" args = [ "get-token", "--login", "azurecli", "--server-id", "6dae42f8-4368-4678-94ff-3960e28e3630" ] } }
方案二:使用集群本地管理员凭证
如果你的AKS集群没有禁用本地管理员账户(即创建时local_account_disabled参数为false),可以直接拉取管理员级别的静态凭证进行认证,这种方式不需要依赖Azure AD认证,但是权限是集群最高权限,不推荐用于生产环境日常操作。
修改kubernetes provider配置如下:
provider "kubernetes" { host = data.azurerm_kubernetes_cluster.k8s.kube_admin_config.0.host client_certificate = base64decode(data.azurerm_kubernetes_cluster.k8s.kube_admin_config.0.client_certificate) client_key = base64decode(data.azurerm_kubernetes_cluster.k8s.kube_admin_config.0.client_key) cluster_ca_certificate = base64decode(data.azurerm_kubernetes_cluster.k8s.kube_admin_config.0.cluster_ca_certificate) }
验证步骤
修改配置后重新执行terraform apply即可正常创建命名空间。如果仍有报错,可以先执行az aks get-credentials -g <你的AKS资源组名> -n <你的AKS集群名>获取集群kubeconfig,再执行kubectl auth can-i create namespace验证当前账号是否有对应权限,返回yes则说明权限正常,配置无误即可运行成功。
内容的提问来源于stack exchange,提问作者kjd
相关产品推荐
相关产品推荐

