OpenStack Ussuri : Designate

OpenStack Ussuri : Designate

OpenStack Ussuri : Designate

 -----------------------         -----------------------        -----------------------
|  [ Controller Node ]  |       |    [ Compute Node ]   |      |   [ Network Node ]    | 
|                       |       |        Libvirt        |      |     Open vSwitch      |
| MariaDB    RabbitMQ   |       |      Nova compute     |      |       L2 Agent        |
| Memcached  Keystone   |       |      Open vSwitch     |      |       L3 Agent        |
| httpd      Cinder API |       |       L2 Agent        |      |     metadata agent    |
| Nova-API   Compute    |       |      Cinder-LVM       |      |      Swift-proxy      |
| L2 agent   L3 agent   |       |          NFS          |      |       Heat API        |
| metadata agent        |        -----------------------       |        API-CFN        |
| Neutron Server        |                                      |      Heat Engine      |
| Gnocchi    Trove API  |                                      |   Designate Services  |
 -----------------------                                        -----------------------

OpenStack Ussuri : Designate

  • Designate는 OpenStack 서비스에서 DNS 서비스를 배포, 관리를 담당합니다.
  • Desigante는 Network node의 설치를 진행하고, controller node의 API를 이용하겠습니다.
  • Designate의 보다 자세한 설명은 Designate를 참조해주세요.

 

Designate service 및 User 생성

$ controller ~(keystone)> openstack user create --domain default --project service --password qwer1234 designate
+---------------------+----------------------------------+
| Field               | Value                            |
+---------------------+----------------------------------+
| default_project_id  | b470c69e28db47cdbfc81e06cc67f627 |
| domain_id           | default                          |
| enabled             | True                             |
| id                  | 7563701765d24b4884c0b324b7997530 |
| name                | designate                        |
| options             | {}                               |
| password_expires_at | None                             |
+---------------------+----------------------------------+

$ controller ~(keystone)> openstack role add --project service --user designate admin
$ controller ~(keystone)> openstack service create --name designate --description "OpenStack DNS Service" dns
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | OpenStack DNS Service            |
| enabled     | True                             |
| id          | 0e7dacc11b5b48c099d3fe110f8b8197 |
| name        | designate                        |
| type        | dns                              |
+-------------+----------------------------------+

$ controller ~(keystone)> openstack endpoint create --region RegionOne dns public http://network:9001/
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | 20b26900a14d44209ade2fab0a0f3bbc |
| interface    | public                           |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | 0e7dacc11b5b48c099d3fe110f8b8197 |
| service_name | designate                        |
| service_type | dns                              |
| url          | http://network:9001/             |
+--------------+----------------------------------+

$ controller ~(keystone)> openstack endpoint create --region RegionOne dns internal http://network:9001/
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | 856883757b604b93a1273ecc4775f549 |
| interface    | internal                         |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | 0e7dacc11b5b48c099d3fe110f8b8197 |
| service_name | designate                        |
| service_type | dns                              |
| url          | http://network:9001/             |
+--------------+----------------------------------+

$ controller ~(keystone)> openstack endpoint create --region RegionOne dns admin http://network:9001/
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | c6fef7cbb6a848228fa8ef4067ebcc49 |
| interface    | admin                            |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | 0e7dacc11b5b48c099d3fe110f8b8197 |
| service_name | designate                        |
| service_type | dns                              |
| url          | http://network:9001/             |
+--------------+----------------------------------+

Designate 유저의 DB를 생성합니다.

$ controller> mysql -u root -p
$ MariaDB> create database designate;  
$ MariaDB> grant all privileges on designate.* to designate@'localhost' identified by 'qwer1234'; 
$ MariaDB> grant all privileges on designate.* to designate@'%' identified by 'qwer1234'; 
$ MariaDB> flush privileges; 
$ MariaDB> exit;

 

Network Node Desigante 설치

$ network> dnf --enablerepo=centos-openstack-ussuri,powertools,epel -y install openstack-designate-api openstack-designate-central openstack-designate-worker openstack-designate-producer openstack-designate-mdns python3-designateclient bind bind-utils
# designate 및 관련 모듈을 설치합니다.

$ network> rndc-confgen -a -k designate -c /etc/designate.key -r /dev/urandom
$ network> chown named:designate /etc/designate.key
$ network> chmod 640 /etc/designate.key
# 역할기반 키를 생성하고 권한을 설정합니다.

$ network> cp /etc/named.conf /etc/named.conf.backup
$ network> vi /etc/named.conf
options {
        listen-on port 53 { any; };
        listen-on-v6 port 53 { none; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        # replace query range to your environment
        allow-query     { localhost; 10.10.10.0/24; };
        allow-new-zones yes;
        request-ixfr no;
        recursion no;
        bindkeys-file "/etc/named.iscdlv.key";
        managed-keys-directory "/var/named/dynamic";
        pid-file "/run/named/named.pid";
        session-keyfile "/run/named/session.key";
};
include "/etc/designate.key";
controls {
    inet 0.0.0.0 port 953
    allow { localhost; } keys { "designate"; };
};
logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};
zone "." IN {
        type hint;
        file "named.ca";
};
$ network> chmod 640 /etc/named.conf
$ network> chgrp named /etc/named.conf
$ network> chown -R named. /var/named
$ network> systemctl enable --now named
# named dns 서비스를 시작합니다.

$ network> vi /etc/designate/designate.conf
[DEFAULT]
log_dir = /var/log/designate
transport_url = rabbit://openstack:qwer1234@controller
root_helper = sudo designate-rootwrap /etc/designate/rootwrap.conf

[database]
connection = mysql+pymysql://designate:qwer1234@controller/designate

[service:api]
listen = 0.0.0.0:9001
auth_strategy = keystone
api_base_uri = http://network:9001
enable_api_v2 = True
enabled_extensions_v2 = quotas, reports

[keystone_authtoken]
www_authenticate_uri = http://controller:5000
auth_url = http://controller:5000
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = designate
password = qwer1234

[service:worker]
enabled = True
notify = True

[storage:sqlalchemy]
connection = mysql+pymysql://designate:qwer1234@controller/designate

$ network> su -s /bin/bash -c "designate-manage database sync" designate
$ network> systemctl enable --now designate-central designate-api
# designate api db를 임포트 시키고 서비스를 시작 및 등록합니다.

$ network> vi /etc/designate/pools.yaml
- name: default
  description: Default Pool
  attributes: {}
  ns_records:
    - hostname: network
      priority: 1
  nameservers:
    - host: network
      port: 53
  targets:
    - type: bind9
      description: BIND9 Server
      masters:
        - host: network
          port: 5354
      options:
        host: network
        port: 53
        rndc_host: network
        rndc_port: 953
        rndc_key_file: /etc/designate.key

$ network> chmod 640 /etc/designate/pools.yaml
$ network> chgrp designate /etc/designate/pools.yaml
$ network> su -s /bin/bash -c "designate-manage pool update" designate
$ network> systemctl enable --now designate-worker designate-producer designate-mdns
# designate pool db를 임포트 시키고 서비스를 시작 및 등록합니다.

$ network> setsebool -P named_write_master_zones on
$ network> firewall-cmd --add-service=dns --permanent
$ network> firewall-cmd --add-port={5354/tcp,9001/tcp} --permanent
$ network> firewall-cmd --reload
# SELinux 및 방화벽을 설정합니다.

 

확인

$ controller ~(keystone)> openstack dns service list
+--------------------------------------+----------+--------------+--------+-------+--------------+
| id                                   | hostname | service_name | status | stats | capabilities |
+--------------------------------------+----------+--------------+--------+-------+--------------+
| 43f62f8d-20bc-43b9-8c64-758ac0a2a074 | network  | central      | UP     | -     | -            |
| ab90b2dc-381d-4ca8-ae66-fad57a9f9c11 | network  | api          | UP     | -     | -            |
| 2dbc8027-0c6a-4c4a-b7a0-92a2b19517a7 | network  | worker       | UP     | -     | -            |
| 502ce893-3256-432f-9c6f-2353078ee585 | network  | producer     | UP     | -     | -            |
| 078b306a-e3bb-461d-9c97-71679c9f8830 | network  | mdns         | UP     | -     | -            |
+--------------------------------------+----------+--------------+--------+-------+--------------+

$ controller ~(keystone)> openstack zone create --email dnsmaster@server.education server.education.

$ controller ~(keystone)> openstack zone list

$ controller ~(keystone)> openstack recordset create --record '192.168.100.10' --type A server.education. node01

$ controller ~(keystone)> openstack recordset list server.education.

$ controller ~(keystone)> dig -p 5354 @network.srv.world node01.server.education.

$ controller ~(keystone)> openstack zone create --email dnsmaster@server.education 100.168.192.in-addr.arpa.

$ controller ~(keystone)> openstack zone list

$ controller ~(keystone)> openstack recordset create --record 'node01.server.education.' --type PTR 100.168.192.in-addr.arpa. 10

$ controller ~(keystone)> openstack recordset list 100.168.192.in-addr.arpa.

$ controller ~(keystone)> dig -p 5354 @network.srv.world -x 192.168.100.10

$ controller ~(keystone)> openstack recordset list server.education.

$ controller ~(keystone)> openstack recordset delete server.education. node01.server.education.

$ controller ~(keystone)> openstack recordset list server.education.

$ controller ~(keystone)> openstack zone list

$ controller ~(keystone)> openstack zone delete server.education.

$ controller ~(keystone)> openstack zone list

 

RSS Feed
마지막 수정일자