designate原理及自動化部署

puppet-designate

DNS

想要搞懂Designate項(xiàng)目,沒有正確的DNS姿勢怎么行?所以先別急,我們先來聊一聊dns的那些事。

DNS簡介

DNS 的全稱是 Domain Name System,DNS 負(fù)責(zé)主機(jī)名字之間和互聯(lián)網(wǎng)絡(luò)地址之間的映射,在我們上網(wǎng)或者發(fā)送電子郵件的時候,一般都會使用主機(jī)名而不是 IP 地址,因?yàn)榍罢吒菀子洃?,但是對于?jì)算機(jī),使用數(shù)字(IP 地址)則更為方便。DNS 能夠幫助我們將主機(jī)名轉(zhuǎn)換成計(jì)算機(jī)更容易識別的 IP 地址。從而完成主機(jī)之前的通信。

DNS層級結(jié)構(gòu)

DNS是一個層級的分布式的數(shù)據(jù)庫,以 C/S 架構(gòu)工作,它將互聯(lián)網(wǎng)名稱(域名)和 IP 地址的對應(yīng)關(guān)系記錄下來,可以為客戶端提供名稱解析的功能。它允許對整個數(shù)據(jù)庫的各個部分進(jìn)行本地控制,借助備份和緩存機(jī)制, DNS 將具有足夠的強(qiáng)壯性。

DNS 數(shù)據(jù)庫以層級的樹狀結(jié)構(gòu)組織,最頂級的服務(wù)器被稱為「根」(root),以 . 表示,它是所有子樹的根。root 將自己劃分為多個子域(subdomain),這些子域包括 com,net,org,gov,net 等等,這些子域被稱為頂級域(Top Level Domain, TDL)。再進(jìn)一步,各頂級域再將自己劃分成多個子域,子域還可以在劃分子域,最后樹的葉子節(jié)點(diǎn)就是某個域的主機(jī)名。整個結(jié)構(gòu)如下圖所示:



每個域的名稱服務(wù)器僅負(fù)責(zé)本域內(nèi)的主機(jī)的名稱解析,如果需要解析子域的主機(jī),就需要再向其子域的名稱服務(wù)器查詢。這樣一來,無論主機(jī)在哪個域內(nèi),都可以從根開始一級一級的找到負(fù)責(zé)解析此主機(jī)名稱的域,然后完成域名解析。

BIND DNS 服務(wù)器

BIND 是由 Berkely 大學(xué)研發(fā)的一款開源 DNS 服務(wù)器程序,同時也是最為流行的。在 CentOS 系統(tǒng)中,由 bind 軟件包提供安裝。
Bind的兩個配置文件:

  • /etc/named.conf:主要規(guī)范主機(jī)的設(shè)定、zone file 的所在、權(quán)限的設(shè)定等;
    主要配置如下:
options {
        listen-on port 53 { 127.0.0.1; };    
        directory "/var/named";  //資料庫預(yù)設(shè)放置的目錄所在
        dump-file "/var/named/data/cache_dump .db"; //一些統(tǒng)計(jì)資訊
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        allow-query { any; };      //可不設(shè)定,代表全部接受
        recursion no;                    //將自己視為用戶端的一種查詢模式
};

  • 正反解資料庫檔案(zone file):/var/named/目錄下,一個zone file由多條資源記錄組成。
$TTL 1D
@       IN SOA  LinuxMaster.test.com.  admin.test.com. (
                                        2016092605      ; serial
                                        21600           ; refresh
                                        3600            ; retry
                                        604800          ; expire
                                        86400 )         ; minimum
        IN NS   LinuxMaster

DNS服務(wù)器類型

服務(wù)器類型 作用
緩存服務(wù)器 不負(fù)責(zé)解析,僅為加速,不需要注冊
主DNS服務(wù)器 負(fù)責(zé)解析本地客戶端請求
輔助DNS服務(wù)器 輔助服務(wù)器的區(qū)域數(shù)據(jù)都是從主服務(wù)器復(fù)制而來,其數(shù)據(jù)都是只讀的

緩存服務(wù)器需要配置:

options {
       forward only;                    
       forwarders {                     
               168.95.1.1;               //先用中華電信的DNS當(dāng)上層
               139.175.10.20;            //再用seednet當(dāng)上層
       };
};

