Compartir a través de


Problemas de la extensión Azure Operator Service Manager (AOSM) de la CLI de Azure

Este documento contiene una lista de problemas comunes al usar la extensión AOSM de la CLI de Azure para incorporar funciones de red y sus resoluciones.

Problemas comunes

El publicador ya existe en la región

Los nombres del publicador deben ser únicos dentro de una región de Azure. Si ve el siguiente error, el nombre del publicador que eligió ya está en uso:

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

Para resolver este error:

Si posee el publicador, está en su inquilino y desea volver a usarlo:

El publicador se define en el archivo de configuración de la extensión de la CLI de AOSM. Los campos publisher_name y publisher_resource_group_name deben coincidir con los del publicador existente y deben estar en el inquilino que se usa para esta implementación.

Cambie el publisher_resource_group_name en el archivo de configuración para que haga referencia al publicador existente, vuelva a ejecutar el comando build correspondiente y vuelva a ejecutar el comando publish.

No posee el publicador existente:

Use un nuevo nombre de publicador.

Error de carga de artefactos de Diseño de servicio de red (NSD)

En algunas ocasiones se pueden producir errores en las cargas de artefactos mediante el comando az aosm nsd publish. En este caso, la salida del error es la siguiente

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'}]}]}

Para resolver este error:

Opción 1. Confirme que tiene las asignaciones de roles Contributor y AcrPush en la suscripción que quiere usar. De lo contrario, asígnelos. Si no es posible establecer esta asignación de roles, ejecute el comando az aosm nsd publish con el parámetro --no-subscription-permissions.

Opción 2. Si estos permisos no resuelven el problema, ejecute los comandos siguientes desde la carpeta nsd-cli-output/artifacts creada por el comando az aosm nsd build:

  • Creación de la plantilla de ARM de la función de red desde el archivo BICEP generado por la CLI
bicep build <nf-name>.bicep
  • Genere credenciales de token de asignación de ámbito a partir del manifiesto de artefacto creado en el comando az aosm nsd publish.

Importante

Es obligatorio usar el manifiesto de artefacto creado en el comando az aosm nsd publish. La plantilla de ARM de la NF solo se declara en ese manifiesto, por lo que solo el token de asignación de ámbito generado por este manifiesto le permitirá insertar (o extraer) la plantilla de ARM de la NF en el Almacén de artefactos.

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'
  • Instale Open Container Initiative Registry como almacenamiento (ORAS) e iniciar sesión en la instancia de ACR administrada por AOSM. El nombre de la instancia de ACR administrada por AOSM se puede encontrar en la página de Azure Portal del recurso del Almacén de artefactos. El nombre de usuario y la contraseña se pueden encontrar en la salida del paso anterior.
oras login <aosm-managed-acr-name>.azurecr.io --username <username> --password <scope map token>
  • Use ORAS para cargar la plantilla de ARM de la función de red en la instancia de Azure Container Registry (ACR) administrada por AOSM. La etiqueta de artefacto <arm-template-version> debe tener el formato 1.0.0.
oras push <aosm-managed-acr-name>.azurecr.io/Contoso-nsd:<arm-template-version> ./nsd-cli-output/artifacts/<nf-name>.json

Errores de copia entre inquilinos

La extensión AOSM de la CLI de Azure no admite de forma nativa copias de imágenes entre inquilinos. Pero es posible configurar el entorno de la CLI de una manera que permita esta funcionalidad. El proceso consiste en establecer la suscripción de Azure predeterminada en la suscripción que contiene la instancia de ACR de origen, iniciar sesión en la instancia de ACR de origen y, después, ejecutar todos los comandos az aosm con el parámetro --subscription, y establecer el valor en la suscripción de destino. Las suscripciones de origen y de destino pueden estar en inquilinos diferentes.

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>

Configuraciones erróneas comunes

Se produce un error en la implementación del servicio de red de sitio (SNS) cuando la configuración de la versión de diseño del servicio de red (NSDV) y del sitio no coinciden

Se produce un error en los intentos de creación de SNS si la propiedad nfvi del recurso de sitio no coincide con la propiedad nfvisFromSite de NSDV. Error:

{
"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.\"}]}}",
}

