Problèmes de l’extension Azure Operator Service Manager (AOSM) de l’interface de ligne de commande d’Azure (Azure CLI, Azure Command Line Interface)

Ce document contient une liste des problèmes courants lors de l’utilisation de l’extension AOSM de l’Azure CLI pour intégrer des fonctions réseau, ainsi que leurs résolutions.

Problèmes courants

L’éditeur existe déjà dans la région

Les noms d’éditeur doivent être uniques au sein d’une région Azure. Si vous voyez l’erreur suivante, le nom de l’éditeur que vous avez choisi est déjà utilisé :

Message: A private publisher resource with the name 'nginx-publisher' already exists in the provided region.

Pour corriger cette erreur :

Si vous êtes propriétaire de l’éditeur, qu’il se trouve dans votre locataire et que vous souhaitez le réutiliser :

L’éditeur est défini dans votre fichier de configuration de l’extension AOSM CLI. Les champs publisher_name et publisher_resource_group_name doivent correspondre à ceux de l’éditeur existant, et il doit se trouver dans le locataire que vous utilisez pour ce déploiement.

Modifiez le publisher_resource_group_name dans le fichier de configuration pour qu’il référence l’éditeur existant, réexécutez la commande build correspondante, puis réexécutez la commande publish.

Vous n’êtes pas propriétaire de l’éditeur existant :

Utilisez un nouveau nom d’éditeur.

Défaillance du chargement de l’artefact de conception de services réseau (NSD, Network Service Design)

Les chargements d’artefacts à l’aide de la commande az aosm nsd publish peuvent échouer dans de rares occasions. Le message d’erreur dans ce cas est

ValueError: Issue retrieving session url: {'errors': [{'code': 'UNAUTHORIZED', 'message': 'authentication required, visit https://aka.ms/acr/authorization for more information.', 'detail': [{'Type': 'repository', 'Name': 'contoso-nsd', 'Action': 'pull'}, {'Type': 'repository', 'Name': 'contoso-nsd', 'Action': 'push'}]}]}

Pour corriger cette erreur :

Option 1. Confirmez que vous disposez des attributions de rôle de Contributor et d’AcrPush sur l’abonnement que vous souhaitez utiliser. Attribuez-les si vous n’en disposez pas. Si l’attribution de ce rôle n’est pas possible, exécutez la commande az aosm nsd publish avec le paramètre --no-subscription-permissions.

Option 2. Si ces autorisations ne résolvent pas le problème, exécutez les commandes suivantes depuis le dossier nsd-cli-output/artifacts créé par la commande az aosm nsd build :

  • Génération du modèle ARM de fonction réseau à partir du fichier BICEP crée par l’interface de ligne de commande (CLI)
bicep build <nf-name>.bicep
  • Générez des informations d’identification de jeton de mappage d’étendue à partir du manifeste d’artefact créé dans la commande az aosm nsd publish.

Important

Vous devez utiliser le manifeste d’artefact créé dans la commande az aosm nsd publish. Le modèle ARM NF est déclaré uniquement dans ce manifeste. Par conséquent, seul le jeton de mappage d’étendue généré par ce manifeste vous permet d’envoyer (ou d’extraire) le modèle ARM NF vers le magasin d’artefacts.

az rest --method POST --url 'https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.HybridNetwork/publishers/<publisher>/artifactStores/<artifact-store>/artifactManifests/<artifactManifest>/listCredential?api-version=2023-09-01'
oras login <aosm-managed-acr-name>.azurecr.io --username <username> --password <scope map token>
  • Utilisez ORAS pour charger le modèle ARM de fonction réseau dans l’ACR géré par AOSM. La balise d’artefact <arm-template-version> doit être au format 1.0.0.
oras push <aosm-managed-acr-name>.azurecr.io/Contoso-nsd:<arm-template-version> ./nsd-cli-output/artifacts/<nf-name>.json

Défaillances de copie multilocataire

