NSX Advanced Load Balancer 控制器 集群实例通常需要从不同于出厂默认设置的通用初始单控制器配置进行部署。为此,可以创建一个包含所需对象定义的 JSON 文件,然后使用该文件部署后续控制器,这些控制器可以作为主节点添加从属节点以形成集群。  您将拥有一组相同初始化的控制器集群,可根据需要对这些集群进行个性化设置。

创建 setup.json

在大多数情况下,可按照 NSX Advanced Load Balancer REST API 一节中所述来创建这些对象。

以下示例通过将 8.8.8.8 添加到 DNS 配置来更新系统配置:

{
    "SystemConfiguration": [
        {
            "dns_configuration": {
                "search_domain": "",
                "server_list": [
                    {
                        "type": "V4",
                        "addr": "8.8.8.8"
                    }
                ]
            }
        }
    ]
}

对于复杂对象(如 SSLKeyAndCertificate 对象),可以通过对两个配置文件运行 diff 命令来创建 JSON 文件。在典型的部署中,建议在测试控制器环境中生成 setup.json。然后,可将该生成的文件用作模板以进行实际部署。可以使用 export CLI 命令生成 NSX Advanced Load Balancer 控制器 配置快照。

> export configuration file before.cfg
Please enter the passphrase to encrypt configuration:
Downloaded the attachment to before.cfg
Completed writing the export configuration to before.cfg

根据需要,使用 UI 或 CLI 配置对象。

> export configuration file after.cfg
Please enter the passphrase to encrypt configuration:
Downloaded the attachment to after.cfg
Completed writing the export configuration to after.cfg

除此之外,可以使用 Python 脚本进行配置比较。NSX Advanced Load Balancer 已明确编写为自定义另一个控制器的初始配置。

/opt/avi/scripts/diff_config.py -f before.cfg -t after.cfg > setup.json

使用 User 对象创建 setup.json 时,可以使用以下代码加密用户密码。

/opt/avi/scripts/avi_passwd_tool.py --password admin --salt fF6ngAb3pvPgpbkdf2_sha256$100000$fF6ngAb3pvPg$ijkEue1M9fR/qsLVgzvPe7N0VvOxIjDiJVmK9NIx+0Q=$6$fF6ngAb3pvPg$CqAKtNRZtgXtJchrPmoxUgdLFM7rFGmta1tWb7sobQI4iSZAY2QuAOBNtboVGrmDYPMCvqXXH6lARr9RedCJT.

使用 setup.json 进行部署

在使用 Python 脚本创建的 setup.json 文件部署控制器之前,建议先进行配置备份。可使用以下命令创建现有配置的加密备份。

/opt/avi/python/bin/portal/manage.py export_configuration --file ~/setup-old.json --passphrase secret

对于 Mesos/裸机部署

setup.json 复制到控制器容器中挂载为 /vol 的主机中的持久目录。如果使用 avi_baremetal 脚本,则默认位置为主机上的 /opt/avi/controller/data。将控制器部署为容器时,可以将 setup.json 作为附加参数传递到 avi_baremetal_setup.py 脚本。例如:

./avi_baremetal_setup.py -c -cc 4 -cm 12 -i 10.10.22.108 -m 10.10.22.108 --setup-json /root/configs/avi-setup.json

对于作为虚拟机的控制器部署

等待控制器启动。将配置文件放置在控制器上以作为 /var/lib/avi/etc/setup.json(记下文件名)。重新引导或全新启动后,NSX Advanced Load Balancer 控制器 将使用提供的 setup.json 文件自行进行配置。

reboot

对于 OpenStack 部署

如果 setup.json 大小在允许的限制内,UserData 配置大小将限制为 48 Kb。

># cfgdrv userdata
>nova boot --config-drive true --image avicontroller --key-name mykey --flavor 4 --user-data /root/my-avi-config.json --nic net-id=7402bf4f-240f-4172-99c1-90000ea45f86 avicontrollers

># metasvc userdata
>nova boot --config-drive false --image avicontroller --key-name mykey --flavor 4 --user-data /root/my-avi-config.json --nic net-id=7402bf4f-240f-4172-99c1-90000ea45f86 avicontrollers

如果 setup.json 大小超出允许的限制,则可以在部署阶段上载并引用 setup.json。

UserData 可以使用“url”或“file”标记引用该文件。以下是使用 URL 的 my-avi-config-url.json 示例。

{
 "META": {
     "init_config": {
         "url": "https://s3-us-west-2.amazonaws.com/avi-controller-configs/linuxserver-awsipam-setup.json"
     }
   } 
}

