Когда я создаю кластер AKS с использованием шаблонов ARM с SystemAssigned
в поле identity
, создается вторичная группа ресурсов в форме MC_<rg_name>_<cluster_name>_location
. Внутри этой группы находится управляемая личность в форме <cluster-name>-agentpool
, которую использует Kubelet
.
Шаблон руки будет внизу стойки, но общая структура следующая. Причина, по которой я использую их в отдельных развертываниях, заключается в том, что я развертываю их на уровне подписки:
Deployment A
- Microsoft.ContainerService/managedClusters
Deployment B (dependsOn A)
- Microsoft.Authorization/roleAssignments
- contains reference to `nodeResourceGroup` with API version so I made explicit dependsOn for A
Я планирую использовать Azure Pod Identity
, поэтому мне нужно назначить этому управляемому удостоверению две роли: ManagedIdentityOperator
и VirtualMachineContributor
. У меня есть переменная, которая строит путь к этому идентификатору, который используется в ссылке:
"agentpool-account":[concat(subscription().id, '/resourceGroups/', variables('managedClusterResourceGroup'), '/providers/Microsoft.ManagedIdentity/userAssignedIdentities/', parameters('cluster-name'), '-agentpool')]
"principalId": "[reference(parameters('agentpool-account'), '2018-11-30', 'full').properties.principalId]",
Однако при первом развертывании этого шаблона (т. Е. При создании кластера) развертывание RoleAssignment
завершится неудачно из-за ошибки Resource Group not found
. Просмотр действий по развертыванию подтверждает, что RoleAssignment
развернут раньше, чем создается MC_group
, несмотря на наличие явного dependsOn
в развертывании кластера. И если я повторно разверну шаблон, он будет успешным, потому что MC_group
теперь существует согласно ARM.
Мне было интересно, сталкивался ли кто-нибудь еще с этой проблемой, и любые советы о том, как ее решить, были бы замечательными. Я наткнулся на ссылку https://bmoore-msft.blog/2020/07/26/resource-not-found-dependson-is-not-working/, но, похоже, у меня это не работает.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.1",
"parameters": {
"cluster-name": {
"metadata": {
"description": "The name of the cluster"
},
"type": "string"
},
},
"resources": [
{
"apiVersion": "2019-10-01",
"location": "centralus",
"name": "test",
"type": "Microsoft.Resources/resourceGroups"
},
{
"apiVersion": "2020-06-01",
"dependsOn": [
"[resourceId('Microsoft.Resources/resourceGroups', 'test')]"
],
"name": "cluster-deployment",
"properties": {
"expressionEvaluationOptions": {
"scope": "outer"
},
"mode": "Incremental",
"parameters": {},
"template": {
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"outputs": {},
"parameters": {},
"resources": [
{
"apiVersion": "2019-06-01",
"dependsOn": [],
"identity": {
"type": "SystemAssigned"
},
"location": "centralus",
"name": "[parameters('cluster-name')]",
"properties": {
"addonProfiles": {
"azurePolicy": {
"enabled": false
},
"httpApplicationRouting": {
"enabled": false
}
},
"agentPoolProfiles": [
{
"availabilityZones": [
"1",
"2",
"3"
],
"count": 3,
"maxPods": 110,
"mode": "System",
"name": "agentpool",
"osDiskSizeGB": 0,
"osType": "Linux",
"storageProfile": "ManagedDisks",
"type": "VirtualMachineScaleSets",
"vmSize": "Standard_D16s_v3"
}
],
"apiServerAccessProfile": {
"enablePrivateCluster": false
},
"dnsPrefix": "[concat(parameters('cluster-name'), '-dns')]",
"enableRBAC": true,
"kubernetesVersion": "1.17.11",
"networkProfile": {
"loadBalancerSku": "standard",
"networkPlugin": "kubenet",
"networkPolicy": "calico"
}
},
"tags": {},
"type": "Microsoft.ContainerService/managedClusters"
}
],
"variables": {}
}
},
"resourceGroup": "test",
"type": "Microsoft.Resources/deployments"
},
{
"apiVersion": "2020-06-01",
"dependsOn": [
"cluster-deployment"
],
"name": "identity-assignment",
"properties": {
"expressionEvaluationOptions": {
"scope": "outer"
},
"mode": "Incremental",
"template": {
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"outputs": {},
"parameters": {},
"resources": [
{
"apiVersion": "2017-09-01",
"name": "[guid('test', 'ManagedIdentityOperator')]",
"properties": {
"principalId": "[reference(variables('agentpoolResourceId'), '2018-11-30', 'full').properties.principalId]",
"roleDefinitionId": "[variables('managedIdentityOperatorRoleId')]",
"scope": "[concat(subscription().id, '/resourceGroups/test')]"
},
"type": "Microsoft.Authorization/roleAssignments"
},
{
"apiVersion": "2017-09-01",
"name": "[guid('test', 'VirtualMachineContributor')]",
"properties": {
"principalId": "[reference(variables('agentpoolResourceId'), '2018-11-30', 'full').properties.principalId]",
"roleDefinitionId": "[variables('virtualMachineContributorRoleId')]",
"scope": "[concat(subscription().id, '/resourceGroups/test')]"
},
"type": "Microsoft.Authorization/roleAssignments"
}
]
}
},
"resourceGroup": "test",
"type": "Microsoft.Resources/deployments"
}
],
"variables": {
"agentPoolResourceId": "[concat(subscription().id, '/resourceGroups/', variables('managedClusterResourceGroup'), '/providers/Microsoft.ManagedIdentity/userAssignedIdentities/', parameters('cluster-name'), '-agentpool')]",
"managedClusterResourceGroup": "[concat('MC_test_', parameters('cluster-name'), '_centralus')]",
"managedIdentityOperatorRoleId": "[concat(subscription().id, '/providers/Microsoft.Authorization/roleDefinitions/f1a07417-d97a-45cb-824c-7a7467783830')]",
"virtualMachineContributorRoleId": "[concat(subscription().id, '/providers/Microsoft.Authorization/roleDefinitions/9980e02c-c2be-4d73-94e8-173b1dc7cf3c')]"
}
}