Рейтинг:0

Как правильно назначить роль участника сети кластеру AKS с помощью шаблона ARM/Bicep?

флаг cn

Я пытаюсь настроить балансировщик нагрузки для своего сервера 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 после того, как разрешения будут готовы?
Рейтинг:0
флаг us

На ваш вопрос (хотя и не напрямую) ответили здесь.

Описываемое вами поведение обсуждается в эта секция. Поскольку Azure Resource Manager иногда кэширует конфигурации и данные для повышения производительности, иногда может пройти до 30 минут, прежде чем изменения вступят в силу при назначении ролей или удалении назначений ролей.

Используя Azure CLI, вы можете принудительно обновить изменения назначения ролей, выход и вход.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.