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

快速入门:将 Nginx 容器发布为容器化网络功能 (CNF)

本快速入门介绍了如何使用 az aosm Azure CLI 扩展创建和发布基本网络功能定义。 其目的是演示发布服务器 Azure 运营商 Service Manager (AOSM) 资源的工作流。 此处介绍的基本概念旨在帮助用户构建更令人兴奋的服务。

先决条件

创建输入文件

创建用于发布网络功能定义的输入文件。 执行以下命令,以生成网络功能定义 (NFD) 的输入配置文件。

az aosm nfd generate-config --definition-type cnf

执行上述命令将生成 cnf-input.jsonc 文件。

注意

编辑 cnf-input.jsonc 文件。 将其替换为以下示例中所示的值。 将文件另存为 input-cnf-nfd.jsonc

如果使用现有资源组,请更改 publisher_resource_group_name 字段以匹配它。

提示

可以在 AOSM CLI 中将多个容器注册表用作映像的源。 要从这些注册表复制的映像将根据 helm 包架构自动选择。 源注册表是在 cnf-input.jsonc 文件的 image_sources 列表中配置的。

使用 ACR 时,你必须在 ACR 上具有“读取者”和“AcrPull”角色。 使用非 ACR 注册表时,在运行 az aosm nfd build 命令之前,必须先运行 docker login 以向每个专用注册表进行身份验证。 在本快速入门中,我们使用 docker.io 作为映像源注册表。 这是一个公共注册表,不要求进行身份验证。

下面是示例 input-cnf-nfd.jsonc 文件:

{
  // Azure location to use when creating resources e.g uksouth
  "location": "uksouth",
  // Name of the Publisher resource you want your definition published to.
  // Will be created if it does not exist.
  "publisher_name": "nginx-publisher",
  // Resource group for the Publisher resource.
  // Will be created if it does not exist.
  "publisher_resource_group_name": "nginx-publisher-rg",
  // Name of the ACR Artifact Store resource.
  // Will be created if it does not exist.
  "acr_artifact_store_name": "nginx-nsd-acr",
  // Name of NF definition.
  "nf_name": "nginx",
  // Version of the NF definition in 1.1.1 format (three integers separated by dots).
  "version": "1.0.0",
  // 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": ["docker.io"],
  // List of Helm packages to be included in the CNF.
  "helm_packages": [
    {
      "name": "nginxdemo",
      "path_to_chart": "nginxdemo-0.3.0.tgz",
      "default_values": ""
    }
  ]
}
  • publisher_name - 要将定义发布到的发布服务器资源的名称。 如果它尚不存在,则已创建。
  • publisher_resource_group_name - 发布服务器资源的资源组。 如果它尚不存在,则已创建。
  • acr_artifact_store_name - Azure 容器注册表 (ACR) 项目存储资源的名称。 如果它尚不存在,则已创建。
  • location - 创建资源时要使用的 Azure 位置。
  • nf_name - NF 定义的名称。
  • version - A.B.C 格式的 NF 定义版本。
  • image_sources - 从中提取映像的注册表列表。
  • helm_packages
    • name - Helm 包的名称
    • path_to_chart - Helm 图表在本地磁盘上的文件路径。 接受 .tgz、.tar 或 .tar.gz。 即使在 Windows 上运行,也可以使用 Linux 斜杠 (/) 文件分隔符。 该路径应该是绝对路径或相对于 cnf-input.jsonc 文件位置的路径。
    • default_values - 本地磁盘上 YAML 值文件的文件路径(绝对路径或相对于 cnf-input.jsonc),而不是 helm 图表中存在的 values.yaml 文件。
    • depends_on - 此包所依赖的 Helm 包的名称。 如果没有依赖项,请保留为空数组。

生成网络功能定义 (NFD)

若要构造网络功能定义 (NFD),请启动构建过程。

az aosm nfd build -f input-cnf-nfd.jsonc --definition-type cnf

Az CLI AOSM 扩展生成名为 cnf-cli-output 的目录。 此目录包含 BICEP 文件,用于定义发布 NFDV 所需的 AOSM 资源,以及将映像部署到 AOSM 托管存储所需的映像。 检查生成的文件,以便更好地了解网络功能定义 (NFD) 结构。

目录/文件 说明
nfDefinition/deployParameters.json 定义从该网络功能定义版本 (NFDV) 创建网络功能 (NF) 所需的部署参数的架构。
nfDefinition/nginxdemo-mappings.json 将网络功能定义版本 (NFDV) 的部署参数映射到 helm 图表所需的值。
nfDefinition/deploy.bicep 用于创建网络功能定义版本 (NFDV) 本身的 bicep 模板。
artifacts/artifacts.json NF 所需的 helm 包和容器映像的列表。
artifactManifest/deploy.bicep 用于创建项目清单的 bicep 模板。
base/deploy.bicep 用于创建发布者、网络函数定义组和项目存储资源的 Bicep 模板

发布网络功能定义并上传项目

执行以下命令以发布网络功能定义 (NFD) 并上传关联的项目:

注意

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

注意

发布者名称在区域中必须唯一。 配置文件示例中定义的“nginx-publisher”很可能已经存在。

如果出现错误提示“在提供的区域中已经存在名称为“nginx-publisher”的专用发布者资源”,请编辑配置文件中的 publisher_name 字段,使其具有唯一性(例如添加一个随机字符串后缀),重新运行 build 命令(如上),然后重新运行此 publish 命令

如果继续创建网络服务设计,则需要在 resource_element_templates 数组中使用这个新的发布者名称。

az aosm nfd publish -b cnf-cli-output --definition-type cnf

命令完成后,检查发布服务器资源组中的资源,以查看创建的组件和项目。

后续步骤