如何找到我的AKS群集的服务主体密码?

时间:2018-08-23 12:12:50

标签: azure azure-active-directory azure-container-service azure-kubernetes

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

  

创建负载平衡器时出错(将重试):为服务测试/ admin-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”。响应正文:{“错误”:“ invalid_client”,“错误描述”:“ AADSTS70002:验证凭据时出错。AADSTS50012:提供了无效的客户端机密。\ r \ n跟踪ID:**** \ r \ n关联ID:*** * \ r \ n时间戳:2018-08-23 12:01:33Z“,”错误代码“:[70002,50012],”时间戳“:” 2018-08-23 12:01:33Z“,” trace_id“:” ****“,” correlation_id“:” ****“}

  

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

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

有什么想法吗?

4 个答案:

答案 0 :(得分:5)

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

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

Run command

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

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

答案 1 :(得分:1)

无论谁遇到此问题,Microsoft都会提供更新的解决方案

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

他们还提到(不太明显的地方): 默认情况下,创建的AKS群集使用的服务主体的有效期为一年。

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

答案 2 :(得分:0)

这是一件令人讨厌的事情。对于您的问题,未经身份验证就无法提取图像。

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

enter image description here

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

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

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

az role assignment list --scope registryID

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

然后,您将使用命令kubectl get secretskubectl get secrets secretName -o yaml获得所有秘密,以获取秘密的令牌。然后一一分析以检查用户名是否与服务主体ID相同。您可以使用JWT之类的工具来分析秘密令牌。结果将如下所示:

enter image description here

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

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

答案 3 :(得分:0)

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

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