你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
Azure CLI Azure 运营商服务管理器 (AOSM) 扩展问题
本文档包含将 Azure CLI AOSM 扩展加入网络功能时的常见问题及其解决方案的列表。
常见问题
发布服务器已存在于区域中
Azure 区域中的发布服务器名称必须是唯一的。 如果看到以下错误,则表示所选的发布服务器名称已被占用:
Message: A private publisher resource with the name 'nginx-publisher' already exists in the provided region.
解决此问题的方法是:
如果你拥有发布服务器,它位于租户中,并且你希望重复使用它:
发布服务器在 AOSM CLI 扩展配置文件中定义。 publisher_name
和 publisher_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.
确认在要使用的订阅上具有 Contributor
和 AcrPush
角色分配。 如果没有,请分配。 如果无法设置此角色分配,请运行具有 --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
命令中创建的项目清单生成范围映射令牌凭据。
重要
需要使用在 az aosm nsd publish
命令中创建的项目清单。 NF ARM 模板仅在该清单中声明,因此只有此清单生成的范围映射令牌才允许将 NF ARM 模板推送(或拉入)到项目存储。
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'
- 安装 Open Container Initiative Registry as Storage (ORAS) 并登录 AOSM 管理的 ACR。 AOSM 管理的 ACR 名称可以在项目存储资源的 Azure 门户页面中找到。 用户名和密码可以在上一步的输出中找到。
oras login <aosm-managed-acr-name>.azurecr.io --username <username> --password <scope map token>
- 使用 ORAS 将网络功能 ARM 模板上传到 AOSM 管理的 Azure 容器注册表 (ACR)。
<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
的强制参数。 nfdvname
是 NFDV 的名称,它是 1.0.0
格式的字符串。 它不是网络功能 (NF) 或网络功能定义组 (NFDG) 的名称。 以下示例显示了正确用法。
{
"nsd-contoso": {
"nfdvName": "1.0.0",
"deployParameters": [
{}
],
"customLocationId": "<custom-location-arm-id>",
"managedIdentityId": "<managed-id-arm-id>"
}
}
在配置组架构 (CGS) 中不公开任何参数时,CGV 值属性不正确
Azure CLI AOSM 扩展生成的配置组架构公开了 deployParameters
字段,默认情况下,其是 JSON 对象的数组。 可能希望创建具有空 deployParameters
字段的 CGV 的原因如下:
- 配置组架构中没有公开配置,所有值都设置在 Helm 图标中的默认 values.yaml 中。
- 创建了包含默认值的配置组架构,但不想替代它们。
如果创建的 CGV 包含空 deployParameters
字段,那么字段值必须是包含空 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 图表中所写的存储库结构相同。 例如,helm 图表中作为 core/contoso-a:1.0.0
包含的映像必须在源注册表中以 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 不支持 null
作为 deployParameters 架构中的默认值,这表示配置组架构中也不允许使用默认值 null
。 为解决此问题,AOSM CLI 将 null 类型的参数默认值设置为字符串 "null"
,这使得 NFDV 可以成功发布。
当使用门户创建 CGV 时,参数会自动填充 "null"
作为其值。 如果不更改此值,门户将显示错误消息,称:“新配置组值与架构不匹配 - 请编辑这些值。”
要修复此错误,请在 CGV 中将 "null"
更改为 null
。
例如,最初我们有值 "null"
:
"serviceAccount_name": "null",
必须将其更改为值 null
。
"serviceAccount_name": null,