Azure

通過 ARM/Bicep 模板將網路參與者角色分配給 AKS 群集的正確方法是什麼?

  • September 24, 2021

我正在嘗試使用 Bicep/ARM 為我的 AKS 伺服器配置負載均衡器。我在 kubernetes 中使用 NGinx 入口控制器,它似乎確實可以工作,但是當我第一次啟動時,我遇到了一個錯誤。

主要是我想知道 Azure 文件中此步驟的等效 ARM 或 Bicep 模板是什麼?

https://docs.microsoft.com/en-us/azure/aks/static-ip#create-a-service-using-the-static-ip-address

az role assignment create \
   --assignee <Client ID> \
   --role "Network Contributor" \
   --scope /subscriptions/<subscription id>/resourceGroups/<resource group name>

我正在使用 Bicep 並創建了我的 AKS 伺服器,例如:

resource ExampleKubernetes 'Microsoft.ContainerService/managedClusters@2021-07-01' = {
 // ...
}

然後我向 kubelet 身份添加角色分配,如下所示:

var NetworkContibutor = '4d97b98b-1d4f-4787-a291-c67834d212e7'
resource AssignNetworkContributorToKubelet 'Microsoft.Authorization/roleAssignments@2020-08-01-preview' = {
 name: guid(resourceGroup().id, ExampleKubernetes.id, NetworkContibutor)
 dependsOn: [
   ExampleKubernetes
 ]
 properties: {
   roleDefinitionId: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', NetworkContibutor)
   principalType: 'ServicePrincipal'
   principalId: ExampleKubernetes.properties.identityProfile.kubeletidentity.objectId
 }
}

這似乎可行,我可以在儀表板中看到分配給託管主體的角色……但是 kubernetes 中的服務似乎仍然失敗,並且仍然存在權限問題:

 Error syncing load balancer: failed to ensure load balancer: Retriable: false,
 RetryAfter: 0s, HTTPStatusCode: 403, RawError: Retriable: false, RetryAfter:
 0s, HTTPStatusCode: 403, RawError:
 {"error":{"code":"AuthorizationFailed","message":"The client
 '<some guid A>' with object id
 '<some buid A>' does not have authorization to perform
 action 'Microsoft.Network/publicIPAddresses/read' over scope
 '/subscriptions/<subid>/resourceGroups/example/providers/Microsoft.Network/publicIPAddresses/example'
 or the scope is invalid. If access was recently granted, please refresh your
 credentials."}}

奇怪的是,後來在某些時候它似乎只是神奇地工作。該錯誤顯示“retriable false”,並且該服務似乎沒有重試,但隨後將 NGinx 部署到 kubernetes 將導致它重試並突然繁榮其工作。

似乎錯誤消息告訴我角色傳播存在一些不確定的延遲……所以我的問題是:

  • 是對的嗎?實際上只是延遲並且我的程式碼基本上是正確的嗎?
  • 我使用了正確的 principalId 嗎?或者這實際上是不必要的?
  • 有沒有辦法讓我強制傳播這些角色更新?如果需要,我可以在兩者之間有一個 CLI 步驟。權限準備好後,如何等待安裝連接到 LB 的入口控制器?

你的問題(雖然不是直接的)在這裡得到了回答。

本節將討論您所描述的行為。由於 Azure 資源管理器有時會記憶體配置和數據以提高性能,因此在分配角色或刪除角色分配時,更改有時可能需要長達 30 分鐘才能生效。

使用 Azure CLI,您可以通過註銷和登錄來強制刷新您的角色分配更改。

引用自:https://serverfault.com/questions/1077927