Advanced DNS with Consul Service Discovery
Edgaras Apšega
Lead IT Systems Engineer
Adform
@apsega
Cloud Native Lithuania
Slide 2
Slide 2 text
$ whoami
Edgaras Apšega
Systems Engineer @ Adform
Slide 3
Slide 3 text
Agenda
Why DNS is not perfect?
Why do we need Service Discovery?
What problems does HashiCorp Consul solve?
Cloud Native Lithuania
Slide 4
Slide 4 text
DNS
Slide 5
Slide 5 text
DNS
Translates Domain
names to IP
addresses;
Typically A type
records with TTL.
Slide 6
Slide 6 text
TERMINAL
> dig +short apsega.lt
104.24.102.191
104.24.102.192
> curl -sI 104.24.102.191 | head -1
HTTP/1.1 200 OK
> curl -sI 104.24.102.192 | head -1
HTTP/1.1 503 Service Temporarily Unavailable
DNS query
DNS balances queries
between domain
name records;
Are all servers under
DNS responding
correctly?
Slide 7
Slide 7 text
Service Discovery
Slide 8
Slide 8 text
Service
Discovery
Microservices oriented way
of communication between
services.
Slide 9
Slide 9 text
Service
Discovery
Service load balancers
aren’t efficient in a dynamic
world.
Slide 10
Slide 10 text
Eureka
Netflix
Open Source
Consul
HashiCorp
Open Source and Enterprise
ZooKeeper
Apache
Open Source
Most
popular
products
Slide 11
Slide 11 text
No content
Slide 12
Slide 12 text
Consul
architecture
All the agents that are in
a datacenter participate
in a gossip protocol;
The servers in each
datacenter are all part
of a single Raft peer set.
Slide 13
Slide 13 text
HashiCorp Consul features
1. Service Discovery (DNS with 0 TTL or HTTP API with rich metadata);
2. Health Checking (HTTP, TCP, scripts);
3. Prepared Queries (failover to other datacenters based on RTT);
4. Key/Value Store (dynamic configuration, leader election);
5. Service Mesh (auto mTLS, Intentions);
Slide 14
Slide 14 text
Consul Service
Discovery with Health
Checks
Slide 15
Slide 15 text
Service
Discovery
With Health Checks
CODE EDITOR
{
"service": {
"name": "webserver",
"tags": ["production", “nginx”],
"port": 80,
"check": {
"interval": "5s",
"http": "http://localhost:80",
"timeout": "1s"
}
}
}
Slide 16
Slide 16 text
Consul UI
Displays health status of nodes
Slide 17
Slide 17 text
TERMINAL
> dig +short webserver.service.consul
10.8.192.72
10.8.192.125
> dig +short production.nginx.service.consul
10.8.192.72
> dig +short nginx.service.eu-west-1.consul
10.8.192.125
DNS
interface
1. Simple service query;
2. Service query with
tags;
3. Service query for
specific datacenter.
Slide 18
Slide 18 text
Consul UI
Displays unhealthy nodes
Slide 19
Slide 19 text
TERMINAL
> dig +short webserver.service.consul
10.8.192.125
DNS
interface
Returns only healthy nodes.
Slide 20
Slide 20 text
Live demo
Slide 21
Slide 21 text
Consul with load
balancers
Slide 22
Slide 22 text
Consul template
A convenient way to populate values from Consul into the file
Slide 23
Slide 23 text
Consul
template
with Nginx
1. Nginx upstream
configuration
2. Upstream Consul
template
CODE EDITOR
upstream from_consul
{
<…>
include /opt/consul-template.d/from_consul_nginx_upstreams.conf;
<…>
}
{{ range service ”webserver" }}
server {{ .Address }}:{{ .Port }} max_fails=1 fail_timeout=15s weight=1;
{{ else }}
server 127.0.0.1:80 max_fails=1 fail_timeout=15s weight=1;
{{ end }}
Slide 24
Slide 24 text
Consul with HAProxy
CODE EDITOR
resolvers mydns
nameserver dns1 192.168.1.253:53
accepted_payload_size 8192 # allow larger DNS payloads
backend webservers
balance roundrobin
server-template web _webserver._tcp.service.consul resolvers mydns check init-addr none
Slide 25
Slide 25 text
Consul implementation
in Adform
Slide 26
Slide 26 text
DNS forwarding
All specific domain queries are forwarded to Consul servers
Slide 27
Slide 27 text
2,300+
Registered nodes
690+
Registered services
700+
DNS Queries per second
11
Clusters
6
Production
regions
Between 8
datacenters