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

将容器化网络功能 (CNF) 加入 Azure 运营商服务管理器 (AOSM)

在本操作指南中,网络功能发布者和服务设计者将了解如何使用 Azure CLI AOSM 扩展将容器化网络功能加入 AOSM。 接着,可以将 CNF 部署到已连接 Azure Arc 的 Kubernetes 群集上,包括 Azure 运营商关系群集。

加入是多步骤的进程。 满足先决条件后,将使用 Azure CLI AOSM 扩展来实现以下目标:

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

先决条件

注意

强烈建议在已连接 Arc 的目标 Kubernetes 环境中测试 Helm 包的 helm install 是否成功。

配置权限

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

Helm 包

  • 要加入的 Helm 包必须存在于要从中执行 CLI 的计算机的本地存储中。
    • 默认情况下,Azure CLI AOSM 扩展将使用 helm 包中的 values.yaml 文件。 CLI 支持使用备用 values.yaml 覆盖此行为。 此备用文件必须存在于你执行 CLI 的计算机的本地存储上。

注意

强烈建议在 Helm 包中加入 helm 值的架构,并且当使用你在加入 AOSM 时打算使用的 value.yaml 运行 helm template 时,Helm 包模板应符合预期。

容器映像

  • 容器映像存在于现有 ACR 或支持 Docker API 的替代容器注册表中。 容器映像必须存储在源注册表中,映像结构需与 helm 图表中定义的映像位置相符。 有关要求,请参阅 CLI CNF 映像发现与上传
  • 运行任何 az aosm 命令之前,请使用 docker login 命令登录到托管容器映像的非 Azure 容器注册表。 如果使用 ACR,则不需要此步骤:Azure CLI AOSM 扩展将自动登录。

Helm 和 Docker 引擎

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

下载并安装 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 环境。

安装 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

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

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

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

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

    注意

    默认情况下,Azure CLI AOSM 扩展仅公开必需的参数,而不会在输入 values.yaml 中公开默认值。 可以将 expose_all_parameters 设置为 true 以公开网络功能定义版本 (NFDV) 和配置组架构 (CGS) 中的所有 helm 值。 有关详细信息,请参阅使用 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.
      // You should create this before running the publish command
      "publisher_resource_group_name": "contoso",
      // Name of the ACR Artifact Store resource.
      // Will be created if it does not exist.
      "acr_artifact_store_name": "contoso-artifact-store",
      // Name of NF definition.
      "nf_name": "contoso-cnf-nfd",
      // Version of the NF 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,
      // List of registries from which to pull the image(s).
      // For example ["sourceacr.azurecr.io/test", "myacr2.azurecr.io", "ghcr.io/path"].
      // For non Azure Container Registries, ensure you have run a docker login command before running build.
      "image_sources": ["contoso.azuercr.io/contoso", "docker.io"],
      // List of Helm packages to be included in the CNF.
      "helm_packages": [
          {
              // The name of the Helm package.
              "name": "contoso-helm-package",
              // The file path to the helm chart on the local disk, relative to the directory from which the command is run.
              // Accepts .tgz, .tar or .tar.gz, or an unpacked directory. Use Linux slash (/) file separator even if running on Windows.
              "path_to_chart": "/home/cnf-onboard/contoso-cnf-helm-chart-0-1-0.tgz",
              // The file path (absolute or relative to this configuration file) of YAML values file on the local disk which will be used instead of the values.yaml file present in the helm chart.
              // Accepts .yaml or .yml. Use Linux slash (/) file separator even if running on Windows.
              "default_values": "",
          }
      ]
    }
    
  3. 执行以下命令以构建网络功能定义组和版本 BICEP 模板。

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

可以查看文件夹和文件结构,并在必要时进行修改。

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

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

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

注意

如果使用的是 Windows,则必须在发布步骤中运行 Docker Desktop。

az aosm nfd publish --build-output-folder cnf-cli-output --definition-type cnf

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

本部分在工作目录中创建一个名为 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。 加入 CNF 时不需要这样做;可以将其删除。 结果应如下例所示。 此示例显示了虚构的 Contoso NSD 的 Az CLI AOSM 扩展输入文件,该文件可用于将虚构的 Contoso CNF 部署到 Arc 连接的 Nexus Kubernetes 群集。

    {
        // 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",
        // Name of the ACR Artifact Store resource.
        // Will be created if it does not exist.
        "acr_artifact_store_name": "contoso-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-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-cnf 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",
                    // 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-cnf-nfd",
                    // 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": "cnf"
                }
            }
        ]
    }
    

    注意

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

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

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

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

发布网络服务设计组和版本

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

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

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

后续步骤