Я пытаюсь настроить балансировщик нагрузки для своего сервера AKS с помощью Bicep/ARM. Я использую NGinx Ingress Controller в kubernetes, и, похоже, он работает, но когда я впервые запускаю процесс, я сталкиваюсь с ошибкой.
В основном мне интересно, что является эквивалентным шаблоном ARM или Bicep для этого шага в документации Azure?
https://docs.microsoft.com/en-us/azure/aks/static-ip#create-a-service-using-the-static-ip-address
назначение роли az создать \
--assignee <идентификатор клиента> \
--role "Участник сети" \
--scope /subscriptions/<идентификатор подписки>/resourceGroups/<имя группы ресурсов>
Я использую Bicep и создал свой сервер AKS, например, так:
ресурс ExampleKubernetes 'Microsoft.ContainerService/managedClusters@2021-07-01' = {
// ...
}
Затем я добавляю назначение роли к идентификатору kubelet следующим образом:
var NetworkContibutor = '4d97b98b-1d4f-4787-a291-c67834d212e7'
ресурс AssignNetworkContributorToKubelet 'Microsoft.Authorization/roleAssignments@2020-08-01-preview' = {
имя: guid(resourceGroup().id, ExampleKubernetes.id, NetworkContibutor)
зависит от: [
ПримерKubernetes
]
характеристики: {
roleDefinitionId:subscriptionResourceId('Microsoft.Authorization/roleDefinitions', NetworkContibutor)
PrincipalType: 'ServicePrincipal'
PrincipalId: ExampleKubernetes.properties.identityProfile.kubeletidentity.objectId
}
}
Кажется, это работает, я вижу роль, назначенную управляемому субъекту на панели инструментов... но служба в kubernetes, похоже, не работает с проблемой разрешения:
Ошибка синхронизации балансировщика нагрузки: не удалось обеспечить балансировщик нагрузки: с возможностью повторного запуска: ложь,
RetryAfter: 0s, HTTPStatusCode: 403, RawError: Retriable: false, RetryAfter:
0 с, HTTPStatusCode: 403, RawError:
{"ошибка":{"код":"Ошибка авторизации","сообщение":"Клиент
'<some guid A>' с идентификатором объекта
'<какая-то постройка A>' не имеет права на выполнение
действие «Microsoft.Network/publicIPAddresses/read» по области действия
'/subscriptions/<subid>/resourceGroups/example/providers/Microsoft.Network/publicIPAddresses/example'
или область недействительна. Если доступ был предоставлен недавно, обновите
реквизиты для входа."}}
Что странно, так это то, что позже в какой-то момент это, кажется, просто волшебным образом сработало. В этой ошибке указано «retriable false», и похоже, что служба не повторяет попытку, но последующее развертывание NGinx в kubernetes будет тогда заставьте его повторить попытку и внезапно бум его работы.
Мне просто кажется, что сообщение об ошибке говорит мне о некоторой недетерминированной задержке распространения ролей... Итак, мои вопросы:
- Это правильно? На самом деле это просто задержка, и мой код в основном правильный?
- Я использую правильный PrincipalId? Или это действительно ненужно?
- Есть ли способ заставить эти обновления ролей распространяться? Я мог бы сделать промежуточный шаг CLI, если бы мне было нужно. Как я могу дождаться установки моего входного контроллера, который подключается к LB после того, как разрешения будут готовы?