Как я могу найти секретный раздел службы моего кластера AKS?
Хорошо, поэтому я испортил, я случайно выполнил az ad sp reset-credentials
против Принципаря Сервиса, в котором работает наш кластер AKS. И теперь мы получаем ошибки, такие как:
Ошибка при создании балансировки нагрузки (повторите попытку): ошибка получения LB для теста обслуживания /admin-api: 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\nTrace ID: ****\r\nКорремент ID: *** *\r\nTimestamp: 2018-08-23 12: 01: 33Z "," error_codes ": [70002,50012]," timestamp ":" 2018-08-23 12: 01: 33Z "," trace_id ":" ****", "correlation_id": "****"}
а также
Не удалось загрузить изображение "****. Azurecr.io/****:****": ошибка rpc: code = Неизвестно desc = Ошибка ответа от демона: Получить https://****.azurecr. io/v2/****/manifestests/****: неавторизованный: требуется аутентификация
Поэтому теперь я хочу найти секретный ключ клиента, который использует Принцип обслуживания, чтобы я мог повторно добавить это как ключ к Принципу обслуживания. Это единственное решение, о котором я могу думать, кроме воссоздания всего кластера.
Есть идеи?
Ответы
Ответ 1
В конце концов решение было довольно простым.
- На портале Azure перейдите к группе ресурсов с именем
MC_<resourcegroup>_<aksName>_<region>
. - Нажмите на один из ресурсов типа "Виртуальная машина".
- Прокрутите вниз до "Выполнить команду"
- Выберите "RunShellScript"
- Введите
cat/etc/kubernetes/azure.json
и нажмите "Выполнить"
Команда вернет содержимое файла JSON. aadClientSecret
вам свойство - aadClientSecret
Ответ 2
Это раздражает то, что вы хотите сделать. Для вашей проблемы вы не можете вытащить изображение без проверки подлинности.
Во-первых, вам нужно выяснить принцип обслуживания вашего реестра контейнеров. Вы можете сделать это на портале Azure и перейти к панели реестра, после чего вы можете найти принципала службы следующим образом:
Или вы можете использовать команду Azure CLI, чтобы найти идентификатор реестра, например:
az acr show --resource-group groupName --name registryName --query id --output tsv
Затем используйте команду, чтобы найти идентификатор основного сервиса, например:
az role assignment list --scope registryID
Вы можете выбрать нужный вам сервис.
Тогда вы получите все секреты с командой kubectl get secrets
а kubectl get secrets secretName -o yaml
чтобы получить токен секретности. Затем проанализируйте одно из -o ne, чтобы проверить, совпадает ли имя пользователя с идентификатором основного сервиса. Вы можете использовать такие инструменты, как JWT, для анализа секретного токена. Результат будет следующим:
Если имя пользователя совпадает с идентификатором основного сервиса, которое вы найдете, это секрет, который вы хотите. Этот шаг - проблема. Вы должны проверить секретный ключ -o ne, или у вас будет отличный способ проверить их.
Кстати, кажется, что вы можете просто увидеть пароль директора службы один раз, когда вы его создаете. Лазурь больше не покажет вам. Но если вы создадите секрет Kubernetes, в нем будет храниться пароль.
Ответ 3
Кто бы ни подошел к этой проблеме, там обновленное решение от Microsoft
https://docs.microsoft.com/en-us/azure/aks/update-credentials#update-aks-cluster-with-new-credentials
Они также упоминают (что не очевидно): По умолчанию кластеры AKS создаются с субъектом службы, срок годности которого составляет один год.
Кроме того, в Azure CLI 2.0.68 параметр --password для создания субъекта службы с пользовательским паролем больше не поддерживается, чтобы предотвратить случайное использование слабых паролей. поэтому первоначальное решение изменить пароль участника службы больше не работает.