L’extension AOSM de l’Azure CLI ne prend pas en charge les copies d’images multilocataires en mode natif. Cependant, il est possible de configurer votre environnement CLI de manière à permettre cette fonctionnalité. Le processus consiste à définir l’abonnement Azure par défaut sur l’abonnement contenant l’ACR source, à se connecter à l’ACR source, puis à exécuter toutes les commandes az aosm avec le paramètre --subscription, en définissant la valeur sur l’abonnement cible. Les abonnements source et cible peuvent se trouver dans différents locataires.

az account set --subscription <source-acr-subscription>
az acr login --name <source-acr-name> -u <source-acr-username> -p <source-acr-password> --subscription <source-acr-subscription>
az aosm nfd publish --definition-type cnf --subscription <target-subscription>

Erreurs de configuration courantes

Le déploiement du service réseau de site (SNS, Site Network Service) échoue lorsque la configuration de la version de conception du service réseau (NSDV, Network Service Design Version) et du site ne correspondent pas

Les tentatives de création SNS échouent si la propriété nfvi de la ressource Site ne correspond pas à la propriété nfvisFromSite du NSDV. L'erreur est

{
"statusMessage": "{\"status\":\"Failed\",\"error\":{\"code\":\"ResourceOperationFailure\",\"message\":\"The resource operation completed with terminal provisioning state 'Failed'.\",\"details\":[{\"code\":\"InvalidRequestContent\",\"message\":\"For NfviAlias = nfvi1, either NfviName = nsd-contoso_NFVI and NfviType = AzureCore does not match with site resource.\"}]}}",
}

