使用 Designate 与 Neutron 和 Nova

Neutron 可以与 Designate 集成,为端口以及通过端口间接为 Nova 服务器实例提供自动 记录集 创建。本节将介绍如何使用此集成,以便在创建时为 Neutron 端口和 Nova 实例创建 Designate DNS 记录集

Neutron DNS 扩展

Neutron 中的 DNS 集成是可选的,并且必须由云管理员在 Neutron 配置文件中启用一个扩展,才能自动为 Neutron 和 Nova 资源分配 DNS 名称。您可以通过查询 Neutron 扩展 API 来检查是否启用了 DNS 集成扩展。

$ openstack extension list --network -f value -c Alias | grep dns-integration
dns-integration

必须启用以下扩展之一,才能允许 Neutron 以及通过 Neutron 的 Nova 自动在 Designate 中创建 DNS 记录集

  • dns-integration

  • dns-domain-ports (包含 dns-integration)

  • subnet-dns-publish-fixed-ip (包含 dns-integration 和 dns-domain-ports)

  • dns-integration-domain-keywords (包含所有其他扩展)

dns-integration

当启用 dns-integration 扩展时,以下 DNS 属性将通过 Neutron 提供

资源

dns_name

dns_domain

端口

网络

浮动 IP

dns-domain-ports

此外,如果在 Neutron 中启用了 dns-domain-ports 扩展,则可以指定 dns_domain 创建端口。此 dns_domain 将优先于网络的 dns_domain 设置。您可以通过查询 Neutron 扩展 API 来检查是否启用了 dns-domain-ports 扩展。

$ openstack extension list --network -f value -c Alias | grep dns-domain-ports
dns-domain-ports

启用 dns-domain-ports 扩展后,以下 DNS 设置将通过 Neutron 提供

资源

dns_name

dns_domain

端口

网络

浮动 IP

这两个扩展都对何时在 Designate 中创建 DNS 记录集 施加了一系列标准。

  • 必须在网络、端口或浮动 IP 上指定 dns_domain。如果网络和端口或浮动 IP 都指定了 dns_domain,则端口或浮动 IP 上指定的 dns_domain 将优先于网络上提供的 dns_domain

  • 网络必须将 router:external 字段设置为 False。

  • 网络类型必须是以下之一:FLAT、VLAN、GRE、VXLAN 或 GENEVE。

  • 对于 VLAN、GRE、VXLAN 或 GENEVE 网络,分段 ID 必须位于 Neutron ml2_confg 文件中配置的范围之外。例如,对于 VXLAN 网络,范围设置是 [ml2_type_vxlan] vni_ranges。

  • Designate 中 dns_domain区域 必须已经存在,并且创建 Nova 实例、端口或浮动 IP 的项目 ID 必须具有在 区域 中创建 记录集 的权限。

这些限制通常意味着管理员需要创建一个特殊的网络,该网络将允许在 Designate 中创建 记录集

如果未满足所有这些标准,Neutron 将在 Neutron 内部解析器中使用 Neutron 配置文件中指定的默认 dns_domain 创建 DNS 分配。当前的默认域是“openstacklocal”。

警告

如果创建 Nova 实例、端口或浮动 IP 的用户没有在 区域 中创建 记录集 的权限,或者 区域 在 Designate 中不存在,Neutron 将使用提供的 dns_domain 填充 dns_assignment 字段创建端口,但不会在 Designate 中创建 记录集。Neutron 将记录错误“Error publishing port data in external DNS service”。

subnet-dns-publish-fixed-ip

Neutron 中还有一个名为 subnet-dns-publish-fixed-ip 的第三个扩展。此扩展包括 dns-domain-ports 扩展的功能,但如果子网 dns_publish_fixed_ip 属性设置为 True,则会删除限制。

dns-integration-domain-keywords

第四个 Neutron 扩展,包括 subnet-dns-publish-fixed-ip 扩展的功能,称为 dns-integration-domain-keywords。它允许在 dns_domain 中使用关键字,这些关键字将在创建端口时被替换。有效的关键字是:<project_id>、<project_name>、<user_id> 和 <user_name>。

注意

有关在 Neutron 中启用 DNS 集成的更多信息,请参阅 Neutron 网络指南

Nova 服务器实例的 DNS

与 Neutron 的 DNS 集成允许您自动为 Nova 实例创建 DNS 记录集。当 Nova 请求为新实例创建 Neutron 端口时,Neutron 将尝试在 Designate 中为端口创建 DNS 记录集

例如,我们将创建一个新的 Nova 实例,其 DNS 名称为“server.example.org”,并在 Designate 中注册。

注意

此示例适用于用户创建的网络。如果它们满足 Neutron 标准,则可以为由云管理员创建的网络上的 Nova 服务器实例自动创建 DNS 记录。

