DNS 集成¶
此页面作为使用网络服务 (Networking service) 的 DNS 集成功能及其与计算服务 (Compute service) 交互的指南。
网络服务与外部 DNSaaS (DNS-as-a-Service) 的集成在 与外部服务集成 DNS 中描述。
用户可以使用与端口、网络和浮动 IP 关联的两个属性来控制网络服务在 DNS 方面的行为。下表显示了这些资源各自可用的属性
资源 |
dns_name |
dns_domain |
|---|---|---|
端口 |
是 |
是 |
网络 |
否 |
是 |
浮动 IP |
是 |
是 |
注意
DNS 集成 扩展启用前表中显示的所有属性和资源组合,除了端口的 dns_domain,后者需要 dns_domain for ports 扩展。
注意
由于 DNS 集成 扩展是 dns_domain for ports 的子集,如果需要端口的 dns_domain 功能,则只需配置后者扩展即可。
注意
当配置了 dns_domain for ports 扩展时,当 Neutron 服务器响应列出活动 API 扩展的请求时,也会包含 DNS 集成。这保留了向后兼容的 API。
注意
对于 浮动 IP,还需要外部 DNSaaS,如 与外部服务集成 DNS 中所述。
网络服务的内部 DNS 解析¶
网络服务允许用户控制内部 DNS 为端口分配的名称。要启用此功能,请执行以下操作
编辑
/etc/neutron/neutron.conf文件,并将与openstacklocal(其默认值)不同的值分配给[default]部分中的dns_domain参数。例如dns_domain = example.org.
将
dns(用于DNS 集成扩展)或dns_domain_ports(用于dns_domain for ports扩展)添加到/etc/neutron/plugins/ml2/ml2_conf.ini的[ml2]部分的extension_drivers中。以下是一个示例[ml2] extension_drivers = port_security,dns_domain_ports
重新启动 neutron-server 后,用户将能够为其端口分配 dns_name 属性。
与 DNS 集成相关的有效 extension_drivers 值是
dnsdns_domain_portssubnet_dns_publish_fixed_ipdns_domain_keywords
注意
启用此功能是启用网络服务与外部 DNS 服务的集成(在 与外部服务集成 DNS 中详细描述)的前提条件。
以下说明了创建一个端口,其 dns_name 属性为 my-port。
注意
网络服务内部 DNS 分配给端口的名称现在在 dns_assignment 属性的响应中可见。
$ openstack port create --network my-net --dns-name my-port test
+-----------------------+-------------------------------------------------------------------------------+
| Field | Value |
+-----------------------+-------------------------------------------------------------------------------+
| admin_state_up | UP |
| allowed_address_pairs | |
| binding_host_id | |
| binding_profile | |
| binding_vif_details | |
| binding_vif_type | unbound |
| binding_vnic_type | normal |
| created_at | 2016-02-05T21:35:04Z |
| data_plane_status | None |
| description | |
| device_id | |
| device_owner | |
| dns_assignment | fqdn='my-port.example.org.', hostname='my-port', ip_address='192.0.2.67' |
| dns_domain | None |
| dns_name | my-port |
| extra_dhcp_opts | |
| fixed_ips | ip_address='192.0.2.67', subnet_id='6141b474-56cd-430f-b731-71660bb79b79' |
| id | fb3c10f4-017e-420c-9be1-8f8c557ae21f |
| mac_address | fa:16:3e:aa:9b:e1 |
| name | test |
| network_id | bf2802a0-99a0-4e8c-91e4-107d03f158ea |
| port_security_enabled | True |
| project_id | d5660cb1e6934612a01b4fb2fb630725 |
| qos_policy_id | None |
| revision_number | 1 |
| security_group_ids | 1f0ddd73-7e3c-48bd-a64c-7ded4fe0e635 |
| status | DOWN |
| tags | |
| trunk_details | None |
| updated_at | 2016-02-05T21:35:04Z |
+-----------------------+-------------------------------------------------------------------------------+
当启用此功能时,计算服务在创建实例时会利用它。在启动过程中为实例分配端口时,计算服务会将这些端口的 dns_name 属性填充为实例的 hostname 属性,这是其显示名称的 DNS 规范化版本。因此,在启动过程结束时,分配的端口将在与其网络关联的 dnsmasq 中以其实例 hostname 身份被识别。
以下是一个实例创建示例,显示其 hostname 如何填充分配端口的 dns_name 属性
$ openstack server create --image cirros --flavor 42 \
--nic net-id=37aaff3a-6047-45ac-bf4f-a825e56fd2b3 my_vm
+--------------------------------------+----------------------------------------------------------------+
| Field | Value |
+--------------------------------------+----------------------------------------------------------------+
| OS-DCF:diskConfig | MANUAL |
| OS-EXT-AZ:availability_zone | |
| OS-EXT-STS:power_state | 0 |
| OS-EXT-STS:task_state | scheduling |
| OS-EXT-STS:vm_state | building |
| OS-SRV-USG:launched_at | - |
| OS-SRV-USG:terminated_at | - |
| accessIPv4 | |
| accessIPv6 | |
| adminPass | dB45Zvo8Jpfe |
| config_drive | |
| created | 2016-02-05T21:35:04Z |
| flavor | m1.nano (42) |
| hostId | |
| id | 66c13cb4-3002-4ab3-8400-7efc2659c363 |
| image | cirros-0.3.5-x86_64-uec(b9d981eb-d21c-4ce2-9dbc-dd38f3d9015f) |
| key_name | - |
| locked | False |
| metadata | {} |
| name | my_vm |
| os-extended-volumes:volumes_attached | [] |
| progress | 0 |
| security_groups | default |
| status | BUILD |
| tenant_id | d5660cb1e6934612a01b4fb2fb630725 |
| updated | 2016-02-05T21:35:04Z |
| user_id | 8bb6e578cba24e7db9d3810633124525 |
+--------------------------------------+----------------------------------------------------------------+
$ openstack port list --device-id 66c13cb4-3002-4ab3-8400-7efc2659c363
+--------------------------------------+------+-------------------+---------------------------------------------------------------------------------------+--------+
| ID | Name | MAC Address | Fixed IP Addresses | Status |
+--------------------------------------+------+-------------------+---------------------------------------------------------------------------------------+--------+
| b3ecc464-1263-44a7-8c38-2d8a52751773 | | fa:16:3e:a8:ce:b8 | ip_address='203.0.113.8', subnet_id='277eca5d-9869-474b-960e-6da5951d09f7' | ACTIVE |
| | | | ip_address='2001:db8:10::8', subnet_id='eab47748-3f0a-4775-a09f-b0c24bb64bc4' | |
+--------------------------------------+------+-------------------+---------------------------------------------------------------------------------------+--------+
$ openstack port show b3ecc464-1263-44a7-8c38-2d8a52751773
+-----------------------+------------------------------------------------------------------------------------------------------------+
| Field | Value |
+-----------------------+------------------------------------------------------------------------------------------------------------+
| admin_state_up | UP |
| allowed_address_pairs | |
| binding_host_id | vultr.guest |
| binding_profile | |
| binding_vif_details | datapath_type='system', ovs_hybrid_plug='True', port_filter='True' |
| binding_vif_type | ovs |
| binding_vnic_type | normal |
| created_at | 2016-02-05T21:35:04Z |
| data_plane_status | None |
| description | |
| device_id | 66c13cb4-3002-4ab3-8400-7efc2659c363 |
| device_owner | compute:None |
| dns_assignment | fqdn='my-vm.example.org.', hostname='my-vm', ip_address='203.0.113.8' |
| | fqdn='my-vm.example.org.', hostname='my-vm', ip_address='2001:db8:10::8' |
| dns_domain | example.org. |
| dns_name | my-vm |
| extra_dhcp_opts | |
| fixed_ips | ip_address='203.0.113.8', subnet_id='277eca5d-9869-474b-960e-6da5951d09f7' |
| | ip_address='2001:db8:10::8', subnet_id='eab47748-3f0a-4775-a09f-b0c24bb64bc4' |
| id | b3ecc464-1263-44a7-8c38-2d8a52751773 |
| mac_address | fa:16:3e:a8:ce:b8 |
| name | |
| network_id | 37aaff3a-6047-45ac-bf4f-a825e56fd2b3 |
| port_security_enabled | True |
| project_id | d5660cb1e6934612a01b4fb2fb630725 |
| qos_policy_id | None |
| revision_number | 1 |
| security_group_ids | 1f0ddd73-7e3c-48bd-a64c-7ded4fe0e635 |
| status | ACTIVE |
| tags | |
| trunk_details | None |
| updated_at | 2016-02-05T21:35:04Z |
+-----------------------+------------------------------------------------------------------------------------------------------------+
在上面的示例中,请注意
用户赋予实例的名称
my_vm被计算服务规范化并成为端口的dns_namemy-vm。端口的
dns_assignment属性显示其 FQDN 在网络服务的内部 DNS 中为my-vm.example.org.,这是通过将端口的dns_name与在neutron.conf中的dns_domain参数中配置的值连接的结果,如前所述。dns_assignment属性还显示端口的hostname在网络服务的内部 DNS 中为my-vm。与其让计算服务为实例创建端口,用户可能已经创建了它并为其
dns_name属性分配了一个值。在这种情况下,分配给dns_name属性的值必须等于计算服务将分配给实例的hostname的值,在本例中为my-vm。否则,实例启动将失败。
注意
当启用与外部 DNS 服务的网络服务集成时,在某些明确定义的案例中,dns_assignment 属性中的端口 FQDN 将不会如上所述计算。有关这些案例的描述,请参阅 用例 3 中的端口 dns_assignment 属性。