Dans cet exemple, la propriété NSDV nfvisFromSite contient :

    nfvisFromSite: {
      nfvi1: {
        name: 'nsd-contoso_NFVI1'
        type: 'AzureArcKubernetes'
      }

La propriété nfvi de la ressource du Site doit correspondre au nom et au type dans le NSDV.

resource site 'Microsoft.HybridNetwork/sites@2023-09-01' = {
  name: 'contoso-site'
  location: 'eastus'
  properties: {
    nfvis : [
      {
        name: 'nsd-contoso_NFVI1'
        nfviType: 'AzureArcKubernetes'
        customLocationReference: {
          id: '<custom-location-arm-id>'
        }
      }
    ]
  }
}

NfdvName dans la Valeur du groupe de configuration (CGV, Configuration Group Value) ne correspond pas à la Version de définition de fonction réseau (NFDV, Network Function Definition Version) publiée

Les schémas de groupe de configuration générés par l’extension AOSM de l’Azure CLI ont un paramètre obligatoire appelé nfdvName. nfdvname est le nom de la NFDV, qui est une chaîne au format 1.0.0. Il ne s’agit pas du nom de la Fonction réseau (NF, Network Function) ou du Groupe de définition de la fonction réseau (NFDG, Network Function Definition Group). L’exemple suivant montre l’utilisation correcte.

{
    "nsd-contoso": {
        "nfdvName": "1.0.0",
        "deployParameters": [
            {}
        ],
        "customLocationId": "<custom-location-arm-id>",
        "managedIdentityId": "<managed-id-arm-id>"
    }
}

Propriété de valeurs CGV incorrectes lors de l’exposition d’aucun paramètre dans un schéma de groupe de configuration (CGS, Configuration Group Schema)

Les schémas de groupe de configuration générés par l’extension AOSM de l’Azure CLI exposent un champ deployParameters qui, par défaut, est un tableau d’objets JSON. Il existe plusieurs raisons pour lesquelles vous souhaiterez créer une CGV avec un champ deployParameters vide :

  • Vous n’avez aucune configuration exposée dans le Schéma du groupe de configuration et toutes les valeurs sont définies dans le fichier values.yaml par défaut dans le graphique Helm.
  • Vous avez créé un Schéma de groupe de configuration qui inclut des valeurs par défaut et vous ne souhaitez pas les remplacer.

Si vous créez une CGV avec un champ deployParameters vide, la valeur du champ doit être un tableau contenant un objet JSON vide.

{
    "nsd-contoso": {
        "nfdv": "1.0.0",
        "deployParameters": [
            {}
        ],
        "customLocationId": "<custom-location-arm-id>",
        "managedIdentityId": "<managed-id-arm-id>"
    }
}

AOSM retourne le message d’erreur suivant si la CGV contient un tableau vide (autrement dit, []) au lieu d’un tableau contenant un objet vide ([{}]).

{"code":"BadRequest","message":"NSDV ResourceElementTemplate (name: 'mco-nsdg', type: 'NetworkFunctionDefinition') expects at least one 'networkfunctions' resource in the associated template. Please use the type: 'ArmResourceDefinition' to install generic ARM resources."}

Incompatibilité entre la propriété de l’image dans les graphiques Helm et l’emplacement dans l’ACR source

La CLI d’AOSM nécessite que les images de votre registre source soient dans la même structure de référentiel que celle écrite dans votre graphique Helm. Par exemple, une image incluse dans un graphique Helm comme core/contoso-a:1.0.0 doit être disponible dans le registre source dans un chemin qui se termine par core/contoso-a:1.0.0. La défaillance du chargement de l’image vers le chemin d’accès correct dans le registre source entraîne la défaillance de az aosm nfd publish avec l’erreur suivante.

Code: InvalidParameters
Message: Operation registries-cd9ad97d-f3a3-11ee-a728-6b163569f55a failed. Resource /subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.ContainerRegistry/registries/contoso Invalid message NotFound Not Found {"errors":[{"code":"MANIFEST_UNKNOWN","message":"manifest tagged by \"0.0.0-9\" is not found","detail":{"Tag":"0.0.0-9"}}]}

Il existe plusieurs solutions disponibles.

  • Modifiez votre graphique Helm, ou transmettez les chemins d’accès aux images dans values.yaml, puis définissez les chemins d’accès aux images pour qu’ils correspondent à la structure du référentiel dans votre registre source.
  • Chargez les images dans votre registre source de manière à ce que la concaténation de « image_sources » dans le fichier cnf-input.jsonc et le chemin d’accès de l’image depuis le graphique Helm corresponde à l’emplacement chargé dans le registre source.
  • La CLI d’AOSM stocke les métadonnées des images qu’elle découvre dans cnf-cli-output/artifacts/artifacts.json. Le chemin d’accès que la CLI d’AOSM recherche dans le registre source est <registry_name>/<registry_namespace>/<artifact_name>/<artifact_version>. Vous pouvez modifier manuellement ce fichier afin que les valeurs correspondent à l’emplacement de l’image dans votre ACR source.

Les CGV ne correspondent pas au CGS lorsque le paramètre a un type null

Actuellement, AOSM ne prend pas en charge la valeur null comme valeur par défaut dans le schéma deployParameters, ce qui signifie que la valeur par défaut null n’est pas non plus autorisée dans les Schémas du groupe de configuration. Pour contourner ce problème, AOSM CLI définit la valeur par défaut des paramètres de type nul sur la chaîne "null", ce qui permet de réussir la publication du NFDV.

Lorsque de l’utilisation du portail pour créer des CGV, votre paramètre se remplit automatiquement avec la valeur "null". Si vous ne modifiez pas cette valeur, le Portail affiche un message d’erreur indiquant : « La nouvelle valeur du groupe de configuration ne correspond pas au schéma , veuillez modifier les valeurs ».

Capture d’écran du portail où un message d’erreur s’affiche, parce que les valeurs du groupe de configuration ne correspondent pas au schéma du groupe de configuration.

Pour corriger cette erreur, modifiez "null" avec null dans les CGV.

Par exemple, à l’origine, nous avons la valeur "null" :

"serviceAccount_name": "null",

Qui doit être remplacé par la valeur null.

"serviceAccount_name": null,