SlideShare a Scribd company logo
1 of 29
Download to read offline
www.eleven-labs.com
WORKSHOP
Factory
Vincent Composieux
@vcomposieux
… to beyond and
CONSULSERVICE DISCOVERY
&
FAILURE DETECTION
2013
FIRST COMMIT
WHAT ABOUT CONSUL?
Open-source & built by HashiCorp.
“Consul has multiple components,
but as a whole, it is a tool for
discovering and configuring
services in your infrastructure.”
GO
WRITTEN
WHAT ABOUT CONSUL?
FRONT 01 FRONT 02 FRONT 03
Terminal
$ curl http://frontend.eleven-labs.com ..
DNS API
UP UPDOWN
WHAT ABOUT CONSUL?
SERVICE DISCOVERY
➔ Register new services via configuration or API
➔ Access all available services or a specific one
➔ Updates automatically when new services are
available or not
FAILURE DETECTION
➔ Updates automatically Consul services when
a service is down
➔ Manages services states (we can put a
service in maintenance for instance)
CONSENSUS
PROTOCOL
http://thesecretlivesofdata.com/raft/
WHAT ABOUT CONSUL?
GOSSIP
PROTOCOL
This is for consistency:
nodes inherit from a state:
follower, candidate or
leader.
Propagation of information (epidemy)
WHAT ABOUT CONSUL?
8600
DNS
8500
HTTP
8300
8400
RPC
Use port 8300 (TCP only) but also:
➔ 8301 (TCP/UDP, Gossip over LAN)
➔ 8302 (TCP/UDP, Gossip over WAN)
This port exposes:
➔ A web UI
➔ A HTTP API
This port is used for DNS server.
Possible to override with --dns-port
WHAT ABOUT CONSUL?
https://demo.consul.io
WEB UI LOOKS LIKE THIS
SERVICE DISCOVERY
HANDS ON
swarm
→ registrator
→ ekofr/http-ip
swarm
→ registrator
→ ekofr/http-ip
ARCHITECTURE
CONSUL
(Machine / Swarm Discovery)
NODE #01
(Machine / Master)
NODE #02
(Machine)
HTTP DNS
1
2 33
DOCKER
MACHINES
1
SWARM
CLUSTER
7
DOCKER
CONTAINERS
CONSUL > Machine
Terminal
$ docker-machine create -d virtualbox consul ..
Create the “consul-master” machine under Docker,
using the Virtualbox driver.
CONSUL
(Machine)
CONSUL > Container
Terminal
$ eval $(docker-machine env consul)
$ docker run -d 
-p 8301:8301 
-p 8302:8302 
-p 8400:8400 
-p 8500:8500 
-p 53:8600/udp consul ..
Enter your consul-master environment and run the
“consul” Docker image (as server).
CONSUL
(Machine)
NODE #01 > Machine (New tab)
Terminal
$ docker-machine create -d virtualbox 
--swarm 
--swarm-master 
--swarm-discovery="consul://$(docker-machine ip consul):8500" 
--engine-opt="cluster-store=consul://$(docker-machine ip
consul):8500" 
--engine-opt="cluster-advertise=eth1:2376" swarm-node-01 ..
Create the “swarm-node-01” machine under Docker
and map Swarm discovery with Consul.
CONSUL
(Machine)
NODE #01
NODE #01 > Registrator
Terminal
$ eval $(docker-machine env swarm-node-01)
$ docker run -d 
--volume=/var/run/docker.sock:/tmp/docker.sock 
gliderlabs/registrator 
-ip $(docker-machine ip swarm-node-01) 
consul://$(docker-machine ip consul):8500 ..
Enter “swarm-node-01” machine and run a
Registrator Docker image as a daemon.
CONSUL
(Machine)
NODE #01
NODE #01 > HTTP Container
Terminal
$ docker network create 
--subnet=172.18.0.0/16 network-node-01
$ docker run -d 
--net network-node-01 
-p 80:8080 
ekofr/http-ip ..
Create a “network-node-01” Docker network and run
“ekofr/http-ip” using this network.
CONSUL
(Machine)
NODE #01
NODE #02 > Machine (New tab)
Terminal
$ docker-machine create -d virtualbox 
--swarm 
--swarm-discovery="consul://$(docker-machine ip consul):8500" 
--engine-opt="cluster-store=consul://$(docker-machine ip
consul):8500" 
--engine-opt="cluster-advertise=eth1:2376" swarm-node-02 ..
Create the “swarm-node-02” machine under Docker
and map Swarm discovery with Consul.
CONSUL
(Machine)
NODE #01 NODE #02
NODE #02 > Registrator
Terminal
$ eval $(docker-machine env swarm-node-02)
$ docker run -d 
--volume=/var/run/docker.sock:/tmp/docker.sock 
gliderlabs/registrator 
-ip $(docker-machine ip swarm-node-02) 
consul://$(docker-machine ip consul):8500 ..
Enter “swarm-node-02” machine and run a
Registrator Docker image as a daemon.
CONSUL
(Machine)
NODE #01 NODE #02
NODE #02 > HTTP Container
Terminal
$ docker network create 
--subnet=172.19.0.0/16 network-node-02
$ docker run -d 
--net network-node-02 
-p 80:8080 
ekofr/http-ip ..
Create a “network-node-02” Docker network and run
“ekofr/http-ip” using this network.
CONSUL
(Machine)
NODE #01 NODE #02
What’s happening on DNS?
Terminal
$ dig @$(docker-machine ip consul) http-ip.service.consul ..
;; QUESTION SECTION:
;http-ip.service.consul. IN A
;; ANSWER SECTION:
http-ip.service.consul. 0 IN A 192.168.99.100
http-ip.service.consul. 0 IN A 192.168.99.102
Let’s make a DNS call to ensure that our “http-ip”
service is available under 2 machines! Shutdown them!
DNS
What’s happening on DNS?
Terminal
$ dig @$(docker-machine ip consul) http-ip.service.consul SRV ..
;; ANSWER SECTION:
http-ip.service.consul. 0 IN SRV 1 1 80 c0a86366.addr.dc1.consul.
http-ip.service.consul. 0 IN SRV 1 1 80 c0a86364.addr.dc1.consul.
SRV records allows to define a priority and a weight for DNS
entries but it is not supported by Consul at this time.
You can find more information on SRV records on Wikipedia.
Add DNS to your system
Let’s make an HTTP call to ensure that both nodes
answers. Add Consul DNS server as a resolver.
CONSUL
(Machine)
Call HTTP service
Terminal
$ curl http://http-ip.service.consul
hello from 172.18.0.2
$ curl http://http-ip.service.consul ..
hello from 172.19.0.2
Now, perform your HTTP request and confirm that you are
balanced between your two machines.
HTTP DNS
FAILURE DETECTION
HANDS ON
NODE #01 > Add a HTTP check
Terminal
$ eval $(docker-machine env swarm-node-01)
$ docker kill 
$(docker ps -q --filter='ancestor=ekofr/http-ip') ..
First, kill the docker container that runs ekofr/http-ip.
We will launch it just after with a health check.
NODE #01 > Add a HTTP check
Terminal
$ docker run -d 
--net network-node-01 -p 80:8080 
-e SERVICE_CHECK_SCRIPT="curl -s -f http://$(docker-machine ip
swarm-node-01)" 
-e SERVICE_CHECK_INTERVAL=5s 
-e SERVICE_CHECK_TIMEOUT=1s 
ekofr/http-ip ..
Add a check to the ekofr/http-ip container.
We add a HTTP check here but it could be what you want.
More information about Registrator available environment variables here.
More information on Consul check definition here.
NODE #02 > Add a HTTP check
Terminal
$ eval $(docker-machine env swarm-node-02)
$ docker kill 
$(docker ps -q --filter='ancestor=ekofr/http-ip') ..
First, kill the docker container that runs ekofr/http-ip.
We will launch it just after with a health check.
NODE #02 > Add a HTTP check
Terminal
$ docker run -d 
--net network-node-02 -p 80:8080 
-e SERVICE_CHECK_SCRIPT="curl -s -f http://$(docker-machine ip
swarm-node-02)" 
-e SERVICE_CHECK_INTERVAL=5s 
-e SERVICE_CHECK_TIMEOUT=1s 
ekofr/http-ip ..
Add a check to the ekofr/http-ip container.
We add a HTTP check here but it could be what you want.
More information about Registrator available environment variables here.
More information on Consul check definition here.
Check services health via web UI
If you launch the UI, you should see your health checks:
Check services health via API
Terminal
$ curl http://$(docker-machine ip consul):8500/v1/health/checks/http-ip ..
[
{
"Status": "passing",
"Output": "hello from 172.18.0.2",
"ServiceName": "http-ip",
},
…
]
Note that you can also check your services’s health via the
Consul API “/health” endpoint:
THANK YOU

More Related Content

What's hot

openstack源码分析(1)
openstack源码分析(1)openstack源码分析(1)
openstack源码分析(1)
cannium
 
OpenNebula and SaltStack - OpenNebulaConf 2013
OpenNebula and SaltStack - OpenNebulaConf 2013OpenNebula and SaltStack - OpenNebulaConf 2013
OpenNebula and SaltStack - OpenNebulaConf 2013
databus.pro
 

What's hot (20)

Server(less) Swift at SwiftCloudWorkshop 3
Server(less) Swift at SwiftCloudWorkshop 3Server(less) Swift at SwiftCloudWorkshop 3
Server(less) Swift at SwiftCloudWorkshop 3
 
Microservices blue-green-deployment-with-docker
Microservices blue-green-deployment-with-dockerMicroservices blue-green-deployment-with-docker
Microservices blue-green-deployment-with-docker
 
Solving anything in VCL
Solving anything in VCLSolving anything in VCL
Solving anything in VCL
 
A complete guide to Node.js
A complete guide to Node.jsA complete guide to Node.js
A complete guide to Node.js
 
Advanced VCL: how to use restart
Advanced VCL: how to use restartAdvanced VCL: how to use restart
Advanced VCL: how to use restart
 
Getting Started with Consul
Getting Started with ConsulGetting Started with Consul
Getting Started with Consul
 
Service discovery like a pro (presented at reversimX)
Service discovery like a pro (presented at reversimX)Service discovery like a pro (presented at reversimX)
Service discovery like a pro (presented at reversimX)
 
VCL template abstraction model and automated deployments to Fastly
VCL template abstraction model and automated deployments to FastlyVCL template abstraction model and automated deployments to Fastly
VCL template abstraction model and automated deployments to Fastly
 
Altitude SF 2017: Debugging Fastly VCL 101
Altitude SF 2017: Debugging Fastly VCL 101Altitude SF 2017: Debugging Fastly VCL 101
Altitude SF 2017: Debugging Fastly VCL 101
 
openstack源码分析(1)
openstack源码分析(1)openstack源码分析(1)
openstack源码分析(1)
 
Test driven infrastructure
Test driven infrastructureTest driven infrastructure
Test driven infrastructure
 
Orchestration? You Don't Need Orchestration. What You Want is Choreography.
Orchestration? You Don't Need Orchestration. What You Want is Choreography.Orchestration? You Don't Need Orchestration. What You Want is Choreography.
Orchestration? You Don't Need Orchestration. What You Want is Choreography.
 
An intro to Docker, Terraform, and Amazon ECS
An intro to Docker, Terraform, and Amazon ECSAn intro to Docker, Terraform, and Amazon ECS
An intro to Docker, Terraform, and Amazon ECS
 
Puppet in the Pipeline
Puppet in the PipelinePuppet in the Pipeline
Puppet in the Pipeline
 
OpenNebula and SaltStack - OpenNebulaConf 2013
OpenNebula and SaltStack - OpenNebulaConf 2013OpenNebula and SaltStack - OpenNebulaConf 2013
OpenNebula and SaltStack - OpenNebulaConf 2013
 
Autoscaling with hashi_corp_nomad
Autoscaling with hashi_corp_nomadAutoscaling with hashi_corp_nomad
Autoscaling with hashi_corp_nomad
 
Deployment with capistrano
Deployment with capistranoDeployment with capistrano
Deployment with capistrano
 
Altitude NY 2018: Programming the edge workshop
Altitude NY 2018: Programming the edge workshopAltitude NY 2018: Programming the edge workshop
Altitude NY 2018: Programming the edge workshop
 
Beyond Breakpoints: A Tour of Dynamic Analysis
Beyond Breakpoints: A Tour of Dynamic AnalysisBeyond Breakpoints: A Tour of Dynamic Analysis
Beyond Breakpoints: A Tour of Dynamic Analysis
 
A user's perspective on SaltStack and other configuration management tools
A user's perspective on SaltStack and other configuration management toolsA user's perspective on SaltStack and other configuration management tools
A user's perspective on SaltStack and other configuration management tools
 

Similar to Workshop Consul .- Service Discovery & Failure Detection

Chris Swan ONUG Academy - Container Networks Tutorial
Chris Swan ONUG Academy - Container Networks TutorialChris Swan ONUG Academy - Container Networks Tutorial
Chris Swan ONUG Academy - Container Networks Tutorial
Cohesive Networks
 

Similar to Workshop Consul .- Service Discovery & Failure Detection (20)

Simple docker hosting in FIWARE Lab
Simple docker hosting in FIWARE LabSimple docker hosting in FIWARE Lab
Simple docker hosting in FIWARE Lab
 
Docker Security workshop slides
Docker Security workshop slidesDocker Security workshop slides
Docker Security workshop slides
 
Chris Swan ONUG Academy - Container Networks Tutorial
Chris Swan ONUG Academy - Container Networks TutorialChris Swan ONUG Academy - Container Networks Tutorial
Chris Swan ONUG Academy - Container Networks Tutorial
 
Running Docker in Development & Production (#ndcoslo 2015)
Running Docker in Development & Production (#ndcoslo 2015)Running Docker in Development & Production (#ndcoslo 2015)
Running Docker in Development & Production (#ndcoslo 2015)
 
JDO 2019: Tips and Tricks from Docker Captain - Łukasz Lach
JDO 2019: Tips and Tricks from Docker Captain - Łukasz LachJDO 2019: Tips and Tricks from Docker Captain - Łukasz Lach
JDO 2019: Tips and Tricks from Docker Captain - Łukasz Lach
 
Deploying and Scaling a Rails Application with Docker and Friends
Deploying and Scaling a Rails Application with Docker and FriendsDeploying and Scaling a Rails Application with Docker and Friends
Deploying and Scaling a Rails Application with Docker and Friends
 
Fullstack conf 2017 - Basic dev pipeline end-to-end
Fullstack conf 2017 - Basic dev pipeline end-to-endFullstack conf 2017 - Basic dev pipeline end-to-end
Fullstack conf 2017 - Basic dev pipeline end-to-end
 
Running Docker in Development & Production (DevSum 2015)
Running Docker in Development & Production (DevSum 2015)Running Docker in Development & Production (DevSum 2015)
Running Docker in Development & Production (DevSum 2015)
 
Continuous Delivery: The Next Frontier
Continuous Delivery: The Next FrontierContinuous Delivery: The Next Frontier
Continuous Delivery: The Next Frontier
 
Docker summit 2015: 以 Docker Swarm 打造多主機叢集環境
Docker summit 2015: 以 Docker Swarm 打造多主機叢集環境Docker summit 2015: 以 Docker Swarm 打造多主機叢集環境
Docker summit 2015: 以 Docker Swarm 打造多主機叢集環境
 
Integrating Consul and Puppet
Integrating Consul and PuppetIntegrating Consul and Puppet
Integrating Consul and Puppet
 
Integrating Consul and Puppet
Integrating Consul and PuppetIntegrating Consul and Puppet
Integrating Consul and Puppet
 
Higher order infrastructure: from Docker basics to cluster management - Nicol...
Higher order infrastructure: from Docker basics to cluster management - Nicol...Higher order infrastructure: from Docker basics to cluster management - Nicol...
Higher order infrastructure: from Docker basics to cluster management - Nicol...
 
Start tracking your ruby infrastructure
Start tracking your ruby infrastructureStart tracking your ruby infrastructure
Start tracking your ruby infrastructure
 
The state of the swarm
The state of the swarmThe state of the swarm
The state of the swarm
 
Harmonious Development: Via Vagrant and Puppet
Harmonious Development: Via Vagrant and PuppetHarmonious Development: Via Vagrant and Puppet
Harmonious Development: Via Vagrant and Puppet
 
Burn down the silos! Helping dev and ops gel on high availability websites
Burn down the silos! Helping dev and ops gel on high availability websitesBurn down the silos! Helping dev and ops gel on high availability websites
Burn down the silos! Helping dev and ops gel on high availability websites
 
Create and use a Dockerized Aruba Cloud server - CloudConf 2017
Create and use a Dockerized Aruba Cloud server - CloudConf 2017Create and use a Dockerized Aruba Cloud server - CloudConf 2017
Create and use a Dockerized Aruba Cloud server - CloudConf 2017
 
Things I've learned working with Docker Support
Things I've learned working with Docker SupportThings I've learned working with Docker Support
Things I've learned working with Docker Support
 
Framework Agnostic Discovery
Framework Agnostic DiscoveryFramework Agnostic Discovery
Framework Agnostic Discovery
 

Recently uploaded

Production 2024 sunderland culture final - Copy.pptx
Production 2024 sunderland culture final - Copy.pptxProduction 2024 sunderland culture final - Copy.pptx
Production 2024 sunderland culture final - Copy.pptx
ChloeMeadows1
 
audience research (emma) 1.pptxkkkkkkkkkkkkkkkkk
audience research (emma) 1.pptxkkkkkkkkkkkkkkkkkaudience research (emma) 1.pptxkkkkkkkkkkkkkkkkk
audience research (emma) 1.pptxkkkkkkkkkkkkkkkkk
lolsDocherty
 

Recently uploaded (17)

Cyber Security Services Unveiled: Strategies to Secure Your Digital Presence
Cyber Security Services Unveiled: Strategies to Secure Your Digital PresenceCyber Security Services Unveiled: Strategies to Secure Your Digital Presence
Cyber Security Services Unveiled: Strategies to Secure Your Digital Presence
 
Development Lifecycle.pptx for the secure development of apps
Development Lifecycle.pptx for the secure development of appsDevelopment Lifecycle.pptx for the secure development of apps
Development Lifecycle.pptx for the secure development of apps
 
Free scottie t shirts Free scottie t shirts
Free scottie t shirts Free scottie t shirtsFree scottie t shirts Free scottie t shirts
Free scottie t shirts Free scottie t shirts
 
Reggie miller choke t shirtsReggie miller choke t shirts
Reggie miller choke t shirtsReggie miller choke t shirtsReggie miller choke t shirtsReggie miller choke t shirts
Reggie miller choke t shirtsReggie miller choke t shirts
 
Production 2024 sunderland culture final - Copy.pptx
Production 2024 sunderland culture final - Copy.pptxProduction 2024 sunderland culture final - Copy.pptx
Production 2024 sunderland culture final - Copy.pptx
 
Bug Bounty Blueprint : A Beginner's Guide
Bug Bounty Blueprint : A Beginner's GuideBug Bounty Blueprint : A Beginner's Guide
Bug Bounty Blueprint : A Beginner's Guide
 
audience research (emma) 1.pptxkkkkkkkkkkkkkkkkk
audience research (emma) 1.pptxkkkkkkkkkkkkkkkkkaudience research (emma) 1.pptxkkkkkkkkkkkkkkkkk
audience research (emma) 1.pptxkkkkkkkkkkkkkkkkk
 
TORTOGEL TELAH MENJADI SALAH SATU PLATFORM PERMAINAN PALING FAVORIT.
TORTOGEL TELAH MENJADI SALAH SATU PLATFORM PERMAINAN PALING FAVORIT.TORTOGEL TELAH MENJADI SALAH SATU PLATFORM PERMAINAN PALING FAVORIT.
TORTOGEL TELAH MENJADI SALAH SATU PLATFORM PERMAINAN PALING FAVORIT.
 
Thank You Luv I’ll Never Walk Alone Again T shirts
Thank You Luv I’ll Never Walk Alone Again T shirtsThank You Luv I’ll Never Walk Alone Again T shirts
Thank You Luv I’ll Never Walk Alone Again T shirts
 
Premier Mobile App Development Agency in USA.pdf
Premier Mobile App Development Agency in USA.pdfPremier Mobile App Development Agency in USA.pdf
Premier Mobile App Development Agency in USA.pdf
 
I’ll See Y’All Motherfuckers In Game 7 Shirt
I’ll See Y’All Motherfuckers In Game 7 ShirtI’ll See Y’All Motherfuckers In Game 7 Shirt
I’ll See Y’All Motherfuckers In Game 7 Shirt
 
GOOGLE Io 2024 At takes center stage.pdf
GOOGLE Io 2024 At takes center stage.pdfGOOGLE Io 2024 At takes center stage.pdf
GOOGLE Io 2024 At takes center stage.pdf
 
iThome_CYBERSEC2024_Drive_Into_the_DarkWeb
iThome_CYBERSEC2024_Drive_Into_the_DarkWebiThome_CYBERSEC2024_Drive_Into_the_DarkWeb
iThome_CYBERSEC2024_Drive_Into_the_DarkWeb
 
AI Generated 3D Models | AI 3D Model Generator
AI Generated 3D Models | AI 3D Model GeneratorAI Generated 3D Models | AI 3D Model Generator
AI Generated 3D Models | AI 3D Model Generator
 
Statistical Analysis of DNS Latencies.pdf
Statistical Analysis of DNS Latencies.pdfStatistical Analysis of DNS Latencies.pdf
Statistical Analysis of DNS Latencies.pdf
 
The Rise of Subscription-Based Digital Services.pdf
The Rise of Subscription-Based Digital Services.pdfThe Rise of Subscription-Based Digital Services.pdf
The Rise of Subscription-Based Digital Services.pdf
 
Registry Data Accuracy Improvements, presented by Chimi Dorji at SANOG 41 / I...
Registry Data Accuracy Improvements, presented by Chimi Dorji at SANOG 41 / I...Registry Data Accuracy Improvements, presented by Chimi Dorji at SANOG 41 / I...
Registry Data Accuracy Improvements, presented by Chimi Dorji at SANOG 41 / I...
 

Workshop Consul .- Service Discovery & Failure Detection

  • 1. www.eleven-labs.com WORKSHOP Factory Vincent Composieux @vcomposieux … to beyond and CONSULSERVICE DISCOVERY & FAILURE DETECTION
  • 2. 2013 FIRST COMMIT WHAT ABOUT CONSUL? Open-source & built by HashiCorp. “Consul has multiple components, but as a whole, it is a tool for discovering and configuring services in your infrastructure.” GO WRITTEN
  • 3. WHAT ABOUT CONSUL? FRONT 01 FRONT 02 FRONT 03 Terminal $ curl http://frontend.eleven-labs.com .. DNS API UP UPDOWN
  • 4. WHAT ABOUT CONSUL? SERVICE DISCOVERY ➔ Register new services via configuration or API ➔ Access all available services or a specific one ➔ Updates automatically when new services are available or not FAILURE DETECTION ➔ Updates automatically Consul services when a service is down ➔ Manages services states (we can put a service in maintenance for instance)
  • 5. CONSENSUS PROTOCOL http://thesecretlivesofdata.com/raft/ WHAT ABOUT CONSUL? GOSSIP PROTOCOL This is for consistency: nodes inherit from a state: follower, candidate or leader. Propagation of information (epidemy)
  • 6. WHAT ABOUT CONSUL? 8600 DNS 8500 HTTP 8300 8400 RPC Use port 8300 (TCP only) but also: ➔ 8301 (TCP/UDP, Gossip over LAN) ➔ 8302 (TCP/UDP, Gossip over WAN) This port exposes: ➔ A web UI ➔ A HTTP API This port is used for DNS server. Possible to override with --dns-port
  • 9. swarm → registrator → ekofr/http-ip swarm → registrator → ekofr/http-ip ARCHITECTURE CONSUL (Machine / Swarm Discovery) NODE #01 (Machine / Master) NODE #02 (Machine) HTTP DNS 1 2 33 DOCKER MACHINES 1 SWARM CLUSTER 7 DOCKER CONTAINERS
  • 10. CONSUL > Machine Terminal $ docker-machine create -d virtualbox consul .. Create the “consul-master” machine under Docker, using the Virtualbox driver. CONSUL (Machine)
  • 11. CONSUL > Container Terminal $ eval $(docker-machine env consul) $ docker run -d -p 8301:8301 -p 8302:8302 -p 8400:8400 -p 8500:8500 -p 53:8600/udp consul .. Enter your consul-master environment and run the “consul” Docker image (as server). CONSUL (Machine)
  • 12. NODE #01 > Machine (New tab) Terminal $ docker-machine create -d virtualbox --swarm --swarm-master --swarm-discovery="consul://$(docker-machine ip consul):8500" --engine-opt="cluster-store=consul://$(docker-machine ip consul):8500" --engine-opt="cluster-advertise=eth1:2376" swarm-node-01 .. Create the “swarm-node-01” machine under Docker and map Swarm discovery with Consul. CONSUL (Machine) NODE #01
  • 13. NODE #01 > Registrator Terminal $ eval $(docker-machine env swarm-node-01) $ docker run -d --volume=/var/run/docker.sock:/tmp/docker.sock gliderlabs/registrator -ip $(docker-machine ip swarm-node-01) consul://$(docker-machine ip consul):8500 .. Enter “swarm-node-01” machine and run a Registrator Docker image as a daemon. CONSUL (Machine) NODE #01
  • 14. NODE #01 > HTTP Container Terminal $ docker network create --subnet=172.18.0.0/16 network-node-01 $ docker run -d --net network-node-01 -p 80:8080 ekofr/http-ip .. Create a “network-node-01” Docker network and run “ekofr/http-ip” using this network. CONSUL (Machine) NODE #01
  • 15. NODE #02 > Machine (New tab) Terminal $ docker-machine create -d virtualbox --swarm --swarm-discovery="consul://$(docker-machine ip consul):8500" --engine-opt="cluster-store=consul://$(docker-machine ip consul):8500" --engine-opt="cluster-advertise=eth1:2376" swarm-node-02 .. Create the “swarm-node-02” machine under Docker and map Swarm discovery with Consul. CONSUL (Machine) NODE #01 NODE #02
  • 16. NODE #02 > Registrator Terminal $ eval $(docker-machine env swarm-node-02) $ docker run -d --volume=/var/run/docker.sock:/tmp/docker.sock gliderlabs/registrator -ip $(docker-machine ip swarm-node-02) consul://$(docker-machine ip consul):8500 .. Enter “swarm-node-02” machine and run a Registrator Docker image as a daemon. CONSUL (Machine) NODE #01 NODE #02
  • 17. NODE #02 > HTTP Container Terminal $ docker network create --subnet=172.19.0.0/16 network-node-02 $ docker run -d --net network-node-02 -p 80:8080 ekofr/http-ip .. Create a “network-node-02” Docker network and run “ekofr/http-ip” using this network. CONSUL (Machine) NODE #01 NODE #02
  • 18. What’s happening on DNS? Terminal $ dig @$(docker-machine ip consul) http-ip.service.consul .. ;; QUESTION SECTION: ;http-ip.service.consul. IN A ;; ANSWER SECTION: http-ip.service.consul. 0 IN A 192.168.99.100 http-ip.service.consul. 0 IN A 192.168.99.102 Let’s make a DNS call to ensure that our “http-ip” service is available under 2 machines! Shutdown them! DNS
  • 19. What’s happening on DNS? Terminal $ dig @$(docker-machine ip consul) http-ip.service.consul SRV .. ;; ANSWER SECTION: http-ip.service.consul. 0 IN SRV 1 1 80 c0a86366.addr.dc1.consul. http-ip.service.consul. 0 IN SRV 1 1 80 c0a86364.addr.dc1.consul. SRV records allows to define a priority and a weight for DNS entries but it is not supported by Consul at this time. You can find more information on SRV records on Wikipedia.
  • 20. Add DNS to your system Let’s make an HTTP call to ensure that both nodes answers. Add Consul DNS server as a resolver. CONSUL (Machine)
  • 21. Call HTTP service Terminal $ curl http://http-ip.service.consul hello from 172.18.0.2 $ curl http://http-ip.service.consul .. hello from 172.19.0.2 Now, perform your HTTP request and confirm that you are balanced between your two machines. HTTP DNS
  • 23. NODE #01 > Add a HTTP check Terminal $ eval $(docker-machine env swarm-node-01) $ docker kill $(docker ps -q --filter='ancestor=ekofr/http-ip') .. First, kill the docker container that runs ekofr/http-ip. We will launch it just after with a health check.
  • 24. NODE #01 > Add a HTTP check Terminal $ docker run -d --net network-node-01 -p 80:8080 -e SERVICE_CHECK_SCRIPT="curl -s -f http://$(docker-machine ip swarm-node-01)" -e SERVICE_CHECK_INTERVAL=5s -e SERVICE_CHECK_TIMEOUT=1s ekofr/http-ip .. Add a check to the ekofr/http-ip container. We add a HTTP check here but it could be what you want. More information about Registrator available environment variables here. More information on Consul check definition here.
  • 25. NODE #02 > Add a HTTP check Terminal $ eval $(docker-machine env swarm-node-02) $ docker kill $(docker ps -q --filter='ancestor=ekofr/http-ip') .. First, kill the docker container that runs ekofr/http-ip. We will launch it just after with a health check.
  • 26. NODE #02 > Add a HTTP check Terminal $ docker run -d --net network-node-02 -p 80:8080 -e SERVICE_CHECK_SCRIPT="curl -s -f http://$(docker-machine ip swarm-node-02)" -e SERVICE_CHECK_INTERVAL=5s -e SERVICE_CHECK_TIMEOUT=1s ekofr/http-ip .. Add a check to the ekofr/http-ip container. We add a HTTP check here but it could be what you want. More information about Registrator available environment variables here. More information on Consul check definition here.
  • 27. Check services health via web UI If you launch the UI, you should see your health checks:
  • 28. Check services health via API Terminal $ curl http://$(docker-machine ip consul):8500/v1/health/checks/http-ip .. [ { "Status": "passing", "Output": "hello from 172.18.0.2", "ServiceName": "http-ip", }, … ] Note that you can also check your services’s health via the Consul API “/health” endpoint: