DNS 即服务指南


Red Hat OpenStack Platform 8

将 DNS 管理与红帽 OpenStack 平台集成

OpenStack Documentation Team

摘要

将 DNS 与 Red Hat OpenStack Platform 集成指南。

第 1 章 DNSaaS 概述

Red Hat OpenStack Platform 8 包括 DNSaaS (也称为设计)的技术预览。DNSaaS 包括用于域和记录管理的 REST API,是多租户的,并与 OpenStack Identity Service (keystone)集成以进行身份验证。DNSaaS 包含与计算(nova)和 OpenStack 网络(neutron)通知集成的框架,允许自动生成的 DNS 记录。此外,DNSaaS 包含对 Bind9 的集成支持。

注意

本发行版本中提供了 DNS 即服务(DNSaaS) (也称为 Designate)作为 技术预览 提供,因此不受红帽完全支持。它只应用于测试,不应部署在生产环境中。有关技术预览功能的更多信息,请参阅覆盖范围详细信息

1.1. 本指南涵盖的主题

  • 手动 DNSaaS 安装步骤,因为 Director 部署中目前不包含 DNSaaS。
  • 使用命令行界面管理和配置 DNSaaS.
  • 与 Bind9, 集成,包括自动创建实例记录。

1.2. DNSaaS 先决条件

  • 完全正常工作的基于 OpenStack 网络、非 HA OpenStack 环境。
  • 加载的 OpenStack 镜像服务(glance)镜像,用于测试自动创建。

1.3. DNSaaS 服务

DNSaaS 部署包括以下组件:

Expand

designate-api

提供 OpenStack 原生 REST API。

designate-central

处理 mysql 数据库中的请求和协调存储。

designate-mdns

小 MiniDNS 服务器仅用于通过标准 DNS 协议与其他 DNS 服务器进行通信。

designate-pool-manager

管理 DNSaaS 管理的 DNS 服务器的状态。确保后端 DNS 服务器与 DNSaaS 同步。

designate-sink

用于侦听 nova 和 neutron 通知事件的可选服务,用于触发自动记录创建/提取。

designate-agent

用于无法接受区域传送的 DNS 服务器(AXFR)。BIND 后端不需要。

注意

应该在下一个主发行版本中添加 zone-manager 服务。它将在区域上运行定期任务,以提供识别丢失的事件的机制。

1.4. DNSaaS 与计算和 OpenStack 网络集成

designate-sink 服务向 designate-central 发送消息时,DNSaaS 记录管理开始,然后触发以下描述的工作流:

1. designate-sink 从 Compute 接收 实例引导/删除 事件,或者从 OpenStack 网络接收浮动 IP add/remove 事件。这些事件使用 OpenStack 消息总线发送。

2. designate-sink 从虚拟机名称和配置的域 ID 构造主机的 FQDN (请参阅以下)。

3. designate-sink 告知 designate-central 使用给定名称和 IP 地址添加/删除记录。

4. designate-central 添加/删除 DNSaaS 数据库中的记录(在 designate-centraldesignate-mdns之间共享)。

5. designate-central 告知 designate-pool-managerDNS NOTIFY 发送到此域的后端 DNS 服务器(BIND9)。

6.后端 DNS 服务器接收 DNS NOTIFY,并将 AXFR (区传输)请求发送到 designate-mdns

7. designate-mdns 从数据库读取更改,并将它们发送到 AXFR 响应中的后端 DNS 服务器。

第 2 章 手动 DNSaaS 安装

注意

1.在控制器节点上安装 DNSaaS 软件包:

# yum install openstack-designate-api openstack-designate-central openstack-designate-sink openstack-designate-pool-manager openstack-designate-mdns openstack-designate-common python-designate python-designateclient openstack-designate-agent
Copy to Clipboard Toggle word wrap

2.创建 DNSaaS 和池管理器数据库。更新 IDENTIFIED BY 'ComplexAlphanumericPassword' 值,以适应您的环境。

# mysql -u root << EOF
CREATE DATABASE designate;
GRANT ALL ON designate.* TO 'designate'@'%' IDENTIFIED BY 'ComplexAlphanumericPassword';
GRANT ALL ON designate.* TO 'designate'@'localhost' IDENTIFIED BY 'ComplexAlphanumericPassword';
CREATE DATABASE designate_pool_manager;
GRANT ALL ON designate_pool_manager.* TO 'designate'@'%' IDENTIFIED BY 'ComplexAlphanumericPassword';
GRANT ALL ON designate_pool_manager.* TO 'designate'@'localhost' IDENTIFIED BY 'ComplexAlphanumericPassword';
FLUSH PRIVILEGES;
quit
EOF
Copy to Clipboard Toggle word wrap