Master DNS服務(wù)器需要配置:

zone "test.com" IN {
       type master;
       file "test.com.zone";
};

Slave DNS服務(wù)器需要配置:

zone "test.com" IN {
       type slave;
       masters {ip;};
       file "slaves/test.com.zone";
};

Slave必須要與Master相互搭配,當(dāng)要修改一條記錄時,只要手動更改Master那部機(jī)器的zone file,重新啟動BIND這個服務(wù)后(或者等待一定時間),slave會自動同步這條更改的記錄。
基本上,不論Master 還是Slave 的資料庫,都會有一個代表該資料庫新舊的『序號』,這個序號數(shù)值的大小,會影響是否要更新的動作。至于更新的方式主要有兩種:

  • Master主動告知:例如在Master在修改了資料庫內(nèi)容,并且加大資料庫序號后,重新啟動DNS服務(wù),那master會主動告知slave來更新資料庫,此時就能夠達(dá)成資料同步;
  • 由Slave主動提出要求:基本上, Slave會定時的向Master察看資料庫的序號,當(dāng)發(fā)現(xiàn)Master資料庫的序號比Slave自己的序號還要大(代表比較新),那么Slave就會開始更新。如果序號不變,那么就判斷資料庫沒有更動,因此不會進(jìn)行同步更新。

DNS資源記錄類型

資源記錄:
標(biāo)準(zhǔn)的資源記錄具有其基本格式:[name]   [ttl]   IN  type  rdata

類型 含義
IN 此字段用于將當(dāng)前記錄標(biāo)識為一個INTERNET的DNS資源記錄
type 類型字段,用于標(biāo)識當(dāng)前資源記錄的類型
rdata 用于描述資源的信息且長度可變的必要字段,隨CLASS和TYPE的變化而變化

每個區(qū)域數(shù)據(jù)庫文件都是由資源記錄構(gòu)成的。type的值主要有:SOA記錄、NS記錄、A記錄、CNAME記錄、MX記錄和PTR記錄。

資源記錄類型 描述 一句話描述
起始授權(quán)結(jié)構(gòu)(SOA) 用于一個區(qū)域的開始,SOA記錄后的所有信息均是用于控制這個區(qū)域的,每個區(qū)域數(shù)據(jù)庫文件都必須包含一個SOA記錄,并且必須是其中的第一個資源記錄,用以標(biāo)識DNS服務(wù)器管理的起始位置,SOA說明能解析這個區(qū)域的dns服務(wù)器中哪個是主服務(wù)器。 指出當(dāng)前區(qū)域內(nèi)誰是主DNS服務(wù)器
主機(jī)(A) 即是A記錄,也稱為主機(jī)記錄,是DNS名稱到IP地址的映射,用于正向解析。 將域名FQND映射到IP 正向解析
別名(CNAME) CNAME記錄,也是別名記錄,用于定義A記錄的別名。 將A記錄指向的域名指向另外一個域名
郵件交換器(MX) 郵件交換器記錄,用于告知郵件服務(wù)器進(jìn)程將郵件發(fā)送到指定的另一臺郵件服務(wù)器。(該服務(wù)器知道如何將郵件傳送到最終目的地)。 指出當(dāng)前區(qū)域內(nèi) SMTP郵件服務(wù)器IP
名稱服務(wù)器(NS) NS記錄,用于標(biāo)識區(qū)域的DNS服務(wù)器,即是說負(fù)責(zé)此DNS區(qū)域的權(quán)威名稱服務(wù)器,用哪一臺DNS服務(wù)器來解析該區(qū)域。一個區(qū)域有可能有多條ns記錄,例如zz.com有可能有一個主服務(wù)器和多個輔助服務(wù)器。 指出當(dāng)前區(qū)域內(nèi)有幾個DNS服務(wù)器在提供服務(wù)
反向解析(PRT) 是IP地址到DNS名稱的映射,用于反向解析。 將IP解析為域名FQND

DNS客戶端

dig 是 Linux 下常用的 DNS 查詢工具,在 CentOS 系統(tǒng)中,由 bind-utils 軟件包提供,它的使用方法為:

