最近我为AKS集群启用了Entra ID登录,
resource "azurerm_kubernetes_cluster" "this" {
...
azure_active_directory_role_based_access_control {
admin_group_object_ids = var.entraid_group_ids_cluster_admin
azure_rbac_enabled = false
tenant_id = var.tenant_id
}
...
并安装了kubelogin
az account set --subscription [REDACTED]
az aks get-credentials --resource-group [RG] --name [NAME]
kubelogin convert-kubeconfig -l azurecli
启用 Entra ID 后第一次
kubectl
访问,它要求输入 OTP,我还可以在下面的路径中看到令牌
$ ls ~/.kube/cache/kubelogin/AzurePublicCloud-6dae42f8-4368-4678-94ff-3960e28e3630-80faf920-1908-4b52-b5ef-a8e7bedfc67a-97428d91-daa2-4245-a358-87ce5cc734f6.json
/Users/user.name/.kube/cache/kubelogin/AzurePublicCloud-6dae42f8-4368-4678-94ff-3960e28e3630-80faf920-1908-4b52-b5ef-a8e7bedfc67a-97428d91-daa2-4245-a358-87ce5cc734f6.json
我已经使用
kubectl
访问一周了,我看到它再也没有要求 OTP(我认为令牌到期时间是 24 小时!?)。如果我查看缓存令牌内部
$ cat ~/.kube/cache/kubelogin/AzurePublicCloud-6dae42f8-4368-4678-94ff-3960e28e3630-80faf920-1908-4b52-b5ef-a8e7bedfc67a-97428d91-daa2-4245-a358-87ce5cc734f6.json
{"access_token":"[REDACTED]","expires_in":4932,"expires_on":1727278105,"not_before":1727272872,"resource":"6dae42f8-4368-4678-94ff-3960e28e3630","token_type":"Bearer"}
"expires_on":1727278105
的纪元时间是Wednesday, 25 September 2024 15:28:25
,令牌已过期,不是应该要求再次OTP登录吗?
在这种情况下如何强制 kubeconfig 令牌过期?例如,24小时后,当我尝试使用
kubectl
时,它应该要求OTP
kubectl
令牌的过期时间由 Microsoft Entra ID 配置确定,无法修改。令牌会被缓存,只有在过期或重新创建 K8s 配置文件后才会再次提示输入 OTP。 代币的生命周期被设计为不能少于 60 分钟。如果要强制缩短令牌生命周期,可以使用特权身份管理来控制对 AKS 群集的访问。默认情况下,Entra ID 令牌具有24 小时过期时间。您可以使用 kubelogin
命令 kubelogin remove-tokens 删除缓存的令牌。 这将强制在下次使用时从 Entra ID 请求新令牌。
您可以使用 cron 作业/脚本自动执行此操作
crontab -e
0 0 * * * /usr/local/bin/kubelogin remove-tokens
这将每天午夜运行删除令牌命令。
查看这些 MS 文档以供参考
另请参阅 MS QnA 论坛上发布的类似主题 -