本文介绍如何在尝试查看 Azure Kubernetes 服务 (AKS) 群集中的 Kubernetes 资源时解决与基于角色的访问控制(RBAC)相关的“服务器错误”错误。
先决条件
Kubernetes 群集命令行工具 (kubectl)
注意
如果使用 Azure Cloud Shell 运行 shell 命令,则已安装 kubectl。 如果使用本地 shell 并已安装 Azure CLI ,则可以运行 az aks install-cli 命令来安装 kubectl。
现象
运行 kubectl 命令以查看 Kubernetes 资源类型的详细信息(例如部署、Pod 或工作器节点)时,会收到以下错误消息:
$ kubectl get nodes
Error from server (Forbidden): nodes is forbidden: User "aaaa11111-11aa-aa11-a1a1-111111aaaaa" cannot list resource "nodes" in API group "" at the cluster scope
原因
此错误表示你正尝试使用没有所需基于角色的访问控制 (RBAC) 权限的 Microsoft Entra ID 帐户访问 Kubernetes 资源。
解决方案
根据为群集(Kubernetes RBAC 或 Azure RBAC)配置的 RBAC 类型,可能会应用不同的解决方案。 运行以下命令来确定群集正在使用的 RBAC 类型:
运行以下命令来确定 AKS 群集正在使用的 RBAC 类型:
az aks show -g $RESOURCE_GROUP -n $CLUSTER_NAME --query aadProfile.enableAzureRbac
结果:
false
- 如果结果为 null 或为空,则群集未启用 Azure AD 集成。 请参阅 解决本地 Kubernetes RBAC 群集中的权限问题。
- 如果结果为 false,则群集使用 Kubernetes RBAC。 请参阅 解决基于 Kubernetes RBAC 的 AKS 群集中的权限问题。
- 如果结果 为 true,则群集使用 Azure RBAC。 请参阅 解决基于 Azure RBAC 的 AKS 群集中的权限问题。
解决本地 Kubernetes RBAC 群集中的权限问题
如果群集没有 Azure AD 集成(结果为 null),则它使用群集管理员凭据:
# Get admin credentials for full access
az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --admin
# Verify access
kubectl get nodes
警告:管理员凭据提供完整的群集访问权限。 仔细使用,并考虑启用 Azure AD 集成以提高安全性。
解决基于 Kubernetes RBAC 的 AKS 群集中的权限问题
如果群集使用 Kubernetes RBAC,则通过创建 RoleBinding 或 ClusterRoleBinding Kubernetes 资源来配置用户帐户的权限。 有关详细信息,请参阅 Kubernetes RBAC 文档。
此外,在 Microsoft Entra ID 集成群集中,系统会自动创建 ClusterRoleBinding 资源,以授予管理员对群集的访问权限,以访问预先指定的Microsoft Entra ID 组的成员。
若要解决特定用户的“服务器错误(禁止访问)”错误,请使用以下方法之一。
方法 1:创建自定义 RoleBinding 或 ClusterRoleBinding 资源
可以创建自定义 RoleBinding 或 ClusterRoleBinding 资源,以向用户授予必要的权限(或用户所属的组)。 有关详细步骤,请参阅在 Azure Kubernetes 服务 中将 Kubernetes 基于角色的访问控制与 Microsoft Entra ID 配合使用。
方法 2:将用户添加到预先指定的Microsoft Entra ID 管理员组
检索预先指定的Microsoft Entra ID 管理组的 ID。 为此,请运行以下命令:
az aks show -g $RESOURCE_GROUP -n $CLUSTER_NAME --query aadProfile.adminGroupObjectIDs结果:
[ "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" ]使用在上一步中检索到的组 ID 将用户添加到预先指定的Microsoft Entra ID 管理员组。 有关更详细的步骤,请参阅 添加组的成员或所有者。
解决基于 Azure RBAC 的 AKS 群集中的权限问题
如果群集使用 Azure RBAC,则通过创建 Azure 角色分配来配置用户的权限。
AKS 提供了一组内置角色,可用于为 Microsoft Entra ID 用户或组创建角色分配,以授予他们对特定命名空间或群集范围内 Kubernetes 对象的访问权限。 有关将内置角色分配给基于 Azure RBAC 的群集中的用户或组的详细步骤,请参阅 AKS 内置角色。
或者,可以创建自己的自定义 Azure 角色定义,以便对特定类型的 Kubernetes 对象和操作提供更精细的权限管理。 有关在基于 Azure RBAC 的群集中创建和分配自定义角色的详细指南,请参阅 创建自定义角色定义。
联系我们寻求帮助
如果你有任何疑问或需要帮助,请创建支持请求或联系 Azure 社区支持。 你还可以将产品反馈提交到 Azure 反馈社区。