你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
快速入门:将 Nginx 容器发布为容器化网络功能 (CNF)
本快速入门介绍了如何使用 az aosm
Azure CLI 扩展创建和发布基本网络功能定义。 其目的是演示发布服务器 Azure 运营商 Service Manager (AOSM) 资源的工作流。 此处介绍的基本概念旨在帮助用户构建更令人兴奋的服务。
先决条件
需要一个具有活动订阅的 Azure 帐户。 如果你没有 Azure 订阅,请按照此处的说明免费开始创建帐户,然后再开始。
你在其中拥有“参与者”角色或对此订阅拥有“参与者”角色的一个现有资源组,以便 AOSM CLI 扩展可以创建资源组。
创建输入文件
创建用于发布网络功能定义的输入文件。 执行以下命令,以生成网络功能定义 (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
命令完成后,检查发布服务器资源组中的资源,以查看创建的组件和项目。