Problemi relativi all’estensione di Azure Operator Service Manager (AOSM) dell'interfaccia della riga di comando di Azure
Questo documento contiene un elenco di problemi comuni quando si usa l'estensione AOSM dell'interfaccia della riga di comando di Azure per eseguire l'onboarding di Funzioni di rete, e le relative risoluzioni.
Problemi comuni
Il server di pubblicazione esiste già nell'area
I nomi dei server di pubblicazione devono essere univoci nell’area di Azure. Se viene visualizzato l'errore seguente, il nome del server di pubblicazione scelto è già in uso:
Message: A private publisher resource with the name 'nginx-publisher' already exists in the provided region.
Per risolvere questo errore:
Se si è proprietari del server di pubblicazione, se questo si trova nel tenant e se si vuole riutilizzarlo:
Il server di pubblicazione è definito nel file di configurazione dell'estensione dell'interfaccia della riga di comando AOSM. I campi publisher_name
e publisher_resource_group_name
devono corrispondere a quelli del server di pubblicazione esistente e devono trovarsi nel tenant in uso per questa distribuzione.
Modificare publisher_resource_group_name
nel file di configurazione in modo che faccia riferimento al server di pubblicazione esistente, eseguire di nuovo il comando build
corrispondente, quindi eseguire di nuovo il comando publish
.
Non si è proprietari del server di pubblicazione esistente:
Usare un nuovo nome del server di pubblicazione.
Errore di caricamento dell'artefatto NSD (Network Service Design)
I caricamenti degli artefatti con il comando az aosm nsd publish
possono avere esito negativo in rare occasioni. L'output degli errori in questo caso è
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'}]}]}
Per risolvere questo errore:
Opzione 1.
Verificare di avere le assegnazioni di ruolo Contributor
e AcrPush
nella sottoscrizione che si vuole usare. Se così non fosse, effettuare l’assegnazione. Se l'impostazione di questa assegnazione di ruolo non è possibile, eseguire il comando az aosm nsd publish
con il parametro --no-subscription-permissions
.
Opzione 2.
Se queste autorizzazioni non risolvono il problema, eseguire i comandi seguenti dalla cartella nsd-cli-output/artifacts
creata dal comando az aosm nsd build
:
- Compilare il modello ARM della funzione di rete dal file BICEP generato dall'interfaccia della riga di comando
bicep build <nf-name>.bicep
- Generare le credenziali del token della mappa dell'ambito dal manifesto dell'artefatto creato nel comando
az aosm nsd publish
.
Importante
È necessario usare il manifesto dell'artefatto creato nel comando az aosm nsd publish
. Il modello ARM NF viene dichiarato solo in tale manifesto, pertanto solo il token della mappa dell'ambito generato da questo manifesto consentirà di eseguire il push (o il pull) del modello ARM NF nell'archivio artefatti.
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'
- Installare Open Container Initiative Registry come archiviazione (ORAS) e accedere al Registro Azure Container gestito da AOSM. Il nome del Registro Azure Container gestito di AOSM è disponibile nella pagina del portale di Azure relativa alla risorsa dell'archivio artefatti. Il nome utente e la password sono disponibili nell'output del passaggio precedente.
oras login <aosm-managed-acr-name>.azurecr.io --username <username> --password <scope map token>
- Usare ORAS per caricare il modello ARM della funzione di rete nel Registro Azure Container gestito di AOSM. Il tag dell'artefatto
<arm-template-version>
deve essere in formato1.0.0
.
oras push <aosm-managed-acr-name>.azurecr.io/Contoso-nsd:<arm-template-version> ./nsd-cli-output/artifacts/<nf-name>.json
Errori di copia tra tenant
L'estensione AOSM dell'interfaccia della riga di comando di Azure non supporta in modo nativo le copie delle immagini tra tenant. Tuttavia, è possibile configurare l'ambiente dell'interfaccia della riga di comando in modo da consentire questa funzionalità. Il processo consiste nell'impostare la sottoscrizione di Azure predefinita sulla sottoscrizione che contiene il Registro Azure Container di origine, accedere al Registro Azure Container di origine e quindi eseguire tutti i comandi az aosm
con il parametro --subscription
, impostando il valore nella sottoscrizione di destinazione. Le sottoscrizioni di origine e di destinazione possono trovarsi in tenant diversi.
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>
Errori di configurazione comuni
La distribuzione del servizio di rete del sito (SNS) ha esito negativo quando la configurazione NSDV (Site And Network Service Design Version) non corrisponde
I tentativi di creazione SNS hanno esito negativo se la proprietà nfvi della risorsa Sito non corrisponde alla proprietà nfvisFromSite dell'NSDV. Errore:
{
"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.\"}]}}",
}
In questo esempio la proprietà NSDV nfvisFromSite contiene:
nfvisFromSite: {
nfvi1: {
name: 'nsd-contoso_NFVI1'
type: 'AzureArcKubernetes'
}
La proprietà nfvi della risorsa Sito deve corrispondere al nome e al tipo in 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 nel valore del gruppo di configurazione (CGV) non corrisponde alla versione di definizione della funzione di rete (NFDV) pubblicata
Gli schemi del gruppo di configurazione generati dall'estensione AOSM dell'interfaccia della riga di comando di Azure hanno un parametro obbligatorio denominato nfdvName
. nfdvname
è il nome dell'NFDV, ovvero una stringa in formato 1.0.0
. Non è il nome della funzione di rete (NF) o del gruppo di definizione della funzione di rete (NFDG). Nell'esempio seguente viene illustrato l'utilizzo corretto.
{
"nsd-contoso": {
"nfdvName": "1.0.0",
"deployParameters": [
{}
],
"customLocationId": "<custom-location-arm-id>",
"managedIdentityId": "<managed-id-arm-id>"
}
}
Proprietà dei valori CGV non corretta quando non si espongono parametri in uno schema del gruppo di configurazione (CGS)
Gli schemi del gruppo di configurazione generati dall'estensione AOSM dell'interfaccia della riga di comando di Azure espongono un campo deployParameters
che, per impostazione predefinita, è una matrice di oggetti JSON. Esistono diversi motivi per cui creare un CGV con un campo deployParameters
vuoto:
- Non è stata esposta alcuna configurazione nello schema del gruppo di configurazione e tutti i valori vengono impostati nel file values.yaml predefinito nel grafico Helm.
- È stato creato uno schema del gruppo di configurazione che include i valori predefiniti e non si vuole eseguirne l'override.
Se si sta creando un CGV con un campo deployParameters
vuoto, il valore del campo deve essere una matrice contenente un oggetto JSON vuoto.
{
"nsd-contoso": {
"nfdv": "1.0.0",
"deployParameters": [
{}
],
"customLocationId": "<custom-location-arm-id>",
"managedIdentityId": "<managed-id-arm-id>"
}
}
AOSM restituisce il messaggio di errore seguente se il CGV contiene una matrice vuota, ovvero []
, anziché una matrice contenente un oggetto vuoto ([{}]
).
{"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."}
Mancata corrispondenza tra la proprietà image nei grafici Helm e la posizione nel Registro Azure Container di origine
L'interfaccia della riga di comando di AOSM richiede che le immagini nel registro di origine si trovino nella stessa struttura del repository scritta nel grafico Helm. Ad esempio, un'immagine inclusa in un grafico Helm come core/contoso-a:1.0.0
deve essere disponibile nel Registro di sistema di origine in un percorso che termina in core/contoso-a:1.0.0
. Il mancato caricamento dell'immagine nel percorso corretto nel Registro di sistema di origine portaaz aosm nfd publish
a fallire con l'errore seguente.
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"}}]}
Sono disponibili più soluzioni.
- Modificare il grafico Helm, o passare i percorsi delle immagini in values.yaml, e impostare i percorsi delle immagini in modo che corrispondano alla struttura del repository nel registro di origine.
- Caricare le immagini nel registro di origine in modo che la concatenazione di "image_sources" nel file
cnf-input.jsonc
e il percorso dell'immagine del grafico Helm corrisponda al percorso caricato nel Registro di sistema di origine. - L'interfaccia della riga di comando di AOSM archivia i metadati delle immagini individuati in
cnf-cli-output/artifacts/artifacts.json
. Il percorso in cui l'interfaccia della riga di comando di AOSM effettua ricerche nel Registro di sistema di origine è<registry_name>/<registry_namespace>/<artifact_name>/<artifact_version>
. È possibile modificare manualmente questo file in modo che i valori corrispondano alla posizione dell'immagine nel Registro Azure Container di origine.
I CGV non corrispondono a CGS quando il parametro ha un tipo Null
Attualmente, AOSM non supporta null
come valore predefinito nello schema deployParameters, il che significa che il valore predefinito null
non è consentito neanche negli schemi del gruppo di configurazione. Per risolvere questo problema, l'interfaccia della riga di comando di AOSM imposta il valore predefinito per i parametri di tipo null come stringa "null"
, il che consente a un NFDV di pubblicare correttamente.
Quando si usa il portale per creare volumi CGV, il parametro viene compilato automaticamente in modo da avere "null"
come valore. Se non si modifica questo valore, nel portale viene visualizzato un messaggio di errore che indica: "Il nuovo valore del gruppo di configurazione non corrisponde allo schema. Modificare i valori".
Per correggere l'errore, passare "null"
a null
nei CGV.
Ad esempio, in origine il valore è "null"
:
"serviceAccount_name": "null",
Che deve essere modificato nel valore null
.
"serviceAccount_name": null,