Azure 中的 kubelogin 插件是一个实现 Microsoft Entra 身份验证的 client-go 凭据插件。 kubelogin 插件提供 kubectl 命令行工具中没有的功能。 有关详细信息,请参阅 kubelogin 简介和 kubectl 简介。
本文概述了在 AKS 中如何使用 kubelogin 进行所有受支持的 Microsoft Entra 身份验证方法。
AKS 限制中的 Kubelogin 身份验证
- 在 Microsoft Entra 中创建的组仅通过其 ObjectID 值(而不是显示名称)包含。
sAMAccountName命令仅适用于从本地 Windows Server Active Directory 同步的组。
- 服务主体身份验证方法仅适用于托管Microsoft Entra,不适用于早期版本的 Azure Active Directory。
- 服务主体最多可以是 200 个 Microsoft Entra 组的成员。 如果有超过 200 个组,请考虑使用应用程序角色。
- 在 Microsoft Entra 租户上设置 Microsoft Entra 条件访问策略时,无法使用设备代码身份验证方法。 在这种情况下,请改用 Web 浏览器交互式身份验证。
- Azure CLI 身份验证方法仅适用于 AKS 托管Microsoft Entra。
身份验证的工作原理
注意
请记住有关与 Microsoft Entra 集成的 AKS 群集的 kubelogin 身份验证的以下信息:
- 运行 Kubernetes 版本 1.24 或更高版本的群集 会自动使用 kubelogin 格式。
- 运行 Kubernetes 1.24 或更早版本的群集 需要手动转换。 可以使用设备代码身份验证方法将 kubeconfig 文件转换为使用 exec 插件格式。
对于与 kubelogin 的大多数交互,可以使用 convert-kubeconfig 子命令。 子命令使用在 --kubeconfig 或 KUBECONFIG 环境变量中指定的 kubeconfig 文件,根据指定的身份验证方法将最终的 kubeconfig 文件转换为 exec 格式。
kubelogin 实现的身份验证方法是 Microsoft Entra OAuth 2.0 令牌授予流。 在每个身份验证方法中,令牌不会缓存在文件系统上。
设备代码身份验证
设备代码是 convert-kubeconfig 子命令的默认身份验证方法。 此身份验证方法会提示用户提供设备代码以从浏览器会话登录。
注意
在引入 kubelogin 和 exec 插件之前,kubectl 中的 Azure 身份验证方法仅支持设备代码流。 它使用了一个早期版本的库,该库生成一个令牌,具有前缀为 audience 的 spn: 声明。 它与 AKS 托管的 Microsoft Entra 不兼容,后者使用 代表(OBO)流。 运行 convert-kubeconfig 子命令时,kubelogin 会从受众声明中删除 spn: 前缀。
设备代码身份验证的参数
下表概述了可用于设备代码身份验证的参数:
| 参数 | Description |
|---|---|
-l devicecode(可选) |
指定 kubelogin 身份验证方法。 此参数是可选的,因为设备代码是默认方法。 |
--legacy |
对早期版本的 Azure Active Directory 群集使用旧行为。 如果要在早期版本的 Azure Active Directory 群集中使用 kubeconfig 文件,kubelogin 将自动添加 --legacy 标志。 |
--token-cache-dir |
重写令牌缓存目录的默认路径,即 ${HOME}/.kube/cache/kubelogin。 |
Azure CLI 身份验证
Azure CLI(命令: -l azurecli)身份验证方法使用 Azure CLI 建立的已登录上下文来获取访问令牌。 该令牌在与 az login 相同的 Microsoft Entra 租户中颁发。 kubelogin 不会将令牌写入令牌缓存文件,因为 Azure CLI 已管理令牌。
Azure CLI 身份验证的参数
下表概述了可用于 Azure CLI 身份验证的参数:
| 参数 | Description |
|---|---|
-l azurecli |
指定 kubelogin 身份验证方法。 |
--azure-config-dir |
指定 Azure CLI 配置目录。 默认目录为 ${HOME}/.azure。 |
登录到 Azure
使用 az login 命令登录到 Azure。
az login
Web 浏览器交互式身份验证
Web 浏览器交互式(命令: -l interactive)身份验证方法会自动打开 Web 浏览器以登录用户。 用户进行身份验证后,浏览器会使用已验证的凭据重定向到本地 Web 服务器。 此身份验证方法符合条件访问策略。
可以将持有者令牌或所有权证明(PoP)令牌用于此身份验证方法。
持有者令牌身份验证的参数
下表概述了可用于持有者令牌身份验证的参数:
| 参数 | Description |
|---|---|
-l interactive |
指定 kubelogin 身份验证方法。 |
--token-cache-dir |
重写令牌缓存目录的默认路径,即 ${HOME}/.kube/cache/kubelogin。 |
PoP 令牌身份验证的参数
下表概述了可用于 PoP 令牌身份验证的参数:
| 参数 | Description |
|---|---|
-l interactive |
指定 kubelogin 身份验证方法。 |
--pop-enabled |
启用 PoP 令牌身份验证。 |
--pop-claims |
以键值对格式指定 PoP 令牌声明。 例如 u=/ARM/ID/OF/CLUSTER。 |
服务主体身份验证
服务主体(命令: -l spn)身份验证方法使用服务主体登录用户。 可以通过设置环境变量或在命令行参数中使用凭据来提供凭据。 可以使用的受支持凭据是密码或个人信息交换 (PFX) 客户端证书。
服务主体身份验证的参数
下表概述了可用于服务主体身份验证的参数:
| 参数 | Description |
|---|---|
-l spn |
指定 kubelogin 身份验证方法。 |
--client-id |
服务主体的应用程序 ID(客户端 ID)。 |
--client-secret |
服务主体的客户端密钥。 |
托管标识身份验证
使用 托管标识 身份验证方法(命令:-l msi),以便应用程序连接到支持 Microsoft Entra 身份验证的资源。 示例包括访问 Azure 资源(例如 Azure 虚拟机(VM)、虚拟机规模集或 Azure Cloud Shell。
可以使用分配给资源的默认托管标识或特定用户分配的托管标识。
托管标识身份验证的参数
可用以下参数进行托管标识身份验证,详情见下表:
| 参数 | Description |
|---|---|
-l msi |
指定 kubelogin 身份验证方法。 |
--client-id |
用户分配的托管标识的应用程序 ID(客户端 ID)。 如果未指定此参数,将使用默认托管标识。 |
工作负载身份验证
工作负荷标识(命令: -l workloadidentity) 身份验证方法使用与 Microsoft Entra 联合的标识凭据对 AKS 群集的访问权限进行身份验证。 该方法使用 Microsoft Entra 集成身份验证。 它的工作原理是设置以下环境变量:
| Variable | Description |
|---|---|
AZURE_CLIENT_ID |
与工作负荷标识联合的 Microsoft Entra 应用程序 ID。 |
AZURE_TENANT_ID |
Microsoft Entra 租户 ID。 |
AZURE_FEDERATED_TOKEN_FILE |
包含已签名工作负荷身份断言的文件,例如 Kubernetes 投射服务帐户(JWT 令牌)。 |
AZURE_AUTHORITY_HOST |
Microsoft Entra 授权服务器的基础 URL。 例如 https://login.partner.microsoftonline.cn/。 |
可以使用工作负载标识从 GitHub 或 ArgoCD 等 CI/CD 系统访问 Kubernetes 群集,而无需在外部系统中存储服务主体凭据。 若要从 GitHub 配置 OpenID Connect (OIDC) 联合,请参阅 OIDC 联合示例。
工作负载身份验证参数
下表概述了可用于工作负荷标识身份验证的参数:
| 参数 | Description |
|---|---|
-l workloadidentity |
指定 kubelogin 身份验证方法。 |
导出 kubeconfig 文件路径
在运行 convert-kubeconfig 子命令之前,请将 kubeconfig 文件路径导出到 KUBECONFIG 环境变量。 例如:
export KUBECONFIG=/path/to/kubeconfig
转换 kubeconfig 文件
运行convert-kubeconfig子命令,将kubeconfig文件转换为使用exec插件,以实现所选身份验证方法。
kubelogin convert-kubeconfig
kubelogin convert-kubeconfig -l azurecli
# Bearer token authentication
kubelogin convert-kubeconfig -l interactive
# Proof-of-Possession (PoP) token authentication
kubelogin convert-kubeconfig -l interactive --pop-enabled --pop-claims "u=/ARM/ID/OF/CLUSTER"
convert-kubeconfig运行子命令以转换 kubeconfig 文件以使用 exec 插件。kubelogin convert-kubeconfig -l spn为客户端 ID 和客户端机密或客户端证书设置环境变量。 例如:
export AZURE_CLIENT_ID=<service-principal-client-id> export AZURE_CLIENT_SECRET=<service-principal-client-secret>
# Default managed identity authentication
kubelogin convert-kubeconfig -l msi
# Specific managed identity authentication
kubelogin convert-kubeconfig -l msi --client-id <managed-identity-client-id>
kubelogin convert-kubeconfig -l workloadidentity
删除缓存的令牌
使用 kubelogin remove-tokens 命令删除缓存的令牌。
kubelogin remove-tokens
获取节点信息
使用 kubectl get 命令获取节点信息。
kubectl get nodes
如何将 kubelogin 与 AKS 结合使用
AKS 使用一对第一方 Microsoft Entra 应用程序。 这些应用程序 ID 在所有环境中都是相同的。
服务器端使用的 AKS Microsoft Entra 服务器应用程序 ID(服务器 ID)是 6dae42f8-4368-4678-94ff-3960e28e3630。 必须为此应用程序颁发访问 AKS 群集的访问令牌。 在大多数 kubelogin 身份验证方法中,必须使用 --server-id 和 kubelogin get-token。
kubelogin 用来代表用户执行公共客户端身份验证的 AKS Microsoft Entra 客户端应用程序 ID (client-id) 是 80faf920-1908-4b52-b5ef-a8e7bedfc67a。 客户端应用程序 ID 用于设备代码和 Web 浏览器交互式身份验证方法。
相关内容
- 了解如何在 AKS 托管 Microsoft Entra 集成指南 中,将 AKS 与 Microsoft Entra 进行集成。
- 要开始使用 AKS 中的托管标识,请参阅使用 AKS 中的托管标识。
- 若要在 AKS 中开始使用工作负载标识,请参阅在 AKS 中使用工作负载标识。