dig -t RRT NAME [@NAME_SERVER]

其中,RRT 表示資源記錄類型,NAME 表示查詢的地址,@NAME_SERVER 可以指定 DNS 服務(wù)器,如果不指定則使用操作系統(tǒng)默認(rèn)的 DNS 服務(wù)器。

例如,查詢 www.kernel.org 的 IP 地址:

[root@bogon ~]# dig -t A www.kernel.org @172.16.0.1

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6 <<>> -t A www.kernel.org @172.16.0.1
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 35532
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 3, ADDITIONAL: 4

;; QUESTION SECTION:
;www.kernel.org.            IN  A

;; ANSWER SECTION:
www.kernel.org.     600 IN  CNAME   pub.all.kernel.org.
pub.all.kernel.org. 600 IN  A   199.204.44.194
pub.all.kernel.org. 600 IN  A   198.145.20.140
pub.all.kernel.org. 600 IN  A   149.20.4.69
...(省略)

基礎(chǔ)知識

Designate介紹

OpenStack Designate提供了DNSaaS(DNS即服務(wù))的功能,其目標(biāo)就是要賦予OpenStack提供這種云域名系統(tǒng)的能力,云服務(wù)商可以使用Designate就能夠很容易建造一個云域名管理系統(tǒng)來托管租戶的公有域名。

Designate的架構(gòu)圖如下:

包含的服務(wù) 簡介
designate-api 接收來自遠(yuǎn)端用戶的HTTP/HTTPS請求,通過Keystone驗(yàn)證遠(yuǎn)端用戶的合法性,將HTTP/HTTPS請求傳遞給Central模塊。
designate-central 業(yè)務(wù)邏輯處理核心。響應(yīng)API請求以及處理Sink所監(jiān)聽到的來自Nova和Neutron的特定通知事件。同時會存取數(shù)據(jù)庫,對業(yè)務(wù)邏輯處理所產(chǎn)生的數(shù)據(jù)進(jìn)行持久化存儲。
designate-mdns 實(shí)現(xiàn)了標(biāo)準(zhǔn)的DNS Notify和Zone Transfer的處理。
designate-pool-manager 連接后端驅(qū)動,管理DNS服務(wù)器池,與MiniDNS配合同步DNS服務(wù)器的域名以及資源記錄等數(shù)據(jù)。
designate-sink 監(jiān)聽來自Nova和Neutron的某些事件,用于自動生成域名資源記錄,比如當(dāng)監(jiān)聽到Nova的compute.instance.create.end事件通知后,自動創(chuàng)建一條對應(yīng)于剛創(chuàng)建的實(shí)例的A記錄;當(dāng)監(jiān)聽到Nuetron的floatingip.update.end事件通知后,自動更新一條相應(yīng)的A記錄。

DNS服務(wù)器的池劃管理

Designate kilo版本所引入的pool manager機(jī)制將DNS服務(wù)器群劃分成多個服務(wù)器池(pool),如下圖所示,每個服務(wù)器池可以配置包含1臺或多臺DNS服務(wù)器。而且,池中的DNS服務(wù)器選型還可以不同,也就是說在一個服務(wù)器池中,可以有1臺BIND服務(wù)器,還可以有1臺PowerDNS服務(wù)器,這是完全支持的。

服務(wù)器池的引入目的:

  1. 細(xì)化域名托管的顆粒度。用戶請求托管的域名可以委派到某一個服務(wù)器池,而不需要在所有服務(wù)器上管理用戶的域名和資源記錄,降低了管理和運(yùn)維的復(fù)雜度。例如,abc.com委派給pool 1的DNS服務(wù)器來管理,xyz.com委派到pool N的DNS服務(wù)器來管理,……
  2. 每個服務(wù)器池可以包含多臺DNS服務(wù)器,實(shí)現(xiàn)了高可用性和冗余備份。
  3. 服務(wù)器池的劃分不受地域的限制,可以將分布在不同地域的DNS服務(wù)器劃歸到同一個池中,通過GLB和anycast路由技術(shù)可以實(shí)現(xiàn)就近DNS查詢和負(fù)載均衡,加快DNS查詢速度。

官方文檔上給了一個多個池的使用場景:

