你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

将用于在 Azure 运营商关系上实现部署的虚拟化网络功能 (VNF) 加入 Azure 运营商服务管理器 (AOSM)

在本操作指南中,网络功能发布者和服务设计者将了解如何使用 Azure CLI AOSM 扩展将虚拟化网络功能加入 AOSM。 随后可以将该 VNF 部署在 Azure 运营商关系上。 加入是多步骤的进程。 满足先决条件后,将使用 Azure CLI AOSM 扩展来实现以下目标:

  1. 生成 BICEP 文件,该文件会定义网络功能定义 (NFD) 组和版本。
  2. 发布 NFD 并将 VNF 映像上传到项目存储(由 AOSM 管理的 Azure 容器注册表 (ACR))。
  3. 将你发布的 NFD 添加到定义网络服务设计组 (NSD) 和版本的 BICEP 文件中。
  4. 发布 NSD。

先决条件

注意

强烈建议在将 VNF 加入 AOSM 之前测试 VM 部署是否能够在 Azure 运营商关系实例上成功运行。

Azure 运营商关系虚拟机 (VM) 映像和 Azure 资源管理器 (ARM) 模板

  • 你已创建 Azure 运营商关系虚拟机的映像。 此映像必须在 ACR 中可用。

  • 你已创建用于部署 Azure 运营商关系虚拟机的 ARM 模板

  • VM ARM 模板(适用于 AzureCore 和 Azure 运营商关系)只能部署来自以下资源提供程序的 ARM 资源

    • Microsoft.Compute
    • Microsoft.Network
    • Microsoft.NetworkCloud
    • Microsoft.Storage
    • Microsoft.NetworkFabric
    • Microsoft.Authorization
    • Microsoft.ManagedIdentity
  • VNF ARM 模板应部署一台虚拟机。 通过在 NSDV 中加入 NFDV 的多个实例,可以部署多个 VM。

配置权限

  • 需要在订阅中使用参与者角色才能创建资源组,或创建具有参与者角色的现有资源组。
  • 对于包含映像的源 ACR,需获配 Reader/AcrPull 角色。
  • 对于包含 AOSM 管理的项目存储的订阅,需获配 ContributorAcrPush 角色。 这些权限允许 Azure CLI AOSM 扩展执行 ACR 到 ACR 的直接复制。 直接复制是将映像从一个 ACR 传输到另一个 ACR 的最快方法。
    • 贵公司策略可能会阻止拥有订阅范围的权限。 az aosm nfd publishaz aosm nsd publish 命令中提供的 --no-subscription-permissions 参数使用从 AOSM 服务派生的严格范围权限来协调往返于本地计算机的两步复制。 此两步复制速度较慢,但不需要订阅范围的权限。

下载并安装 Azure CLI

若要在本地安装 Azure CLI,请参阅如何安装 Azure CLI

要登录 Azure CLI,请使用 az login 命令并完成终端中显示的提示以完成身份验证。 有关更多登录选项,请参阅使用 Azure CLI 登录

注意

如果在 Windows 或 macOS 上运行,请考虑在 Docker 容器中运行 Azure CLI。 有关详细信息,请参阅如何在 Docker 容器中运行 Azure CLI。 还可以在 Azure Cloud Shell 中使用 Bash 环境。 有关详细信息,请参阅启动 Cloud Shell 以在 Azure Cloud Shell 中使用 Bash 环境。

Helm 和 Docker 引擎

  • 在主机上安装 Helm CLI。 必须使用 Helm v3.8.0 或更高版本。
  • 在主机上安装 Docker

安装 AOSM CLI 扩展

Az CLI AOSM 扩展需要 2.54.0 或更高版本的 Azure CLI。

  1. 运行 az version 以查看安装的版本和依赖库。
  2. 运行 az upgrade 以升级到 Azure CLI 的当前版本。

使用此命令安装 AOSM CLI 扩展:

az extension add --name aosm

构建网络功能定义组和版本