步骤:

  1. 检查是否启用了 subnet-dns-publish-fixed-ip Neutron 扩展。

  2. 在 Designate 中创建 区域“example.org”。

  3. 创建一个网络,提供 dns_domain“example.org”,我们将用于 Nova 实例。

  4. 在网络上创建一个子网,并将 dns_publish_fixed_ip 设置为 True。

  5. 创建 Nova 实例,名称为“server”,并在网络上有一个 NIC。

  6. 验证 Designate 区域 中是否创建了 DNS 记录集

注意

DNS 域必须始终是 完全限定域名 (FQDN),这意味着它将始终以句点结尾。

CLI 命令

$ openstack extension list --network -f value -c Alias | grep subnet-dns-publish-fixed-ip
$ openstack zone create --email example@example.org example.org.
$ openstack network create --dns-domain example.org. example-net
$ openstack subnet create --allocation-pool start=192.0.2.10,end=192.0.2.200 --network example-net --subnet-range 192.0.2.0/24 --dns-publish-fixed-ip example-subnet
$ openstack server create --image cirros-0.5.2-x86_64-disk --flavor 1 --nic net-id=example-net server
$ openstack recordset list --type A example.org.

+---------------+---------------------+------+------------+--------+--------+
| id            | name                | type | records    | status | action |
+---------------+---------------------+------+------------+--------+--------+
| 7b8d1be6-1b23 | server.example.org. | A    | 192.0.2.44 | ACTIVE | NONE   |
| -478a-94d5-60 |                     |      |            |        |        |
| b876dca2c8    |                     |      |            |        |        |
+---------------+---------------------+------+------------+--------+--------+

Neutron 端口的 DNS

与 Neutron 的 DNS 集成允许您自动为 Neutron 端口创建 DNS 记录集

例如,我们将创建一个新的 Neutron 端口,其 DNS 名称为“example-port.example.org”,并在 Designate 中注册。

注意

此示例适用于用户创建的网络。如果它们满足 Neutron 标准,则可以为 Neutron 端口在由云管理员创建的网络上自动创建 DNS 记录。

步骤:

  1. 检查是否启用了 subnet-dns-publish-fixed-ip Neutron 扩展。

  2. 在 Designate 中创建 区域“example.org”。

  3. 创建一个网络,提供 dns_domain“example.org”,我们将用于 Neutron 端口。

  4. 在网络上创建一个子网,并将 dns_publish_fixed_ip 设置为 True。

  5. 创建 Neutron 端口,指定端口的 dns_name“example-port”。

  6. 验证 Designate 区域 中是否创建了 DNS 记录集

注意

DNS 域必须始终是 完全限定域名 (FQDN),这意味着它将始终以句点结尾。

CLI 命令

$ openstack extension list --network -f value -c Alias | grep subnet-dns-publish-fixed-ip
$ openstack zone create --email example@example.org example.org.
$ openstack network create --dns-domain example.org. example-net
$ openstack subnet create --allocation-pool start=192.0.2.10,end=192.0.2.200 --network example-net --subnet-range 192.0.2.0/24 --dns-publish-fixed-ip example-subnet
$ openstack port create --network example-net --dns-name example-port my-example-port
$ openstack recordset list --type A example.org.

+---------------+---------------------------+------+-------------+--------+--------+
| id            | name                      | type | records     | status | action |
+---------------+---------------------------+------+-------------+--------+--------+
| 9ebbe94f-2442 | example-port.example.org. | A    | 192.0.2.149 | ACTIVE | NONE  |
| -4bb8-9cfa-6d |                           |      |             |        |       |
| ca1daba73f    |                           |      |             |        |       |
+---------------+---------------------------+------+------------+--------+--------+

浮动 IP 的 DNS

与 Neutron 的 DNS 集成允许您自动为 Neutron 浮动 IP 地址创建 DNS 记录集

例如,我们将创建一个新的 Neutron 浮动 IP,其 DNS 名称为“example-fip.example.org”,并在 Designate 中注册。

步骤:

  1. 创建 Neutron 浮动 IP,指定 dns_name“example-fip”,并将 dns_domain指定为“example.org”。

  2. 验证 Designate 区域 中是否创建了 DNS 记录集

注意

DNS 域必须始终是 完全限定域名 (FQDN),这意味着它将始终以句点结尾。

CLI 命令

$ openstack floating ip create --dns-name example-fip --dns-domain example.org. example-net
$ openstack recordset list --type A example.org.

+---------------+--------------------------+------+-------------+--------+--------+
| id            | name                     | type | records     | status | action |
+---------------+--------------------------+------+-------------+--------+--------+
| e1eca823-169d | example-fip.example.org. | A    | 192.0.2.106 | ACTIVE | NONE  |
| -4d0a-975e-91 |                          |      |             |        |       |
| a9907ec0c1    |                          |      |             |        |       |
+---------------+--------------------------+------+------------+--------+--------+