14

好的,所以我搞砸了,我不小心碰到az ad sp reset-credentials了我们的 AKS 集群运行的服务主体。现在我们收到如下错误:

创建负载均衡器时出错(将重试):获取服务测试/管理 API 的 LB 时出错:azure.BearerAuthorizer#WithAuthorization:无法刷新令牌以请求https://management.azure.com/subscriptions/ **** /resourceGroups/MC_****/providers/Microsoft.Network/loadBalancers?api-version=2017-09-01:StatusCode=0——原始错误:adal:刷新请求失败。状态码 = '401'。响应正文:{"error":"invalid_client","error_description":"AADSTS70002:验证凭据时出错。AADSTS50012:提供了无效的客户端密码。\r\n跟踪 ID:****\r\n相关 ID:*** * \r\n时间戳:2018-08-23 12:01:33Z","error_codes":[70002,50012],"timestamp":"2018-08-23 12:01:33Z","trace_id":" ****","correlation_id":

无法提取图像“****.azurecr.io/****:****”:rpc 错误:代码 = 未知 desc = 来自守护程序的错误响应:获取 https://****.azurecr。 io/v2/****/manifests/****:未授权:需要身份验证

所以现在我想找到服务主体使用的原始客户端密码,以便我可以将其重新添加为服务主体的密钥。除了重新创建整个集群之外,这是我能想到的唯一解决方案。

有任何想法吗?

4

4 回答 4

12

最后,解决方案非常简单。

  • 在 Azure 门户中,导航到名为MC_<resourcegroup>_<aksName>_<region>.
  • 单击“虚拟机”类型的资源之一。
  • 向下滚动到“运行命令”

运行命令

  • 选择“RunShellScript”
  • 输入cat /etc/kubernetes/azure.json并点击“运行”

该命令将返回 JSON 文件的内容。你需要的属性是aadClientSecret

于 2018-08-27T14:27:04.990 回答
6

谁遇到了这个问题,微软提供了一个更新的解决方案

https://docs.microsoft.com/en-us/azure/aks/update-credentials#update-aks-cluster-with-new-credentials

他们还提到(不是很明显): 默认情况下,AKS 群集是使用具有一年到期时间的服务主体创建的。

此外, 从 Azure CLI 2.0.68 开始,不再支持使用 --password 参数创建具有用户定义密码的服务主体,以防止意外使用弱密码。 因此更改服务主体密码的初始解决方案不再起作用。

于 2019-07-04T14:18:35.420 回答
0

这是你想做的一件烦人的事情。对于您的问题,您无法在未经身份验证的情况下提取图像。

首先,您必须找出容器注册表的服务主体。您可以在 Azure 门户中执行此操作并导航到注册表面板,然后您可以像这样找到服务主体:

在此处输入图像描述

或者,您可以使用 Azure CLI 命令查找注册表 ID,如下所示:

az acr show --resource-group groupName --name registryName --query id --output tsv

然后使用命令查找服务主体 ID,如下所示:

az role assignment list --scope registryID

您可以选择所需的服务主体。

然后,您将使用该命令获取所有机密并kubectl get secrets获取机密kubectl get secrets secretName -o yaml令牌。然后一一分析,检查用户名是否与服务主体ID相同。您可以使用 JWT 等工具来分析秘密令牌。结果将是这样的:

在此处输入图像描述

如果用户名与您找到的服务主体 ID 相同,那就是您想要的秘密。这一步很麻烦。您应该逐一检查秘密,否则您将有更好的方法来检查它们。

顺便说一句,似乎您在创建服务主体时只能看到一次服务主体的密码。Azure 不会再向您展示。但是,如果您创建 Kubernetes 密钥,则密码将存储在其中。

于 2018-08-24T03:08:45.903 回答
0

Azure 门户中提供了新功能,可以在不使用 CLI 的情况下查看集群配置。转到 Azure 门户 -> 您的集群资源 -> 概述

在右侧有一个按钮,上面写着“JSON View”。单击它,您将看到一个包含集群详细信息的 json 文件。服务主体 ID 在“servicePrincipalProfile”下可见。

于 2021-06-08T08:21:24.903 回答