3.在 OpenStack Identity (keystone)中创建 DNSaaS 服务帐户和端点:本例使用 DNSaaS 主机 IP 地址 192.168.100.20。您可能需要更新这些步骤以适合您的环境。

$ openstack user create designate --password ComplexAlphanumericPassword --email designate@localhost
$ openstack role add --project service --user designate admin
$ openstack service create dns --name designate --description "Designate DNS Service"
$ openstack endpoint create --region RegionOne --publicurl http://192.168.100.20:9001 --internalurl http://192.168.100.20:9001 --adminurl http://192.168.100.20:9001 designate
Copy to Clipboard Toggle word wrap

4.为 DNSaaS 添加防火墙规则:

$ sudo iptables -I INPUT -p tcp -m multiport --dports 9001 -m comment --comment "designate incoming" -j ACCEPT
$ sudo iptables -I INPUT -p tcp -m multiport --dports 5354 -m comment --comment "Designate mdns incoming" -j ACCEPT
Copy to Clipboard Toggle word wrap

如果在本地托管 DNS,请检查所需端口是否已打开:

$ sudo iptables -I INPUT -p tcp -m multiport --dports 953 -m comment --comment "rndc incoming - bind only" -j ACCEPT
$ sudo service iptables save; sudo service iptables restart
Copy to Clipboard Toggle word wrap

5.配置 DNSaaS 数据库连接 :请确保在以下步骤中正确输入 DNSaaS 主机 IP 地址;将 ComplexAlphanumericPassword 替换为与您环境保持一致的值。

$ crudini --set /etc/designate/designate.conf storage:sqlalchemy connection mysql://designate:ComplexAlphanumericPassword@192.168.100.20/designate
$ crudini --set /etc/designate/designate.conf storage:sqlalchemy max_retries -1
$ crudini --set /etc/designate/designate.conf pool_manager_cache:sqlalchemy connection mysql://designate:ComplexAlphanumericPassword@192.168.100.20/designate_pool_manager
$ crudini --set /etc/designate/designate.conf pool_manager_cache:sqlalchemy max_retries -1
Copy to Clipboard Toggle word wrap

6.配置对 Identity Service 的身份验证(keystone):确保 admin_password 选项与您的环境一致。

$ crudini --set /etc/designate/designate.conf keystone_authtoken auth_uri http://192.168.100.20:5000/v2.0
$ crudini --set /etc/designate/designate.conf keystone_authtoken identity_uri http://192.168.100.20:35357/
$ crudini --set /etc/designate/designate.conf keystone_authtoken admin_tenant_name service
$ crudini --set /etc/designate/designate.conf keystone_authtoken admin_user designate
$ crudini --set /etc/designate/designate.conf keystone_authtoken admin_password ComplexAlphanumericPassword
Copy to Clipboard Toggle word wrap

7.配置 DNSaaS 与 RabbitMQ 的连接:

使某些 rabbit_useridrabbit_password 选项与您的环境一致。

$ crudini --set /etc/designate/designate.conf oslo_messaging_rabbit rabbit_hosts 192.168.100.20:5672
$ crudini --set /etc/designate/designate.conf oslo_messaging_rabbit rabbit_ha_queues False
$ crudini --set /etc/designate/designate.conf oslo_messaging_rabbit rabbit_host 192.168.100.20
$ crudini --set /etc/designate/designate.conf oslo_messaging_rabbit rabbit_port 5672
$ crudini --set /etc/designate/designate.conf oslo_messaging_rabbit rabbit_userid amqp_user
$ crudini --set /etc/designate/designate.conf oslo_messaging_rabbit rabbit_password ComplexAlphanumericPassword
$ crudini --set /etc/designate/designate.conf oslo_messaging_rabbit rabbit_virtual_host /
Copy to Clipboard Toggle word wrap

8.添加初始 DNSaaS 配置:

$ crudini --set /etc/designate/designate.conf DEFAULT notification_driver nova.openstack.common.notifier.rpc_notifier
$ crudini --set /etc/designate/designate.conf DEFAULT notification_driver messaging
$ crudini --set /etc/designate/designate.conf DEFAULT notification_topics notifications_designate
$ crudini --set /etc/designate/designate.conf service:api api_host 0.0.0.0
$ crudini --set /etc/designate/designate.conf service:api api_port 9001
$ crudini --set /etc/designate/designate.conf service:api auth_strategy keystone
$ crudini --set /etc/designate/designate.conf service:api enable_api_v1 True
$ crudini --set /etc/designate/designate.conf service:api enabled_extensions_v1 "diagnostics, quotas, reports, sync, touch"
$ crudini --set /etc/designate/designate.conf service:api enable_api_v2 True
$ crudini --set /etc/designate/designate.conf service:api enabled_extensions_v2 "quotas, reports"
Copy to Clipboard Toggle word wrap

