다음을 통해 공유


Azure CLI AOSM(Azure Operator Service Manager) 확장 문제

이 문서에는 Azure CLI AOSM 확장을 사용하여 네트워크 함수를 온보딩할 때 발생하는 일반적인 문제 목록과 해결 방법이 포함되어 있습니다.

일반적인 문제

지역에 게시자가 이미 있음

게시자 이름은 Azure 지역 내에서 고유해야 합니다. 다음 오류가 표시되면 선택한 게시자 이름이 이미 사용 중인 것입니다.

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

이 오류를 해결하려면 다음을 수행합니다.

게시자를 소유한 경우 테넌트에 있으며 이를 재사용하고자 합니다.

게시자는 AOSM CLI 확장 구성 파일에 정의됩니다. publisher_namepublisher_resource_group_name 필드는 기존 게시자의 필드와 일치해야 하며 이 배포에 사용하는 테넌트에 있어야 합니다.

기존 게시자를 참조할 수 있도록 구성 파일의 publisher_resource_group_name을(를) 변경하고 해당 build 명령을 다시 실행한 다음 publish 명령을 다시 실행합니다.

기존 게시자를 소유하고 있지 않습니다.

새 게시자 이름을 사용합니다.

NSD(네트워크 서비스 디자인) 아티팩트 업로드 실패

az aosm nsd publish 명령을 사용하는 아티팩트 업로드는 드물게 실패할 수 있습니다. 이 경우 오류 출력은 다음과 같습니다.

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

이 오류를 해결하려면 다음을 수행합니다.

옵션 1. 사용하려는 구독에 ContributorAcrPush에 대한 역할이 할당되었는지 확인 할당되지 않은 경우 해당 역할을 할당합니다. 이 역할 할당을 설정할 수 없는 경우 --no-subscription-permissions 매개 변수를 사용하여 az aosm nsd publish 명령을 실행합니다.

옵션 2. 이러한 권한으로 문제가 해결되지 않으면 az aosm nsd build 명령으로 만든 nsd-cli-output/artifacts 폴더에서 다음 명령을 실행합니다.

  • CLI에서 생성된 BICEP 파일에서 네트워크 함수 ARM 템플릿 빌드
bicep build <nf-name>.bicep
  • az aosm nsd publish 명령에서 만든 아티팩트 매니페스트에서 범위 맵 토큰 자격 증명을 생성합니다.

Important

az aosm nsd publish 명령에서 만든 아티팩트 매니페스트를 사용해야 합니다. NF ARM 템플릿은 해당 매니페스트에서만 선언되므로 이 매니페스트에서 생성된 범위 맵 토큰만 NF ARM 템플릿을 아티팩트 저장소에 푸시 또는 풀(pull)할 수 있습니다.

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>
  • ORAS를 사용하여 AOSM 관리형 ACR(Azure Container Registry)에 네트워크 함수 ARM 템플릿을 업로드합니다. <arm-template-version> 아티팩트 태그는 1.0.0 형식이어야 합니다.
oras push <aosm-managed-acr-name>.azurecr.io/Contoso-nsd:<arm-template-version> ./nsd-cli-output/artifacts/<nf-name>.json

테넌트 간 복사 실패

Azure CLI AOSM 확장은 기본적으로 테넌트 간 이미지 복사본을 지원하지 않습니다. 그러나 이 기능을 허용하는 방식으로 CLI 환경을 구성할 수 있습니다. 이 프로세스는 기본 Azure 구독을 원본 ACR이 포함된 구독으로 설정하고, 원본 ACR에 로그인한 다음, --subscription 매개 변수를 사용하여 모든 az aosm 명령을 실행하여 값을 대상 구독으로 설정하는 것입니다. 원본 및 대상 구독은 서로 다른 테넌트에 있을 수 있습니다.

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>

일반적인 구성 오류

사이트 및 NSDV(네트워크 서비스 디자인 버전) 구성이 일치하지 않으면 SNS(사이트 네트워크 서비스) 배포가 실패합니다.

사이트 리소스의 nfvi 속성이 NSDV의 nfvisFromSite 속성과 일치하지 않으면 SNS 만들기 시도가 실패합니다. 오류는 다음과 같습니다.

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

이 예제에서 NSDV nfvisFromSite 속성에는 다음이 포함됩니다.

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

