本节介绍了自定义 DNS 的 AWS 多可用区支持。

Infoblox DNS 配置文件支持为 AWS 可用区中定义的虚拟服务添加多个记录,并且还需要进行基于状态的注册以保持高可用性。可以通过以下方法实现该目的:

  • 自定义 DNS - 多 VIP 和多 FQDN 支持

  • 控制脚本 - 基于运行状态的 DNS 注册

自定义 IPAM DNS 配置文件

NSX Advanced Load Balancer 可以通过自定义 IPAM/DNS 配置文件功能使用自定义 IPAM/DNS 脚本,以与任何 API 驱动的第三方 IPAM/DNS 提供程序集成在一起。自定义 IPAM/DNS 完全是由用户可自定义的脚本驱动的,从而提供更高的灵活性。

在创建新的虚拟服务时,将使用自定义 IPAM/DNS 配置文件和脚本通过 IPAM/DNS 提供程序自动创建 IPAM/DNS 记录。

有关更多信息,请参见 NSX Advanced Load Balancer 上的自定义 DNS 配置文件

自定义 DNS 脚本

Infoblox DNS 提供程序的自定义 DNS 脚本支持以下功能:

  1. 多 VIP 功能

  2. 多 FQDN 功能

  3. 所有虚拟服务类型,例如 V4、V6 和 V4_V6 类型

注:

仍然支持在该版本之前编写的自定义 DNS 配置文件脚本。不过,您必须使用最新版本的脚本才能利用新添加的功能。

脚本必须定义了所需的所有函数和异常类;否则,系统在创建 DNS 配置文件期间显示以下错误消息:

“自定义 DNS 配置文件脚本缺少所需的函数/异常类 {function_or_exception_names}”(Custom DNS profile script is missing required functions/exception classes {function_or_exception_names})。

以下是较新版本的脚本所需的函数:

  • CreateOrUpdateDnsRecords

  • DeleteDnsRecords

以下是较新版本的脚本所需的异常类:

  1. CustomDnsAuthenticationErrorException

  2. CustomDnsRecordNotFoundException

  3. CustomDnsRecordAlreadyExistsException

  4. CustomDnsGeneralException

建议使用 logger_name(属于 auth_params)记录脚本日志。将创建租户特定的调试日志文件以保存脚本中的日志语句。

  • 对于管理员租户 - /var/lib/avi/log/custom_dns_script.log

  • 对于非管理员租户 - /var/lib/avi/log/custom_dns_script_<tenant_name>.log

可以在以下位置中找到自定义 DNS 配置文件的 NSX Advanced Load Balancer 日志:/opt/avi/log/portal-webapp.log

自定义 DNS 工作流

以下是自定义 DNS 工作流:

  1. 创建一个脚本对象。

    1. 导航到模板 > 自定义 IPAM/DNS,单击创建并上载一个 Python 脚本,该脚本提供一些函数以在 DNS 提供程序中执行 CRUD 操作。



    2. 添加所需的脚本参数。例如,用户名、密码、API 版本、提供程序服务器地址。

  2. 创建 DNS 配置文件。

    1. 导航到模板 > IPAM/DNS 配置文件,然后单击创建



    2. 创建一个自定义 DNS 类型的 DNS 配置文件。

    3. 附加在步骤 1 中创建的脚本对象。

    4. 添加 usable_domain

  3. 将 DNS 配置文件附加到云。



用于基于状态的 DNS 注册的控制脚本

控制脚本是由警示操作启动的,这些操作是由系统中的事件触发的。

Python 脚本定义一些函数以根据 VIP 运行状态注册或取消注册 DNS 记录。

Infoblox 的控制脚本定义以下函数:

  • register_dns_records - 在触发 VIP_UP 警示时,为 VIP 注册 DNS 记录。

  • deregister_dns_records - 在触发 VIP_DOWN 警示时,为 VIP 取消注册 DNS 记录。

控制脚本的云级隔离

控制脚本的默认行为是,为所有云中定义的所有虚拟服务调用该脚本。

要将控制脚本用于附加了自定义 DNS 配置文件的特定云,作为一种解决办法,您可以将控制脚本中定义的 cloud_uuid 变量设置为特定的云 UUID,如下所示:

cloud_uuid = <cloud_uuid>

例如,

cloud_uuid = "cloud-5581b2a1-222f-4b0e-b657-2d9668091f29"

默认情况下,cloud_uuidNone

您可以通过以下方法获取云 UUID:

  1. CLI - show_cloud

  2. REST API - /api/cloud

注:

已知生成事件和触发警示之间存在 90 秒的延迟加上处理时间。

控制脚本工作流

以下是控制脚本的工作流:

  1. 上载控制脚本

    1. 导航到模板 > 脚本 > ControlScript,然后单击创建以上载脚本。



  2. 设置警示选项

    1. 导航到操作 > 警示操作,然后单击创建

    2. 控制脚本字段下面,选择在步骤 1 中创建的脚本对象。



  3. 设置警示配置

    1. 导航到操作 > 警示配置,然后单击创建

    2. 提供以下详细信息:

      1. 提供警示配置的名称,例如 operstate_customdns_ib_vip_down

      2. 限制警示设置为 0(默认为 600 秒)。值为 0 表示没有基于时间的限制。只能在指定的时间范围内触发一次警示。

      3. 事件发生设置为 VIP 关闭

      4. 警示操作下面,选择在步骤 2 中创建的警示操作。



    3. 对于 VIP 启动事件,重复该步骤。

注:

在生成事件后,预计在执行警示操作之前存在 90 秒的延迟。

脚本路径

要访问这些文件,您可以使用 SSH 或 SCP 从控制器中提取这些文件。

脚本

工作流

位置

用于多 VIP 和多 FQDN 支持的控制脚本

自定义 DNS 工作流

/opt/avi/python/lib/custom_dns/custom_dns_script_infoblox.py

用于基于状态的 DNS 注册的控制脚本

控制脚本工作流

/opt/avi/python/lib/custom_dns/operstate_controlscript_infoblox.py

有关到控制器的 SSH 连接的更多信息,请参见“访问 NSX Advanced Load Balancer CLI 的常见问题解答”。