以下是使用文件路径的 my-avi-config-url.json 示例。

{
  "META": {
    "init_config": {
      "file": "/vol/linuxserver-awsipam-setup.json"     
    }
  } 
}

以下是部署示例。

># cfgdrv userdata indirection
>nova boot --config-drive true --image avicontroller --key-name mykey --flavor 4 --user-data /root/my-avi-config-url.json --nic net-id=7402bf4f-240f-4172-99c1-90000ea45f86 --min-count=3 --max-count=3 avicontrollers

># metasvc userdata indirection
nova boot --config-drive false --image avicontroller --key-name mykey --flavor 4 --user-data /root/my-avi-config-url.json --nic net-id=7402bf4f-240f-4172-99c1-90000ea45f86 --min-count=3 --max-count=3 avicontrollers

对于 AWS 部署

UserData 配置大小限制为 16 Kb。如果 setup.json 大小在允许的限制内,请在从 AWS Web 控制台启动期间将 my-avi-config.json 剪切并粘贴到 user-data 部分中。

# metasvc userdata  ec2-run-instances ami-b7ea27d7 -f /root/my-avi-config.json -t c4.2xlarge -s subnet-62f1b707 -g sg-642d8d02

如果 setup.json 大小超出允许的限制,请在从 AWS Web 控制台启动期间将 my-avi-config-url.json 剪切并粘贴到 user-data 部分中。

# metasvc userdata indirection ec2-run-instances ami-b7ea27d7 -f /root/my-avi-config-url.json -t c4.2xlarge -s subnet-62f1b707 -g sg-642d8d02

my-avi-config-url.json 采用的格式与 OpenStack 部分中所述的格式类似。以下是针对 S3 存储桶的 my-avi-config-url.json 文件示例。

{
  "META": {
    "init_config": {
      "s3": "avi-controller-configs/linuxserver-awsipam-setup.json"
    }
  } 
}

setup.json 上载到 S3 存储桶:

  • 公用:使用 url 样式或 s3 样式

  • 专用(在虚拟机上通过 RBAC):使用 s3 样式。虚拟机角色必须允许 s3:GetObject 操作,才能使用 IAM 通过 s3-get 命令获取对象。

  • 专用(在 S3 存储桶上通过 RBAC):使用 s3 样式。虚拟机角色必须拥有 AWS 访问权限。S3 存储桶必须拥有帐户、用户或虚拟机角色的权限才能下载对象。

存储桶策略示例:

{
   "Version": "2012-10-17",
   "Statement": [
     {
       "Sid": "AddPerm",
       "Effect": "Allow",
       "Principal": {
         "AWS": [
           "arn:aws:iam::139284885014:role/BM-AviController-Role",
           "arn:aws:iam::139284885014:root"
          ]
        },
       "Action": "s3:*",
       "Resource": "arn:aws:s3:::avi-controller-configs/*"
     }
   ]
 }

对于 Azure 部署

可通过两种方法在 Azure 环境中进行初始配置:

  • 使用 Azure CLI

  • 使用 ARM(Azure 资源管理器)模板

使用 Azure CLI

如果使用 Azure CLI 部署 NSX Advanced Load Balancer 控制器,则可以在部署期间提供 JSON 文件。

az vm create --resource-group rahulr-jenkins-resource-group --location centralus --image avi-networks:avi-vantage-adc:avi-vantage-adc-byol:17.2.7 --name Avi-Test-Controller --size Standard_F8s --subnet /subscriptions/<subscription_id>/resourceGroups/<resource_group_name>/providers/Microsoft.Network/virtualNetworks/<vnet_name>/subnets/rahulr-subnet --public-ip-address "" --nsg "" --custom-data ./initial_config.json

使用 Azure ARM 模板

如果使用 ARM 模板部署 NSX Advanced Load Balancer 控制器,则会在 Azure 门户的自定义部署页面上以自定义数据形式提供 JSON 数据。导航到主页 > 模板 > avi-cluster-managed-disks-marketplace > 自定义部署



自定义数据字段中使用所需的 JSON 模板。作为参考,以下 JSON 模板用于将 8.8.8.8 添加到 DNS 配置中。复制下面提供的 JSON 配置,然后将其添加到 ARM 模板的自定义数据字段中。

{
    "SystemConfiguration": [
        {
            "dns_configuration": {
                "search_domain": "",
                "server_list": [
                    {
                        "type": "V4",
                        "addr": "8.8.8.8"
                    }
                ]
            }
        }
    ]
}