사이트 리소스 nfvi 속성은 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>'
        }
      }
    ]
  }
}

CGV(구성 그룹 값)의 nfdvName이 게시된 NFDV(네트워크 함수 정의 버전)와 일치하지 않습니다.

Azure CLI AOSM 확장에서 생성된 구성 그룹 스키마에는 nfdvName이라는 필수 매개 변수가 있습니다. nfdvname1.0.0 형식의 문자열인 NFDV의 이름입니다. NF(네트워크 함수) 또는 NFDG(네트워크 함수 정의 그룹)의 이름이 아닙니다. 다음 예제에서는 올바른 사용을 보여 줍니다.

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

CGS(구성 그룹 스키마)에 매개 변수를 노출하지 않을 때 잘못된 CGV 값 속성

Azure CLI AOSM 확장에서 생성된 구성 그룹 스키마는 기본적으로 JSON 개체의 배열인 deployParameters 필드를 노출합니다. 빈 deployParameters 필드가 있는 CGV를 만들려는 이유가 몇 가지 있습니다.

  • 구성 그룹 스키마에 노출되는 구성이 없으며 모든 값이 Helm 차트의 기본값.yaml에 설정됩니다.
  • 기본값을 포함하는 구성 그룹 스키마를 만들었으며 이를 재정의하고 싶지 않습니다.

deployParameters 필드가 있는 CGV를 만드는 경우 필드 값은 빈 JSON 개체를 포함하는 배열이어야 합니다.

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

CGV에 빈 개체([{}])를 포함하는 배열 대신 빈 배열(즉, [])이 포함된 경우 AOSM은 다음 오류 메시지를 반환합니다.

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

Helm 차트의 이미지 속성과 원본 ACR의 위치 간 불일치

AOSM CLI를 사용하려면 원본 레지스트리의 이미지가 Helm 차트에 기록된 것과 동일한 리포지토리 구조에 있어야 합니다. 예를 들어 core/contoso-a:1.0.0로 helm 차트에 포함된 이미지는 core/contoso-a:1.0.0로 끝나는 경로의 원본 레지스트리에서 사용할 수 있어야 합니다. 원본 레지스트리의 올바른 경로에 이미지를 업로드하지 못하면 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"}}]}

여러 솔루션을 사용할 수 있습니다.

  • Helm 차트를 편집하거나 values.yaml의 이미지 경로를 전달하고 원본 레지스트리의 리포지토리 구조와 일치하도록 이미지 경로를 설정합니다.
  • cnf-input.jsonc 파일의 “image_sources”와 Helm 차트의 이미지 경로가 원본 레지스트리의 업로드된 위치와 일치하도록 이미지를 원본 레지스트리에 업로드합니다.
  • AOSM CLI는 cnf-cli-output/artifacts/artifacts.json에서 검색된 이미지에 대한 메타데이터를 저장합니다. 원본 레지스트리에서 AOSM CLI가 검색하는 경로는 <registry_name>/<registry_namespace>/<artifact_name>/<artifact_version>입니다. 값이 원본 ACR의 이미지 위치와 일치하도록 이 파일을 수동으로 편집할 수 있습니다.

매개 변수에 null 형식이 있는 경우 CGV가 CGS와 일치하지 않음

현재 AOSM은 deployParameters 스키마에서 기본값으로 null을 지원하지 않으므로 구성 그룹 스키마에서도 기본값 null이 허용되지 않습니다. 이 문제를 해결하기 위해 AOSM CLI는 null 형식의 매개 변수에 대한 기본값을 문자열 "null"(으)로 설정하여 NFDV가 성공적으로 게시할 수 있도록 합니다.

포털을 사용하여 CGV를 만들 때 매개 변수는 해당 값으로 "null"을 자동으로 채웁니다. 이 값을 변경하지 않으면 포털에 “새 구성 그룹 값이 스키마와 일치하지 않습니다. 값을 편집하세요.”라는 오류 메시지가 표시됩니다.

구성 그룹 값이 구성 그룹 스키마와 일치하지 않아 오류 메시지가 표시되는 포털의 스크린샷.

이 오류를 해결하려면 CGV에서 "null"null로 변경합니다.

예를 들어 원래 "null" 값은 다음과 같습니다.

"serviceAccount_name": "null",

null 값으로 변경해야 합니다.

"serviceAccount_name": null,