Partilhar via


Problemas de extensão do Azure CLI Azure Operator Service Manager (AOSM)

Este documento contém uma lista de problemas comuns ao usar a extensão AOSM da CLI do Azure para funções de rede integradas e suas resoluções.

Problemas comuns

Editora já existe na região

Os nomes dos editores devem ser exclusivos dentro de uma região do Azure. Se vir o seguinte erro, o nome do editor que escolheu já está a ser utilizado:

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

Para resolver este erro:

Se você possui a editora, ela está em seu inquilino e deseja reutilizá-la:

O editor é definido no arquivo de configuração da extensão AOSM CLI. Os publisher_name campos e publisher_resource_group_name devem corresponder aos do editor existente e devem estar no locatário que você está usando para essa implantação.

Altere o publisher_resource_group_name no arquivo de configuração para que ele faça referência ao editor existente, execute novamente o comando correspondente build e, em seguida, execute novamente o publish comando.

Você não é proprietário do editor existente:

Use um novo nome de editor.

Falha no carregamento do artefato NSD (Network Service Design)

Carregamentos de artefatos usando az aosm nsd publish o comando podem falhar em raras ocasiões. A saída de erro neste 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'}]}]}

Para resolver este erro:

Opção 1. Confirme se você tem as Contributor atribuições e AcrPush de função na assinatura que deseja usar. Atribua-os se não o fizer. Se não for possível definir essa atribuição de função, execute o az aosm nsd publish comando com o --no-subscription-permissions parâmetro.

Opção 2. Se essas permissões não resolverem o problema, execute os seguintes comandos na nsd-cli-output/artifacts pasta criada pelo az aosm nsd build comando:

  • Crie o modelo ARM de função de rede a partir do arquivo BICEP gerado pela CLI
bicep build <nf-name>.bicep
  • Gere credenciais de token de mapa de escopo a partir do Manifesto de Artefato criado no az aosm nsd publish comando.

Importante

É necessário usar o Manifesto de Artefato criado no az aosm nsd publish comando. O modelo NF ARM só é declarado nesse manifesto, portanto, somente o token de mapa de escopo gerado por esse manifesto permitirá que você envie (ou extraia) o modelo NF ARM para o Repositório de Artefatos.

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>
  • Use o ORAS para carregar o modelo ARM da Função de Rede no Registro de Contêiner do Azure (ACR) gerenciado pelo AOSM. A <arm-template-version> tag de artefato deve estar no 1.0.0 formato.
oras push <aosm-managed-acr-name>.azurecr.io/Contoso-nsd:<arm-template-version> ./nsd-cli-output/artifacts/<nf-name>.json

Falhas de cópia entre locatários

A Extensão AOSM da CLI do Azure não oferece suporte nativo a cópias de imagem entre locatários. No entanto, é possível configurar seu ambiente CLI de uma forma que permita essa funcionalidade. O processo é definir a assinatura padrão do Azure para a assinatura que contém o ACR de origem, entrar no ACR de origem e executar todos os az aosm comandos com o --subscription parâmetro, definindo o valor para a assinatura de destino. As assinaturas de origem e de destino podem estar em locatários 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>

Configurações incorretas comuns

A implantação do Serviço de Rede de Site (SNS) falha quando a configuração do Site e da Versão de Design do Serviço de Rede (NSDV) não corresponde

As tentativas de criação do SNS falham se a propriedade nfvi do recurso Site não corresponder à propriedade nfvisFromSite do NSDV. O erro é

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

Neste exemplo, a propriedade NSDV nfvisFromSite contém:

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

A propriedade nfvi do recurso do site deve corresponder ao nome e ao tipo no 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>'
        }
      }
    ]
  }
}

O nfdvName no valor do grupo de configuração (CGV) não corresponde à versão de definição de função de rede (NFDV) publicada

Os esquemas de grupo de configuração gerados pela Extensão AOSM da CLI do Azure têm um parâmetro obrigatório chamado nfdvName. nfdvname é o nome do NFDV, que é uma cadeia de caracteres no 1.0.0 formato. Não é o nome da Função de Rede (NF) ou do Grupo de Definição de Função de Rede (NFDG). O exemplo a seguir mostra o uso correto.

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

Propriedade de valores CGV incorreta ao não expor parâmetros em um esquema de grupo de configuração (CGS)

Os esquemas de grupo de configuração gerados pela Extensão AOSM da CLI do Azure expõem um deployParameters campo que, por padrão, é uma matriz de objetos JSON. Há várias razões pelas quais você pode querer criar um CGV com um campo vazio deployParameters :

  • Você não tem nenhuma configuração exposta no esquema do grupo de configuração e todos os valores são definidos nos valores padrão.yaml no gráfico Helm.
  • Você criou um esquema de grupo de configuração que inclui valores padrão e não deseja substituí-los.

Se você estiver criando um CGV com um campo vazio deployParameters , o valor do campo deverá ser uma matriz contendo um objeto JSON vazio.

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

AOSM retorna a seguinte mensagem de erro se o CGV contém uma matriz vazia (ou seja, []) em vez de uma matriz contendo um objeto vazio ([{}]).

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

Incompatibilidade entre a propriedade da imagem nos gráficos de leme e a localização no ACR de origem

A CLI do AOSM requer que as imagens em seu registro de origem estejam na mesma estrutura de repositório que está escrita no gráfico de leme. Por exemplo, uma imagem incluída em um gráfico de leme deve core/contoso-a:1.0.0 estar disponível no registro de origem em um caminho que termina em core/contoso-a:1.0.0. Falha ao carregar a imagem para o caminho correto no registro de origem faz com que az aosm nfd publish falhe com o seguinte erro.

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

Existem várias soluções disponíveis.

  • Edite seu gráfico de leme ou passe os caminhos da imagem em values.yaml e defina os caminhos da imagem para corresponder à estrutura do repositório no registro de origem.
  • Carregue as imagens para o seu registro de origem de modo que a concatenação de "image_sources" no cnf-input.jsonc arquivo e o caminho da imagem do gráfico de leme correspondam ao local carregado no registro de origem.
  • A CLI do AOSM armazena metadados para as imagens que descobre no cnf-cli-output/artifacts/artifacts.json. O caminho que a CLI do AOSM pesquisa no registro de origem é <registry_name>/<registry_namespace>/<artifact_name>/<artifact_version>. Você pode editar manualmente esse arquivo para que os valores correspondam à localização da imagem no ACR de origem.

CGVs não correspondem a CGS quando o parâmetro tem tipo nulo

Atualmente, o AOSM não oferece suporte null como um valor padrão no esquema deployParameters, o que significa que o valor null padrão também não é permitido em esquemas de grupo de configuração. Para contornar esse problema, a CLI do AOSM define o valor padrão para parâmetros do tipo null para ser a cadeia de caracteres "null", que permite que um NFDV publique com êxito.

Ao usar o portal para criar CGVs, seu parâmetro preenche automaticamente para ter "null" como valor. Se você não alterar esse valor, o Portal mostrará uma mensagem de erro, dizendo: "Novo valor do grupo de configuração não corresponde ao esquema - edite os valores."

Captura de tela do portal onde há uma mensagem de erro porque os valores do grupo de configuração não correspondem ao esquema do grupo de configuração.

Para corrigir esse erro, altere "null" para null nos CGVs.

Por exemplo, originalmente temos o valor "null":

"serviceAccount_name": "null",

Que deve ser alterado para o valor null.

"serviceAccount_name": null,