本部分在工作目录中创建一个名为 vnf-cli-output 的文件夹,其中包含 AOSM 资源的 BICEP 模板(用于定义网络功能定义组和版本)以及项目存储。 这些资源最终将包含在网络服务设计中

  1. 生成 VNF 的 Azure CLI AOSM 扩展输入文件。

    az aosm nfd generate-config --definition-type vnf-nexus --output-file <filename.jsonc>
    
  2. 打开在上一步中生成的输入文件,并使用内联注释输入所需的值。 此示例显示的是针对虚构的 Contoso VNF 的 Az CLI AOSM 扩展输入文件,此文件会在 Azure 运营商关系上运行。

    注意

    默认情况下,Azure CLI AOSM 扩展仅公开必需的参数,而不会在输入 ARM 模板中公开默认值。 可以将 expose_all_parameters 设置为 true 以公开网络功能定义版本 (NFDV) 和配置组架构 (CGS) 中的所有 ARM 模板参数。 有关详细信息,请参阅使用 AOSM CLI 扩展公开的参数

    {
        // Azure location to use when creating resources e.g uksouth
        "location": "eastus",
        // Name of the Publisher resource you want your definition published to.
        // Will be created if it does not exist.
        "publisher_name": "contoso",
        // Resource group for the Publisher resource.
        // Will be created if it does not exist.
        "publisher_resource_group_name": "contoso-vnf",
        // Name of the ACR Artifact Store resource.
        // Will be created if it does not exist.
        "acr_artifact_store_name": "contoso-vnf-artifact-store",
        // Name of the network function.
        "nf_name": "contoso-vnf",
        // Version of the network function definition in 1.1.1 format (three integers separated by dots).
        "version": "1.0.0",
        // If set to true, all NFD configuration parameters are made available to the designer, including optional parameters and those with defaults.
        // If not set or set to false, only required parameters without defaults will be exposed.
        "expose_all_parameters": false,
        // ARM template configuration. The ARM templates given here would deploy a VM if run. They will be used to generate the VNF.
        "arm_templates": [
            {
                // Name of the artifact. Used as internal reference only.
                "artifact_name": "contoso-vnf",
                // Version of the artifact in 1.1.1 format (three integers separated by dots).
                "version": "1.0.0",
                // File path (absolute or relative to this configuration file) of the artifact you wish to upload from your local disk.
                // Use Linux slash (/) file separator even if running on Windows.
                "file_path": "/home/contoso-vnf/contoso-vnf-arm-template.json"
            }
        ],
        // List of images to be pulled from the acr registry.
        // You must provide the source acr registry, the image name and the version.
        // For example: 'sourceacr.azurecr.io/imagename:imageversion'.
        "images": ["contoso-vnf.azurecr.io/contosovnf:1.0.0"]
    }```
    
    
  3. 执行以下命令以构建网络功能定义组和版本。

az aosm nfd build --definition-type vnf-nexus --config-file <filename.jsonc>

发布网络功能定义组和版本

这一步会创建定义网络功能定义的 AOSM 资源以及将用于存储网络功能的 VM 映像的项目存储。 这一步还可以通过直接从源 ACR 复制映像,将映像上传到项目存储,或者,如果你在订阅范围内不具备 ContributorAcrPush 角色,则可以通过以下方法完成上传:在本地重新标记 docker 映像,然后使用 AOSM 服务生成的权限范围严格的凭据将这些映像上传到项目存储。

  1. 执行以下命令以发布网络功能定义组和版本。 如果你在订阅范围内不具备 ContributorAcrPush 角色,请在命令中加入 --no-subscription-permissions
az aosm nfd publish --build-output-folder vnf-cli-output --definition-type vnf

可以查看文件夹和文件结构,并按需进行修改。

构建网络服务设计组和版本

本部分在工作目录中创建一个名为 nsd-cli-output 的文件夹。 此文件夹包含定义网络服务设计组和版本的 AOSM 资源的 BICEP 模板。 此网络服务设计是站点网络服务资源中使用的模板,用于部署在上一部分中加入的网络功能。

  1. 生成 Azure CLI AOSM 扩展 NSD 输入文件。

    az aosm nsd generate-config --output-file <nsd-output-filename.jsonc>
    
  2. 打开在上一步中生成的输入文件,并使用内联注释输入所需的值。 生成的输入文件包含 ArmTemplate 类型的附加 resource_element_type。 加入 VNF 时不需要这样做;可以将其删除。 此示例显示了虚构的 Contoso NSD 的 Az CLI AOSM 扩展输入文件,该文件可用于将虚构的 Contoso VNF 部署到 Azure 运营商关系实例。

    {
        // Azure location to use when creating resources e.g uksouth
        "location": "eastus",
        // Name of the Publisher resource you want your definition published to.
        // Will be created if it does not exist.
        "publisher_name": "contoso",
        // Resource group for the Publisher resource.
        // Will be created if it does not exist.
        "publisher_resource_group_name": "contoso-vnf",
        // Name of the ACR Artifact Store resource.
        // Will be created if it does not exist.
        "acr_artifact_store_name": "contoso-vnf-artifact-store",
        // Network Service Design (NSD) name. This is the collection of Network Service Design Versions. Will be created if it does not exist.
        "nsd_name": "contoso-vnf-nsd",
        // Version of the NSD to be created. This should be in the format A.B.C
        "nsd_version": "1.0.0",
        // Optional. Description of the Network Service Design Version (NSDV).
        "nsdv_description": "An NSD that deploys the onboarded contoso-vnf NFD",
        // List of Resource Element Templates (RETs).
        // There must be at least one NF RET.
        // ArmTemplate RETs are optional. Delete if not required.
        "resource_element_templates": [
            {
                // Type of Resource Element. Either NF or ArmTemplate
                "resource_element_type": "NF",
                "properties": {
                    // The name of the existing publisher for the NSD.
                    "publisher": "contoso",
                    // The resource group that the publisher is hosted in.
                    "publisher_resource_group": "contoso-vnf",
                    // The name of the existing Network Function Definition Group to deploy using this NSD.
                    // This will be the same as the NF name if you published your NFDV using the CLI.
                    "name": "contoso-vnf",
                    // The version of the existing Network Function Definition to base this NSD on.
                    // This NSD will be able to deploy any NFDV with deployment parameters compatible with this version.
                    "version": "1.0.0",
                    // The region that the NFDV is published to.
                    "publisher_offering_location": "eastus",
                    // Type of Network Function. Valid values are 'cnf' or 'vnf'.
                    "type": "vnf"
                }
            }
        ]
    }
    

    注意

    资源元素模板部分定义了 NSD 中包含的 NFD。 属性必须与传递给 az aosm nfd build 命令的输入文件中使用的属性相匹配。 这是因为 Azure CLI AOSM 扩展在构建 NSD 时会验证 NFD 是否已正确登录。

  3. 执行以下命令以构建网络服务设计组和版本 BICEP 模板。

az aosm nsd build --config-file <nsd-output-filename.jsonc>

可以查看文件夹和文件结构,并按需进行修改。

发布网络服务设计 (NSD)

此步骤创建用于定义网络服务设计组和版本的 AOSM 资源。 它还将 NSD 所需的项目上传到项目存储(网络功能 ARM 模板)。

  1. 执行以下命令以发布网络服务设计组和版本。 如果你在订阅范围内不具备 ContributorAcrPush 角色,请在命令中加入 --no-subscription-permissions
az aosm nsd publish --build-output-folder nsd-cli-output

现已拥有一整套 AOSM 发布者资源,可以执行运营商流了。

后续步骤