The idea is that we’ll configure our pools to support different usage levels. We’ll define a gold and standard level and put zones in each based on the tenant.

Our gold level will provide 6 nameservers that users have access to where our standard will only provide 2. Both pools will have one master target we write to.
即通過配置不同的池來支持不同的用戶等級。

黃金等級的池提供6個nameservers ,而標(biāo)準(zhǔn)等級的池只提供兩個。

在mitaka版本,實(shí)現(xiàn)了CLI的方法來更新池,即通過創(chuàng)建一個yaml文件來定義池,然后通過desigante-manage來更新池,在后面的designate原理部分,貼出了一個yaml,僅供參考。

先賭為快

在講解designate模塊之前讓我們先使用puppet把我們的實(shí)驗(yàn)環(huán)境部署起來,請根據(jù)你的具體環(huán)境修改learn_designate.pp


 include '::rabbitmq'

 include '::mysql::server'

#創(chuàng)建database和user
 class {'::designate::db::mysql':

   password => $designate_db_password,

 }
#創(chuàng)建designate group 和user,安裝openstack-designate-common包,修改配置文件中rabbitmq的相關(guān)內(nèi)容
 class {'::designate':

   rabbit_host     => $rabbit_host,

   rabbit_userid   => $rabbit_userid,

   rabbit_password => $rabbit_password,

 }

 include '::designate::dns'

 #配置designate的后端DNS服務(wù)器為bind9,安裝bind9包,運(yùn)行named服務(wù),更改rndc的相關(guān)配置

 include '::designate::backend::bind9'

 class {'::designate::db':

   database_connection => "mysql://designate:${designate_db_password}@${db_host}/designate"

 }

 #populate designate database 

 include '::designate::db::sync'

#下面四個class對應(yīng)desigante的api,central,mdns,pool-manager四個服務(wù)

 class {'::designate::api':

   auth_strategy => $auth_strategy,

 }

 class {'::designate::central':

   backend_driver => $backend_driver,

 }

 include '::designate::mdns'

 class {'::designate::pool_manager': 

   pool_id => $pool_id, 

 }

在終端執(zhí)行以下命令:

puppet apply -v learn_designate.pp

ok,接下來快創(chuàng)建一個domain試試吧。

designate domain-create --name example.com. --email root@example.com

designate domain-list

核心代碼講解

backend

Designate backend支持如BIND,PowerDNS等多種類型的DNS服務(wù)器,下面只以BIND為例來講解

Designate backend 如果使用應(yīng)用最為廣泛的bind,designate會利用RNDC指令來管理DNS伺服器,所以需要更改rndc的相關(guān)配置

class designate::backend::bind9 (

 $rndc_host = '127.0.0.1',

 $rndc_port = '953',

 $rndc_config_file = '/etc/rndc.conf',

 $rndc_key_file = '/etc/rndc.key'

) {

 include ::designate
#安裝bind相關(guān)的包,更改bind相關(guān)配置項(xiàng)
 include ::dns

#配置rndc監(jiān)聽的host,port,config和key的目錄
 designate_config {

 'backend:bind9/rndc_host' : value => $rndc_host;

 'backend:bind9/rndc_port' : value => $rndc_port;

 'backend:bind9/rndc_config_file' : value => $rndc_config_file;

 'backend:bind9/rndc_key_file' : value => $rndc_key_file;

 }


#更改named.conf(或者named.options)文件,允許創(chuàng)建新的zone
 concat::fragment { 'dns allow-new-zones':

 target => $::dns::optionspath,

 content => 'allow-new-zones yes;',

 order => '20',

 }

}

puppet-designate的安裝簡單來說做了三件事:

  • 后端DNS服務(wù)器的安裝和配置,這一點(diǎn)上面已經(jīng)有過講解
  • designate相關(guān)軟件包的安裝

package { 'designate-common':

 ensure => $package_ensure,

 name => $common_package_name,

 tag => ['openstack', 'designate-package'],

 }

designate::generic_service { 'api':

 enabled => $enabled,

 manage_service => $service_ensure,

 ensure_package => $package_ensure,

 package_name => $api_package_name,

 service_name => $::designate::params::api_service_name,

 }
...

  • desingate配置文件的管理
    除了權(quán)限的相關(guān)配置,其它的配置項(xiàng)都在/etc/designate/designate.conf中
    [oslo_messaging_rabbit]下面是rabbitmq的相關(guān)參數(shù),由class designate管理:

designate_config {

 'oslo_messaging_rabbit/rabbit_userid' : value => $rabbit_userid;

 'oslo_messaging_rabbit/rabbit_password' : value => $rabbit_password, secret => true;

 'oslo_messaging_rabbit/rabbit_virtual_host' : value => $rabbit_virtual_host_real;

 'oslo_messaging_rabbit/rabbit_use_ssl' : value => $rabbit_use_ssl;

 'oslo_messaging_rabbit/kombu_ssl_ca_certs' : value => $kombu_ssl_ca_certs;

 'oslo_messaging_rabbit/kombu_ssl_certfile' : value => $kombu_ssl_certfile;

 'oslo_messaging_rabbit/kombu_ssl_keyfile' : value => $kombu_ssl_keyfile;

 'oslo_messaging_rabbit/kombu_ssl_version' : value => $kombu_ssl_version;

 'oslo_messaging_rabbit/kombu_reconnect_delay' : value => $kombu_reconnect_delay;

 }

[service:api] [service:central] [serivce:mdns] [service:pool_manager] 中的配置項(xiàng)分別由class designate::api designate::central designate::mdns designate::manager管理

designate原理

此處以具體的環(huán)境為例來介紹designate的原理
實(shí)驗(yàn)環(huán)境:

  • 系統(tǒng)為centos7.2
  • designate-api, designate-central, designate-pool-manager, designate-mdns, rabbitmq, mysql, keystone 均部署在10.0.2.250
  • bind分別部署在10.0.2.250 10.0.2.249

下面貼出pools.yaml的配置:

- also_notifies:
  - host: 10.0.2.249
    port: 53
  attributes: {}
  description: Pool built from configuration on localhost
  id: 794ccc2c-d751-44fe-b57f-8894c9f5c842
  nameservers:
  - host: 10.0.2.250
    port: 53
  - host: 10.0.2.249
    port: 53
  ns_records:
  - hostname: server-250.2.stage.polex.io.
    priority: 1
  - hostname: server-249.2.stage.polex.io.
    priority: 2
  targets:
  - masters:
    - host: 10.0.2.250
      port: 5354
    options:
      rndc_config_file: /etc/rndc.conf
      rndc_host: 127.0.0.1
      rndc_key_file: /etc/rndc.key
      rndc_port: '953'
    type: bind9
  - masters:
    - host: 10.0.2.250
      port: 5354
    options:
      rndc_config_file: /etc/rndc.conf
      rndc_host: 10.0.2.249
      rndc_key_file: /etc/rndc.key
      rndc_port: '953'
    type: bind9

Designate工作流程:

  • 用戶請求designate-api,添加record或者domain
  • designate-api發(fā)送請求至mq中
  • designate-central接收到mq請求,寫入db,同時通過mq觸發(fā)pool_manager進(jìn)行更新操作
  • pool_manager通過rndc(addzone/delzone/notifyzone)三個操作來通知pool_targets中定義的bind來進(jìn)行操作
  • bind使用axfr來請求同步mdns
  • mdns從數(shù)據(jù)庫中讀取相應(yīng)的domain信息來響應(yīng)axfr請求

Target vs. Nameserver

當(dāng)通過designate 增加/修改/刪除記錄時,會通過target 去write changes。
當(dāng)dns客戶端去查詢記錄時,則會通過nameserver.
以本次實(shí)驗(yàn)環(huán)境為例,當(dāng)通過designate創(chuàng)建一個名為example.com的domain時,安裝上面的pool.yaml配置,相當(dāng)于執(zhí)行了這兩條命令:

rndc -s 127.0.0.1 -p 953 -c /etc/rndc.conf -k /etc/rndc.key addzone example.com '{ type slave; masters { 10.0.2.250 port 5354; }; file "slave.example.com.75c9e003-a8f4-4771-a94e-4481ee019f1f"; };'
rndc -s 10.0.2.249 -p 953 -c /etc/rndc.conf -k /etc/rndc.key addzone example.com '{ type slave; masters { 10.0.2.250 port 5354; }; file "slave.example.com.75c9e003-a8f4-4771-a94e-4481ee019f1f"; };'

可以看到這些配置項(xiàng)都是在target中定義的。
一個要解析的域名就是一個zone,一個zone對應(yīng)/var/named/目錄下的一個zone_file.在250和249機(jī)器上,都能找到新創(chuàng)建的這個文件:

[root@server-250.2.stage.polex.io named ]$ ll
total 32
-rw-r--r--. 1 named named  544 Nov  3 17:50 3bf305731dd26307.nzf
drwxrwx---. 3 named named   70 Nov  3 17:35 data
drwxrwx---. 2 named named   58 Nov  4 16:32 dynamic
-rw-r-----. 1 root  named 2076 Jan 28  2013 named.ca
-rw-r-----. 1 root  named  152 Dec 15  2009 named.empty
-rw-r-----. 1 root  named  152 Jun 21  2007 named.localhost
-rw-r-----. 1 root  named  168 Dec 15  2009 named.loopback
drwxr-x---. 2 root  named    6 Oct 19 14:03 puppetstore
-rw-r--r--. 1 named named  409 Nov  4 19:12 slave.example.com.75c9e003-a8f4-4771-a94e-4481ee019f1f
drwxrwx---. 2 named named    6 Mar 16  2016 slaves

通過dig 查詢創(chuàng)建的server1.example.com記錄時,返回信息為:

[root@server-250.2.stage.polex.io ~ ]$ dig server1.example.com @10.0.2.250

; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7_2.3 <<>> server1.example.com @10.0.2.250
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 31922
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;server1.example.com.       IN  A

;; ANSWER SECTION:
server1.example.com.    3600    IN  A   1.2.3.4

;; AUTHORITY SECTION:
example.com.        3600    IN  NS  server-249.2.stage.polex.io.
example.com.        3600    IN  NS  server-250.2.stage.polex.io.

;; Query time: 0 msec
;; SERVER: 10.0.2.250#53(10.0.2.250)
;; WHEN: Fri Nov 04 18:45:55 CST 2016
;; MSG SIZE  rcvd: 130

Hidden Master

前面有提到過,當(dāng)我們創(chuàng)建一個名為example.com的domain時,執(zhí)行的rndc命令都指定master host:10.0.2.250, port:5354
在designate.conf的定義中,我們可以看到:

[service:mdns]
threads = 1000
host = 0.0.0.0
port = 5354
tcp_backlog = 100
tcp_recv_timeout = 0.5
query_enforce_tsig = False

5354是service designate-mdns監(jiān)聽的端口。
所以說,250,249兩臺機(jī)器上的bind都是使用axfr來請求同步mdns,它們的記錄都是同步過來的(所以某種意義上講,它們都是slave節(jié)點(diǎn))。
這樣的好處就是,如果250,249有公網(wǎng)ip,它的53接口能被訪問,那么它的記錄是不能通過外網(wǎng)來更改的(外網(wǎng)只能查詢),對于dns記錄的更改只能通過內(nèi)網(wǎng)(10.0.2.250)designate api的方式。

使用場景

解析私有域名

#創(chuàng)建一個domain
designate domain-create --name example03.com. --email root@example.com
#創(chuàng)建一條記錄
designate record-create --name server1.example03.com. --type A --data 1.2.3.4 ec5818c9-c9ca-4bd2-8ad4-4a964a39a24b
#使用dig測試
[root@server-250.2.stage.polex.io named ]$ dig @10.0.2.250 server1.example03.com

; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7_2.3 <<>> @10.0.2.250 server1.example03.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 51643
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;server1.example03.com.     IN  A

;; ANSWER SECTION:
server1.example03.com.  3600    IN  A   1.2.3.4

;; AUTHORITY SECTION:
example03.com.      3600    IN  NS  server-250.2.stage.polex.io.
example03.com.      3600    IN  NS  server-249.2.stage.polex.io.

;; Query time: 0 msec
;; SERVER: 10.0.2.250#53(10.0.2.250)
;; WHEN: Fri Nov 04 19:20:58 CST 2016
;; MSG SIZE  rcvd: 132


與nova和neutron集成

designate-sink 通過nova handler 和 neutron handler,自動生成域名資源記錄,比如當(dāng)監(jiān)聽到Nova的compute.instance.create.end事件通知后,自動創(chuàng)建一條對應(yīng)于剛創(chuàng)建的實(shí)例的A記錄;當(dāng)監(jiān)聽到Nuetron的floatingip.update.end事件通知后,自動更新一條相應(yīng)的A記錄。
一個domain如下:

designate record-list 98775b46-c868-4dd8-94fd-6bd789a5dbaa
+--------------------------------------+------+-----------------+-------------------------------------------------------------------------+
| id                                   | type | name            | data                                                                           |
+--------------------------------------+------+-----------------+--------------------------------------------------------------------------------+
| e61e814f-5bd4-4de8-9c11-5c87fe1b2799 | SOA  | bluesky.edu.au. | hurricane109.in.vpac.org. hostmaster.v3.org.au. 1412735313 3600 600 86400 3600 |
+--------------------------------------+------+-----------------+--------------------------------------------------------------------------------+

當(dāng)創(chuàng)建一個虛擬機(jī)后,自動創(chuàng)建一條A記錄:

designate record-list 98775b46-c868-4dd8-94fd-6bd789a5dbaa
+--------------------------------------+------+------------------------+--------------------------------------------------------------------------------+
| id                                   | type | name                   | data                                                                           |
+--------------------------------------+------+------------------------+--------------------------------------------------------------------------------+
| 680eb3f5-016f-45a3-ac34-e79ff46bf8df | SOA  | bluesky.edu.au.        | hurricane109.in.vpac.org. hostmaster.v3.org.au. 1412739659 3600 600 86400 3600 |
| c66481bd-bd4f-4f90-976a-67b6654c4c60 | A    | phobos.bluesky.edu.au. | 10.0.0.7                                                                       |
+--------------------------------------+------+------------------------+--------------------------------------------------------------------------------+

小結(jié)

puppet-designate需要配置的文件僅有designate.conf,為了方便管理與配置,puppet把使用到的四個服務(wù)都分別寫為了一個.pp的類,這樣也方便我們管理這些配置項(xiàng)。這里講解到功能沒有涉及到跟nova,neutron的集成,集成之后的效果是當(dāng)創(chuàng)建虛擬機(jī)或創(chuàng)建浮動IP后,創(chuàng)建的虛擬機(jī)或浮動ip的A記錄記錄會自動同步相應(yīng)的zone 中 ,有興趣的同學(xué)可以在官網(wǎng)查看。

動手練習(xí)

1.部署分布式的backend后端,并使用不同的DNS Server(BIND,PowerDNS,MysqlBIND)作存儲后端。

2.手動配置多個pool,不同的pool管理的各自的DNS Server(通過創(chuàng)建yaml文件,使用designate-manage命令實(shí)現(xiàn))。

3.安裝designate-sink服務(wù),修改nova.conf和neutron.conf相應(yīng)配置,創(chuàng)建虛擬機(jī)或floating ip ,觀察designate record的變化。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,699評論 19 139
  • 1. 概述 在網(wǎng)絡(luò)環(huán)境中一般用戶只需要在瀏覽器中輸入url如www.sunny.com就可以到對應(yīng)服務(wù)器獲取相應(yīng)的...
    ghbsunny閱讀 3,447評論 0 7
  • 1、第八章 Samba服務(wù)器2、第八章 NFS服務(wù)器3、第十章 Linux下DNS服務(wù)器配站點(diǎn),域名解析概念命令:...
    哈熝少主閱讀 3,918評論 0 10
  • 第一章 Nginx簡介 Nginx是什么 沒有聽過Nginx?那么一定聽過它的“同行”Apache吧!Ngi...
    JokerW閱讀 33,040評論 24 1,002
  • 1、復(fù)制概述: MySQL內(nèi)建的復(fù)制功能是構(gòu)建大型,高性能應(yīng)用程序的基礎(chǔ)。將mysql的數(shù)據(jù)分布到多個系統(tǒng)上去,這...
    魔法師_閱讀 5,759評論 0 5

友情鏈接更多精彩內(nèi)容