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

Azure 运营商服务管理器中的配置组最佳实践

本文提供了 Azure 操作员服务管理器指南,以优化配置组架构(CGS)的设计以及配置组值(CGV)的操作。 加入和部署 NF 时,网络功能(NF)供应商、电信运营商及其合作伙伴应牢记这些做法。

JSON 架构概述

JSON 架构是 Internet 工程任务组(IETF)标准,它提供应用程序所需的 JSON 数据的格式以及如何与之交互。 对 JSON 文档应用此类标准有助于跨 JSON 数据强制实施一致性和数据有效性。

JSON 架构用在哪里?

  • Azure 运营商服务管理器使用 JSON 架构表示法作为 CGS ConfigurationGroupSchemaPropertiesFormat 对象的 schemaDefinition 属性内的元架构。
  • 当运营商必须在站点网络服务 (SNS) 或 NF 实例化期间提供数据(JSON 值)时,Azure 运营商服务管理器允许设计者和发布者指定 JSON 架构。
  • Azure 操作员服务管理器允许元架构属性是可选的,也可以是必需属性。 如果属性被标记 required,则必须在 JSON 值中指定该属性。

支持哪些 JSON 关键字?

对于 CGS 元架构,Azure 操作员服务管理器基于类型实现对 JSON 标准关键字的支持:

  • 对于对象类型,关键字支持受筛选器策略的限制。 请参阅 JSON 架构参考中的 对象
  • 对于字符串类型,关键字支持不受限制或筛选。 请参阅 JSON 架构参考中的 字符串
  • 对于数字类型,关键字支持不受限制或筛选。 请参阅 JSON 架构参考中的 数值类型

可选字段和必填字段

通过包括一个 required 关键字(省略可选属性)将属性声明为可选属性。 如果未指定 required 关键字,则所有属性都被视为必需。 至少需要一个必需的属性类型才能支持可选属性类型。

{
"type": "object",
"properties": {
  "abc": {
    "type": "integer",
     "default": 30
  },
  "xyz": {
    "type": "string",
    "default": "abc123"
  }
 }
"required":  ["abc"]
} 

JSON 架构中的默认值

对于可选属性,Azure 操作员服务管理器实现处理默认值的自定义方法。 在 CGS 元架构中定义默认值时,Azure 运营商服务管理器会在输入 CGV 数据中缺少或未定义该属性的情况下使用该值。 当操作员不提供值时,Azure 操作员服务管理器验证器逻辑实质上会用默认值填充 CGV 值。

如何定义默认值

默认值必须在属性或数组的项内指定。 以下示例演示了整数和字符串属性类型的默认值:

{
"type": "object",
"properties": {
  "abc": {
    "type": "integer",
     "default": 30
  },
  "xyz": {
    "type": "string",
    "default": "abc123"
  }
 }
} 

定义默认值的规则

验证默认值时,将应用以下规则。 使用默认值来确保预期结果时,请考虑这些规则。

  • 不应将默认值应用于所需的属性。
  • 默认值是根据关键字首次出现的位置,从上到下的顺序进行评估。
  • 当输入 CGV 中存在属性值时,仅计算这些属性的子项作为默认值。
  • 当输入 CGV 中不存在属性值时,则会将其与任何子项一起计算,作为默认值。
  • 如果属性值是 object 类型,并且它及其键都不存在于输入 CGV 中,则不会计算对象的默认值。

CGS 注意事项

随着时间的推移,建议的最佳设计 CGS 方法已更改。

One-CGS 方法

初始推荐是为整个 NF 仅使用一个 CGS。 此方法将特定于站点、特定于实例和安全的参数合并到一组配置组对象中。 此方法避免了多个对象集,但服务有多个组件的情况除外。 许多合作伙伴使用此方法成功载入服务,仍受支持。

3-CGS 方法

现在,我们建议你将至少三个 CGS 用于整个 NF,方法是将参数组织到以下配置组集中:

  • 特定于站点的参数:示例包括 IP 地址和唯一名称。
  • 特定于实例的参数:示例包括超时和调试级别。
  • 特定于安全的参数:示例包括密码和证书。 使用特定于安全的参数,可以使用 Azure Key Vault 来存储安全值。

设计三个CGS对象集

在设计三CGS对象时,请考虑以下元架构指导原则:

  • 选择要公开的参数。

    经验法则是使用直接操作来公开这些参数集,例如某个计算层或 Helm 值。 使用此方法,而不是另一个代理所作用的参数,例如 cloudinit 用户数据。

  • 将参数分类为特定于站点、特定于实例和特定于安全的集合。

  • 定义必需参数与可选参数。 对于可选参数,请定义合理的默认值。

  • 确保参数不会在 CGS 对象之间重叠。

此示例展示一个 CGS 有效负载示例:

{ 
  "type": "object", 
  "properties": {
    "abc": { 
      "type": "integer", 
      "default": 30
    }, 
    "xyz": { 
      "type": "integer", 
      "default": 40
    },
    "qwe": {
      "type": "integer"
    }
   }
   "required": "qwe"
}

此示例显示了操作者传递的相应 CGV 负载:

{
"qwe": 20
}

此示例显示 Azure 操作员服务管理器生成的 CGV 有效负载:

{
"abc": 30,
"xyz": 40,
"qwe": 20
}

CGV 注意事项

在提交 CGV 资源创建之前,可以验证基础 YAML 或 JSON 文件的架构和值是否符合相应的 CGS 预期。 若要完成该验证,一个选项是使用适用于 Visual Studio Code 的 YAML 扩展。