Setting Up Google Cloud DNS with gcloud
Table of Contents
Of all the things to outsource, mail and DNS should be first. :)
I’m going to migrate my serverascode.com domain DNS from an old hosting company to Google Cloud DNS. Finally.
I also have some DNS hosting done with AWS Route 53, but I am trying to learn more about gcloud. Also, I think hosting DNS at Google is slightly cheaper, in that each “zone” is $0.20/month vs $0.50/month at AWS. Each charges $0.40 for some huge number of DNS requests.
One thing I find that is a problem with gcloud is that there is very little documentation outside of gclouds official docs. I am not really a fan of any of the official docs, be it for AWS or gcloud…they always read like autogenerated API docs. Also I find gclouds look, feel, and organization to be difficult to grasp.
I’m only going to use the gcloud command line.
Setting Up the DNS Project
First, setup a new project. I’m not sure if the best way to use gcloud is to setup multiple projects, but I’m going to setup a DNS hosting project.
NOTE: Replace “some-uuid” with some kind of random string. Projects need to have a unique name.
$ gcloud projects create dns-hosting-<some-uuid> --name "DNS Hosting"
List your billing accounts. This assumes you have setup at least one account for billing.
$ gcloud alpha billing accounts list
ID NAME OPEN
<billing account ID> My Billing Account
Switch to the DNS project.
$ gcloud config set project dns-hosting-<some-uuid>
Updated property [core/project].
Assign a billing account to the DNS project.
$ gcloud alpha billing accounts projects link dns-hosting-<some-uuid> --account-id=<billing account ID>
Now the project can be billed.
Enable the DNS API on this project.
$ gcloud services enable dns.googleapis.com
DNS should be in the list of available services for this project.
$ gcloud services list
NAME TITLE
bigquery-json.googleapis.com BigQuery API
cloudtrace.googleapis.com Stackdriver Trace API
servicemanagement.googleapis.com Google Service Management API
monitoring.googleapis.com Stackdriver Monitoring API
storage-api.googleapis.com Google Cloud Storage JSON API
dns.googleapis.com Google Cloud DNS API
logging.googleapis.com Stackdriver Logging API
clouddebugger.googleapis.com Stackdriver Debugger API
datastore.googleapis.com Google Cloud Datastore API
sql-component.googleapis.com Google Cloud SQL
cloudapis.googleapis.com Google Cloud APIs
storage-component.googleapis.com Google Cloud Storage
Now for the actual DNS setup.
Setting Up DNS Zone
Now that the project is created and has a billing account we can setup the DNS zone.
$ gcloud dns managed-zones create --dns-name="serverascode.com." --description="serverascode"
List zones.
$ gcloud dns managed-zones list
NAME DNS_NAME DESCRIPTION
serverascode serverascode.com. serverascode
The process is:
- Start the transaction
- Make changes, add DNS records, etc
- Execute the transaction
Start a DNS zone editing transaction.
$ gcloud dns record-sets transaction start --zone=serverascode
A transaction.yaml
file will be created where ever you run this command. Further commands will edit this file, and then finally we will execute this file to push the changes up to gcloud.
Add an A record. In this example I am pointing serverascode.com
to Github’s page servers.
$ gcloud dns record-sets transaction add --zone=serverascode --name="serverascode.com" --ttl 3600 --type A 192.30.252.153 192.30.252.154
Add a CNAME for www.
$ gcloud dns record-sets transaction add -z=serverascode --type=CNAME --name="www.serverascode.com" --ttl 3600 "serverascode.com."
If you host your mail somewhere for this domain, add MX records. Here I enter two mail hosts.
gcloud dns record-sets transaction add --zone=serverascode --name="serverascode.com" --ttl 3600 --type MX "10 mail1.somemailhost.com." "20 mail2.somemailhost.com."
Finally execute those changes.
$ gcloud dns record-sets transaction execute --zone serverascode
And once they have been pushed we can list them.
$ gcloud dns record-sets list --zone=serverascode
NAME TYPE TTL DATA
serverascode.com. A 3600 192.30.252.153,192.30.252.154
serverascode.com. MX 3600 10 mail1.somemailhost.com.,20 mail2.somemailhost.com.
serverascode.com. NS 21600 ns-cloud-d1.googledomains.com.,ns-cloud-d2.googledomains.com.,ns-cloud-d3.googledomains.com.,ns-cloud-d4.googledomains.com.
serverascode.com. SOA 21600 ns-cloud-d1.googledomains.com. cloud-dns-hostmaster.google.com. 6 21600 3600 259200 300
www.serverascode.com. CNAME 3600 serverascode.com.
If that looks good then go to your registar and change the nameservers to Google’s, which is what I did.
If you are reading this post then it must have worked!