Bug Reference

CLOUDSTACK-6998

Branch

At this moment, we're using our own repository, branch 4.3.0-globodns: https://github.com/globocom/cloudstack/tree/4.3.0-globodns. However, we hope to commit these changes to branch 4.5 in Cloudstack repository.

Introduction

When deploying Advanced Networks, Virtual Routers are used to isolate networks and provide DNS service for all machines inside each network. While this approach is better for keeping networks more secure and self-contained, it imposes a challenge when machines need to translate names that belong to machines from another network, i.e. machine in network A needs to find the IP address of a machine in network B.


A common solution for this problem is to make sure the Virtual Router from network B has its name translated from network A, but this does not scale to a corporate network, where you need to translate domain names of every machine from every network.


We tackled this problem by using a centralized DNS server, which is external to all networks in Cloudstack. That way, every machine is registered in that server and every other machine can translate its name by accessing that server as well. This server can run any known enterprise DNS server, such as Bind, and provide its services through an external API.


This proposal includes both GloboDNS (an API to manage DNS zones and domains) to be run in a DNS server and a plugin designed for integrating virtual machines and virtual networks in Cloudstack with GloboDNS.


Purpose

Allow Cloudstack to manage DNS domains and records in Bind DNS, through GloboDNS (https://github.com/globocom/GloboDNS).

References

Document History

Glossary

Feature Specifications


Open Issues:


Test Scenarios

Features

 

CallOverride
(globodns.override.entries)
Domain exists?Record exists?ActionTest
Create domainYesYes--INFO 
Create domainYesNo--Create domainOK
Create domainNoYes--INFOOK
Create domainNoNo--Create domain 
Create recordYesYesYesOverride recordOK
Create recordYesYesNoCreate recordOK
Create recordYesNo--Create domain & recordOK
Create recordYesNo--Create domain & record 
Create recordNoYesYesERROROK
Create recordNoYesNoCreate record 
Create recordNoNo--Create domain & recordOK
Create recordNoNo--Create domain & record 
Remove recordYesYesYesRemove recordOK
Remove recordYesYesNoINFO 
Remove recordYesNo--INFO 
Remove recordYesNo--INFO 
Remove recordNoYesYesIf record is exactly same, remove record
Otherwise, INFO
OK
Remove recordNoYesNoINFO 
Remove recordNoNo--INFO 
Remove recordNoNo--INFO 
Remove domainYesYes--Remove domainOK
Remove domainYesNo--INFO 
Remove domainNoYes--If no more records, remove domain
Otherwise, WARN
OK
Remove domainNoNo--INFO 

 

Changes in code:

 

Use cases

Enable plugin in Zone

Disable plugin in Zone

Put GloboDNS as DNS service in network offering

Create a new network with GloboDNS as DNS service

Destroy network with GloboDNS

Allocate a new NIC

Release NIC

Architecture and Design description

 


Web Services APIs

addGloboDnsHost: configure GloboDNS credentials and endpoint in Zone. Needs to be called before plugin is enabled in zone.

UI flow