9.配置池管理器:

注意

目前,您尚未配置池目标,因为您尚未选择后端。这个过程稍后会发生这种情况。

pool_id 被硬编码,因此请使用如下所示的 UUID

# pool_id=794ccc2c-d751-44fe-b57f-8894c9f5c842
# nameserver_id=$(uuidgen)
# target_id=$(uuidgen)
$ crudini --set /etc/designate/designate.conf service:pool_manager pool_id $pool_id
$ crudini --set /etc/designate/designate.conf pool:$pool_id nameservers $nameserver_id
$ crudini --set /etc/designate/designate.conf pool:$pool_id targets $target_id
$ crudini --set /etc/designate/designate.conf pool_nameserver:$nameserver_id port 53
$ crudini --set /etc/designate/designate.conf pool_nameserver:$nameserver_id host 192.168.100.20
Copy to Clipboard Toggle word wrap

10.配置 DNSaaS Sink:

注意

现在,您不会配置 sink 使用的域(因为还没有存在)。

$ crudini --set /etc/designate/designate.conf service:sink enabled_notification_handlers "nova_fixed, neutron_floatingip"
$ crudini --set /etc/designate/designate.conf handler:nova_fixed notification_topics notifications_designate
$ crudini --set /etc/designate/designate.conf handler:nova_fixed control_exchange nova
$ crudini --set /etc/designate/designate.conf handler:nova_fixed format "%(display_name)s.%(domain)s"
$ crudini --set /etc/designate/designate.conf handler:neutron_floatingip notification_topics notifications_designate
$ crudini --set /etc/designate/designate.conf handler:neutron_floatingip control_exchange neutron
$ crudini --set /etc/designate/designate.conf handler:neutron_floatingip format "%(octet0)s-%(octet1)s-%(octet2)s-%(octet3)s.%(domain)s"
Copy to Clipboard Toggle word wrap

11.配置计算和 OpenStack 网络以发送通知

注意

Ceilometer 的代理也侦听和消耗通知。创建特定的 指定 通知队列(如下所示),使它们不会冲突。

Kilo 发行版本中的 OpenStack Compute 切换到 messaging 作为其通知驱动程序;之前,它是 nova.openstack.common.notifier.rpc_notifier

$ crudini --set /etc/nova/nova.conf DEFAULT notification_topics notifications,notifications_designate
$ crudini --set /etc/nova/nova.conf DEFAULT notify_on_state_change vm_and_task_state
$ crudini --set /etc/nova/nova.conf DEFAULT instance_usage_audit_period hour
$ crudini --set /etc/nova/nova.conf DEFAULT instance_usage_audit true
$ crudini --set /etc/neutron/neutron.conf DEFAULT notification_driver neutron.openstack.common.notifier.rpc_notifier
$ crudini --set /etc/neutron/neutron.conf DEFAULT notification_topics notifications,notifications_designate
$ sudo systemctl restart nova.service
$ sudo systemctl restart neutron.service
Copy to Clipboard Toggle word wrap

12.手动验证 nova.conf 中的 notification_driver

注意

由于 nova.conf 中多个 notification_drivers 的可能性,crudini 命令可能会导致问题。在 DEFAULT 部分中检查以确保您有两个条目:

notification_driver=ceilometer.compute.nova_notifier
notification_driver=messaging
Copy to Clipboard Toggle word wrap
注意

如果使用单独的 Compute 节点,则需要 nova.conf 中的以下设置:

notification_driver =nova.openstack.common.notifier.rabbit_notifier,ceilometer.compute.nova_notifier
notification_driver =messaging
notification_topics=notifications,notifications_designate
Copy to Clipboard Toggle word wrap

13.同步 DNSaaS 和池管理器缓存:

# designate-manage database sync
# designate-manage pool-manager-cache sync
Copy to Clipboard Toggle word wrap

14.启用并启动 DNSaaS 服务:

# systemctl enable designate-central
# systemctl enable designate-api
# systemctl enable designate-mdns
# systemctl enable designate-pool-manager
# systemctl start designate-central
# systemctl start designate-api
# systemctl start designate-mdns
# systemctl start designate-pool-manager
Copy to Clipboard Toggle word wrap
注意

此时您尚未为您的池创建 DNS 目标,因此还没有预期正常运行的 DNSaaS 部署。

第 3 章 安装和配置 Bind9

这些步骤将安装 Bind9,然后配置与 DNSaaS 的集成。

3.1. 基本 BIND 安装

1.安装 BIND 软件包:

# yum install bind bind-utils
Copy to Clipboard Toggle word wrap

2.named 配置为侦听传入连接:

# cp /etc/named.conf /etc/named.conf.orig
# sed -i -e "s/listen-on port.*/listen-on port 53 { 127.0.0.1; 192.168.100.20; };/" /etc/named.conf
Copy to Clipboard Toggle word wrap

3.2. 配置 BIND

1.写入 /etc/rndc.key

# rndc-confgen -a
Copy to Clipboard Toggle word wrap

2.选项前添加以下内容

# sed -i '/^options.*/i \
include "/etc/rndc.key"; \
controls { \
        inet 127.0.0.1 allow { localhost; } keys { "rndc-key"; }; \
};' /etc/named.conf
Copy to Clipboard Toggle word wrap

3.删除几个现有选项,稍后您要重写:

# sed -i '/allow-query.*/d' /etc/named.conf
# sed -i '/recursion.*/d' /etc/named.conf
Copy to Clipboard Toggle word wrap

4.在选项后添加以下内容:

# sed -i '/^options.*/a \
        allow-new-zones yes; \
        allow-query { any; }; \
        recursion no;' /etc/named.conf
Copy to Clipboard Toggle word wrap

5.创建 rndc 配置。对于 Compute 节点,rndc 配置必须指向 DNS 服务器。例如:

# cat << EOF > /etc/rndc.conf
include "/etc/rndc.key";
options {
        default-key "rndc-key";
        default-server 192.168.100.20;
        default-port 953;
};
EOF
Copy to Clipboard Toggle word wrap

6.查看 指定的配置

# named-checkconf /etc/named.conf
Copy to Clipboard Toggle word wrap

7.更正文件权限:

# setsebool -P named_write_master_zones on
# chmod g+w /var/named
# chown named:named /etc/rndc.conf
# chown named:named /etc/rndc.key
# chmod 600 /etc/rndc.key
Copy to Clipboard Toggle word wrap

8.启用并启动 named 服务:

# systemctl enable named
# systemctl start named
Copy to Clipboard Toggle word wrap

9.验证 namedrndc:

# dig @localhost localhost
# rndc status
Copy to Clipboard Toggle word wrap

3.3. 为 BIND 配置 DNSaaS 池目标

1.设置池目标配置:

$ crudini --set /etc/designate/designate.conf pool_target:$target_id type bind9
$ crudini --set /etc/designate/designate.conf pool_target:$target_id options "rndc_host: 192.168.100.20, rndc_port: 953, rndc_config_file: /etc/rndc.conf, rndc_key_file: /etc/rndc.key"
$ crudini --set /etc/designate/designate.conf pool_target:$target_id masters 192.168.100.20:5354
Copy to Clipboard Toggle word wrap

2.重启 DNSaaS 以应用您的池更改:

# systemctl restart designate-api
# systemctl restart designate-central
# systemctl restart designate-mdns
# systemctl restart designate-pool-manager
# systemctl restart designate-sink
Copy to Clipboard Toggle word wrap

3.4. 测试 BIND

1.执行以下诊断命令:

# netstat -tap | grep named
# netstat -tulpn | grep 53
# dig @192.168.100.20
Copy to Clipboard Toggle word wrap

2.检查 DNSaaS 日志中的错误。忽略 Sink 中的错误,因为您还没有修改其配置。

# cd /var/log/designate
# tail api.log
# tail central.log
# tail mdns.log
# tail pool-manager.log
# tail sink.log
Copy to Clipboard Toggle word wrap

3.5. 测试 DNSaaS 与 BIND9 的集成

1.为您的服务器创建一个条目:

# designate server-create --name $(hostname).
Copy to Clipboard Toggle word wrap

2.验证您的 DNS 服务器记录之前是否已创建:

# designate server-list
Copy to Clipboard Toggle word wrap

3.创建一个域(不要忘记 . 在- name 选项 的末尾)

# designate domain-list
# designate domain-create --name example.com. --email root@example.com
# DOMAINID=$(designate domain-list | grep example.com | awk '{print $2}')
Copy to Clipboard Toggle word wrap
注意

从 BIND 指定创建域时,它基本上运行熟悉这个命令的命令:

# rndc -s 192.168.122.41 -p 953 -c /etc/rndc.conf -k /etc/rndc.key addzone example.com '{ type slave; masters { 192.168.122.41 port 5354; }; file "slave.example.com.ff532e15-55a9-4966-8f1e-b3eddb2891ba"; };'
Copy to Clipboard Toggle word wrap