En este ejemplo, la propiedad nfvisFromSite de NSDV contiene lo siguiente:

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

La propiedad nfvi del recurso de sitio debe coincidir con el nombre y el tipo en la 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 en el valor del grupo de configuración (CGV) no coincide con la versión de definición de función de red (NFDV) publicada

Los esquemas de grupo de configuración generados por la extensión AOSM de la CLI de Azure tienen un parámetro obligatorio denominado nfdvName. nfdvname es el nombre de la NFDV, que es una cadena en formato 1.0.0. No es el nombre de la función de red (NF) ni del grupo de definición de función de red (NFDG). En el ejemplo siguiente se muestra el uso correcto.

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

Propiedad de valores CGV incorrecta al no exponer parámetros en un esquema de grupo de configuración (CGS)

Los esquemas de grupo de configuración generados por la extensión AOSM de la CLI de Azure exponen un campo deployParameters que, de manera predeterminada, es una matriz de objetos JSON. Hay varias razones por las que es posible que quiera crear una CGV con un campo deployParameters vacío:

  • No tiene ninguna configuración expuesta en el esquema del grupo de configuración y todos los valores se establecen en los valores .yaml predeterminados en el gráfico de Helm.
  • Ha creado un esquema de grupo de configuración que incluye valores predeterminados y no quiere invalidarlos.

Si va a crear una CGV con un campo deployParameters vacío, el valor del campo debe ser una matriz que contenga un objeto JSON vacío.

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

AOSM devuelve el siguiente mensaje de error si la CGV contiene una matriz vacía (es decir, []) en lugar de una matriz que contiene un objeto vacío ([{}]).

{"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."}

Error de coincidencia entre la propiedad de imagen en gráficos de Helm y la ubicación en la instancia de ACR de origen

En la CLI de AOSM es necesario que las imágenes del registro de origen estén en la misma estructura de repositorio que la que se escribe en el gráfico de Helm. Por ejemplo, una imagen incluida en un gráfico de Helm como core/contoso-a:1.0.0 debe estar disponible en el registro de origen en una ruta de acceso que termine en core/contoso-a:1.0.0. Si no se carga la imagen en la ruta de acceso correcta en el registro de origen, se produce el siguiente error en az aosm nfd publish.

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"}}]}

Hay varias soluciones disponibles.

  • Edite el gráfico de Helm, o bien pase las rutas de acceso de imagen en values.yaml y establezca las rutas de acceso de imagen para que coincidan con la estructura del repositorio en el registro de origen.
  • Cargue las imágenes en el registro de origen de forma que la concatenación de "image_sources" en el archivo cnf-input.jsonc y la ruta de acceso de la imagen del gráfico de Helm coincida con la ubicación cargada en el registro de origen.
  • La CLI de AOSM almacena en cnf-cli-output/artifacts/artifacts.json los metadatos para las imágenes que detecta. La ruta de acceso que busca la CLI de AOSM en el registro de origen es <registry_name>/<registry_namespace>/<artifact_name>/<artifact_version>. Puede editar manualmente este archivo para que los valores coincidan con la ubicación de la imagen en la instancia de ACR de origen.

Las CGV no coinciden con la CGS cuando el parámetro tiene un tipo NULL

Actualmente, AOSM no admite null como valor predeterminado en el esquema deployParameters, lo que significa que tampoco se permite el valor predeterminado null en esquemas de grupo de configuración. Para solucionar este problema, la CLI de AOSM establece el valor predeterminado para los parámetros de tipo NULL en la cadena "null", que permite que una instancia de NFDV se publique correctamente.

Al usar el portal para crear CGV, el parámetro se rellena automáticamente para tener "null" como valor. Si no cambia este valor, se muestra un mensaje de error en el portal, que indica: "El nuevo valor del grupo de configuración no coincide con el esquema; edite los valores".

Captura de pantalla del portal donde hay un mensaje de error porque los valores del grupo de configuración no coinciden con el esquema del grupo de configuración.

Para corregir este error, cambie "null" a null en las CGV.

Por ejemplo, originalmente tiene el valor "null":

"serviceAccount_name": "null",

Que se debe cambiar al valor null.

"serviceAccount_name": null,