我正在尝试使用 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 的入口控制器?