Azure Kubernetes 服务 (AKS) 可以配置为使用 Azure Active Directory (Azure AD) 进行用户身份验证。在此配置中,您使用 Azure AD 身份验证令牌登录到 AKS 群集。通过身份验证后,您可以使用内置的 Kubernetes 基于角色的访问控制 (Kubernetes RBAC) 来根据用户的身份或组成员身份管理对命名空间和集群资源的访问。
本文将展示如何:
- 根据 Azure AD 组成员身份在 AKS 群集中使用 Kubernetes RBAC 控制访问。
- 在 Azure AD 中创建示例组和用户。
- 在 AKS 群集中创建角色和角色绑定以授予创建和查看资源的适当权限。
在开始之前需要进行如下准备工作:
- 一个启用了 Azure AD 集成的现有 AKS 群集。
- 在 AKS 群集创建期间默认启用 Kubernetes RBAC。要使用 Azure AD 集成和 Kubernetes RBAC 升级集群,请在现有 AKS 集群上启用 Azure AD 集成。
- 确保安装并配置了 Azure CLI 2.0.61 或更高版本。运行az --version查找版本。
- 如果使用 Terraform,请安装Terraform版本 2.99.0 或更高版本。
Azure AD准备
创建用户组:
使用 az aks show 命令获取 AKS 群集的资源 ID。 将该资源 ID 分配到名为 AKS_ID 的变量,以便可以在其他命令中引用它
向用户组内用户授予 Azure Kubernetes 服务群集用户角色,因此可让他们使用 kubectl
来与 AKS 群集交互
创建Azure AD用户,将其加入到Dev Team用户组:
为开发人员创建AKS群集资源
现在创建 Azure AD 组和用户。 之前已经为组成员创建了 Azure 角色分配,使他们能够以普通用户的身份连接到 AKS 群集。 现在,让我们配置 AKS 群集,以允许这些不同的组访问特定的资源
运行kubectl create ns dev命令,在AKS群内为devteam创建一个命名空间:
在 Kubernetes 中,角色定义要授予的权限,角色绑定将这些权限应用到所需的用户或组。 这些分配可应用于特定命名空间或整个群集。先为 dev 命名空间创建一个角色。 此角色授予对命名空间的完全权限。 在生产环境中,可为不同的用户或组指定更精细的权限
定义如下YAML文件,用于创建Dev空间内的角色定义:
运行kubectl命令创建角色: kubectl apply -f .\role-dev-ns.yaml
现在来创建角色绑定,以使用前面创建的角色来访问命名空间。 创建名为 rolebinding-dev-namespace.yaml
的文件并粘贴以下 YAML 清单。 在最后一行中,请将 groupObjectId 替换为前一命令的组对象 ID 输出
运行kubectl命令创建角色绑定: kubectl apply -f .\role-dev-ns.yaml
使用DevTeam组内账号与AKS群集资源进行交互
现在,让我们通过在 AKS 群集中创建和管理资源,来测试权限是否按预期方式工作。 在这些示例中,你将在用户的分配命名空间中计划和查看 pod。 然后,尝试在分配的命名空间外部计划和查看 pod。
首先,使用 az aks Get-Credentials 命令重置 kubeconfig 上下文。因为之前测试一直使用群集管理员凭据设置了上下文。 管理员用户将绕过 Azure AD 登录提示。 如果运行命令过程中没指定 --admin
参数,应用的用户上下文将要求使用 Azure AD 对所有请求进行身份验证。
运行 az aks Get-Credentials -g GavinWu -n LabAKS --overwrite-existing 重新获取配置文件以后,运行kubectl命令,这时系统会提示我们进行登录:
使用dev用户进行登录,登录成功以后,令牌会被缓存以供kubectl所使用:
使用如下命令在Dev命名空间部署一个pod,可以看到部署是没问题的:
当我们尝试去查看其他命名空间的Pod的时候,系统会提示我们权限不足: