[Cloud]/OpenStack

OpenStack Designate(DNSaaS) 이해 및 활용

ByoungHee Lee 2023. 1. 5. 12:30

DNS란?

DNS(Domain Name System)는 네트워크에 연결된 리소스의 이름을 지정하는 시스템으로 도메인 이름과 연결된 IP 주소와 같은 다양한 유형의 레코드를 저장하여 작동하는 도메인 네임 시스템입니다. 이 시스템은 이러한 레코드를 포함하는 신뢰할 수 있는 nameserver와 레코드에 대해 nameserver를 쿼리하는 해석기에 의해 구현됩니다. 이름은 영역의 계층 구조로 구분되어 레코드를 사용하여 책임을 위임함으로써 서로 다른 이름 서버가 별도의 영역 그룹을 담당할 수 있습니다.

"."인 루트 영역은 다양한 TLD(최상위 도메인)를 다른 이름 서버에 위임하는 레코드로 구성됩니다. TLD 이름 서버에는 example.com 레코드가 있는 .com 이름 서버와 같은 TLD 내의 도메인에 대한 레코드와 영역을 다른 이름 서버에 위임하는 레코드(예: openstack.org)가 자체 nameserver를 포함할 수 있습니다. 그런 다음 cloud.openstack.org를 만들 수 있습니다.

resolvers는 종종 사용자 컴퓨터의 라이브러리에 불과한 stup resolver와 결과를 사용자에게 반환하기 전에 네임서버에 대해 쿼리를 수행하는 recursive의 두 부분으로 구성됩니다. 도메인을 검색할 때 resolver는 도메인의 끝에서 시작하여 처음으로 되돌아갑니다.

예를 들어 아래 다이어그램에서 cloud.openstack.org를 검색하면 루트 이름 서버 "."로 시작하고 ".org" 이름 서버의 위치로 응답합니다. 그러면 resolver는 ".org" 이름 서버에 접속하여 "openstack.org" 이름 서버를 얻고 거기에서 최종적으로 "cloud.openstack.org" 레코드를 가져와서 사용자에게 반환할 수 있습니다.

 

Designate 소개

Designate는 사용자와 운영자가 REST API를 통해 DNS 레코드, names 및 zones을 관리하고 이러한 레코드를 포함하도록 기존 DNS 이름 서버를 구성할 수 있는 OpenStack 서비스입니다. 또한 Designate는 운영자가 OpenStack 네트워크 서비스(Neutron) 및 Compute 서비스(Nova) 모두와 통합하도록 구성할 수 있으므로 Floating IP 및 컴퓨팅 인스턴스가 각각 생성될 때 레코드가 자동으로 생성되고 OpenStack Identity 서비스(Keystone)를 사용합니다.  사용자 관리를 위해. DNS 이름 서버의 소프트웨어 구현이 많기 때문에 Designate에는 BIND9 및 PowerDNS와 같이 많은 것을 관리하도록 구성할 수 있는 플러그형 백엔드가 있습니다.

Designate Architecture

Designate는 API, Producer, Central, Worker 및 Mini DNS와 같은 여러 서비스로 구성됩니다. oslo.db 호환 데이터베이스를 사용하여 상태 및 데이터를 저장하고 oslo.messaging 호환 메시지 대기열을 사용하여 서비스 간의 통신을 용이하게 합니다. 모든 Designate 서비스는 병렬로 실행하여 고가용성(active-active) 을 제공합니다. 

Designate services:

  • API
  • Producer
  • Central
  • Worker
  • Mini DNS

다음으로는, 사용자/운영자가 OpenStack Designate을 이용하여 DNS 레코드, names 및 zones을 등록 및 관리하고 이러한 레코드를 포함시켜 기존 DNS 이름 서버에 구성하는 것을 검증하도록 하겠습니다. 

Designate 기능 검증 환경:

  • Red Hat Enterprise Linux 9
  • Red Hat OpenStack Platform 17
  • DNS on Controller
  • Floating IP에 Domain Name 부여 
  • Project : designate, User: tester

 

Zone 생성

최상위 도메인(TLD, top-level domains)은 사용자가 zones을 생성하여 도메인을 제한할 수 있습니다. TLD는 .org와 같이 루트 바로 아래에 상주하는 도메인 집합을 나타냅니다. 사용자가 생성하는 zones은 최소 하나의 TLD 내에 존재하도록 하도록 해야 합니다. 이번 검증에서는 .org TLD 내에 zones을 생성하도록 하겠습니다. 

(tester) [stack@dir-osp17 ~]$ openstack zone create --email dnsprimary@openstack.org openstack.org. --sudo-project-id <project-id>
 

Tenant 네트워크/서브넷 생성

사용자가 특정 프로젝트에서 사용할 네트워크 및 서브넷을 생성합니다. 

(tester) [stack@dir-osp17 ~]$ openstack network create --dns-domain openstack.org. \
--provider-segment 3001 --provider-network-type geneve \
openstack-network

(tester) [stack@dir-osp17 ~]$ openstack subnet create \
  --allocation-pool start=192.168.100.10,end=192.168.100.200 \
  --network openstack-network \
  --subnet-range 192.168.100.0/24 \
  openstack-subnet

 

라우터 생성, 외부(Floating)네트워크 생성 및 tenant 네트워크와 연동

DNS와 연동이 가능한 Floating 네트워크 10.xx.xx.0/23를 생성하고 라우터를 통해 Floating 네트워크와 Tenant 네트워크를 연결해 줍니다. 다음으로는 DNS Name = cloud1/cloud2, DNS Domain openstack.org. 를 갖는 Floaing IP를 프로젝트에 할당해 줍니다. 

 

인스턴스 생성 및 Floating IP 연동

cloud-1, cloud-2 이름의 인스턴스를 생성하고 앞서 생성한 Floating IP를 연결해 줍니다. 

 

네트워크 토폴로지(R1, openstack-network, external-net, cloud-1/cloud-2 VMs)

R1 라우터, openstack-network Tenant 네트워크, 외부 Floating external-net, cloud-1/cloud-2 인스턴스 간의 네트워크 토폴로지는 다음 다이어그램과 같습니다.  

 

이제 앞서 만든 cloud-1.openstack.org와 cloud-2.openstack.org 주소와 IP가  정상적으로 DNS에 등록이 되었는지 확인을 하고 연결에 대한 검증을 하겠습니다. 

도메인 네임 연결 검증 

10.xx.xx.223 DNS 서버에 cloud-1.openstack.org 도메인 네임과 IP가 등록되었는지 쿼리하여 확인

10.xx.xx.223 DNS 서버에 cloud-2.openstack.org 도메인 네임과 IP가 등록되었는지 쿼리하여 확인

마지막으로, DNS에 등록된 도메인 네임(cloud-1.openstack.org, cloud-2.openstack.org)에 Ping을 통해 네트워크 연결을 검증하겠습니다. 

 

# 참조

[1] DNS, Desginate Definition & Architecture: https://docs.openstack.org/designate/latest/intro/index.html