4.创建记录和测试查找(不要忘记 . 在- name 选项的末尾)

# designate record-create --name server1.example.com. --type A --data 1.2.3.4 $DOMAINID
# dig +short -p 53 @192.168.100.20 server1.example.com A
Copy to Clipboard Toggle word wrap

1.修改 example 域的 DNSaaS 配置:

$ crudini --set /etc/designate/designate.conf handler:nova_fixed domain_id $DOMAINID
$ crudini --set /etc/designate/designate.conf handler:neutron_floatingip domain_id $DOMAINID
# systemctl restart designate-api
# systemctl restart designate-central
# systemctl restart designate-mdns
# systemctl restart designate-pool-manager
# systemctl restart designate-sink
Copy to Clipboard Toggle word wrap

2.测试 OpenStack Compute (nova)记录创建:

# glance image-list
# neutron net-list
# nova boot testserver --flavor m1.tiny --image cirros-0.3.4-x86_64 --key-name yourkey --security-groups default --nic net-id=<Private Net ID>
Copy to Clipboard Toggle word wrap

3.检查 Sink 日志:

实例启动后,如果正确获取了通知,您应该会看到 create_record 条目:

# tail /var/log/designate/sink.log
Copy to Clipboard Toggle word wrap

在 BIND 中检查

# dig +short @192.168.100.20 testserver.example.com
Copy to Clipboard Toggle word wrap

如果这不起作用,您也可以检查 /var/named 中的文件。

3.7. 测试 OpenStack 网络浮动 IP 记录创建

1.执行下面的诊断命令(用适合您环境的名称替换 swig 1 ):

# FLOATINGIP=$(neutron floatingip-create pubnet1 | grep floating_ip_address | awk '{print $4}')
# nova add-floating-ip testserver $FLOATINGIP
# DNSRESULT=$(echo $FLOATINGIP |sed 's/\./-/g').example.com
# dig +short @192.168.100.20 $DNSRESULT
Copy to Clipboard Toggle word wrap

2.您应该在日志文件中看到 create_record 事件:

# tail /var/log/designate/sink.log
Copy to Clipboard Toggle word wrap

3.8. 清理 OpenStack 网络和计算 DNS 条目

1.删除之前创建的测试浮动 IP:

# nova remove-floating-ip testserver $FLOATINGIP
Copy to Clipboard Toggle word wrap

2.您应该在日志文件中看到 delete_record 事件:

# tail /var/log/designate/sink.log
Copy to Clipboard Toggle word wrap

现在应删除记录。

3.删除之前创建的 testserver

# designate record-list $DOMAINID
# nova delete testserver
Copy to Clipboard Toggle word wrap

您应该在日志文件中看到另一个 delete_record 条目:

# tail /var/log/designate/sink.log
Copy to Clipboard Toggle word wrap

法律通告

版权所有 © 2015 Red Hat, Inc.
本文档内容及图解由红帽根据 Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA")授权。http://creativecommons.org/licenses/by-sa/3.0/ 中提供了CC-BY-SA 的说明。根据 CC-BY-SA,如果发布本文档或提供此文档,则必须提供原始版本的 URL。
作为本文档的许可者,红帽可能会放弃强制制执行 CC-BY-SA 第4d 条款,且不声明该条款在适用条款允许的最大限度内有效。
OpenStack 配置参考中采用的部分内容。请参阅 Red Hat OpenStack Platform Licenses 中的"配置参考"文档
Red Hat、Red Hat Enterprise Linux、Shadowman 徽标、JBoss、MetaMatrix、Fedora、Infinity 徽标和 RHCE 是 Red Hat, Inc. 在美国和其他国家/地区注册的商标。
Linux® 是 Linus Torvalds 在美国和其它国家的注册商标。
Java® 是 Oracle 和/或其附属公司注册的商标。
XFS® 是 Silicon Graphics International Corp. 或其子公司在美国和/或其他国家的商标。
MySQL® 是 MySQL AB 在美国、美国和其他国家注册的商标。
Node.js® 是 Joyent 的官方商标。Red Hat Software Collections 与官方 Joyent Node.js 开源或商业项目没有正式关联或被正式认可。
OpenStack® Word Mark 和 OpenStack 标识是 OpenStack Foundation 在美国和其他国家/地区注册商标/服务标记或商标/服务标记,适用于 OpenStack Foundation 的权限。我们不附属于 OpenStack Foundation 或 OpenStack 社区。
所有其他商标均由其各自所有者所有。
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat