In our last consul post, we have explained the steps to setup up a multi-node consul cluster which runs on server more.
If you want to use consul services for your application on a server, you need to set up a consul agent on the client mode to talk to the consul cluster. A consul client agent is also a member of the system which can obtain the configurations present in the consul cluster.
In this post, we will look into the steps involved in running a consul agent on client mode for querying and retrieving services and information from the consul servers.
Install & Configure Consul Agent On Client Mode
Step 1: Update the package repositories and install unzip.
For RHEL/Centos,
sudo yum update -y
sudo yum install unzip -y
For Ubuntu,
sudo apt-get update -y
sudo apt-get install unzip -y
Step 2: Head over to consul downloads page. and get the link for Linux 64 bit.
Step 3: Download the consul binary to /opt directory.
cd /opt
sudo curl -o consul.zip https://releases.hashicorp.com/consul/1.4.4/consul_1.4.4_linux_amd64.zip
Step 4: Unzip consul binary.
sudo unzip consul.zip
Step 5: Move consul executable to /usr/bin
directory to be accessible system-wide. You can also move it a location which is in your system path.
sudo mv consul /usr/bin/
Step 6: Verify the consul executable by executing the consul command. It should list the available commands.
consul
Step 7: Create consul config directories.
sudo mkdir -p /etc/consul.d/client
mkdir /var/consul
Step 9: Create a consul config file.
sudo vi /etc/consul.d/client/config.json
Copy the following config content to the config.json file. You should have the value of encrypt
which was used during the consul server configuration. If you don’t have this value, you can get it from the consul server from /var/consul/serf/local.keyring
file. Also, provide the correct datacenter
value available in the consul server
{
"server": false,
"datacenter": "Us-Central",
"data_dir": "/var/consul",
"encrypt": "gsdfHJ3KZvpC/Zsdf9JZSTQQ==",
"log_level": "INFO",
"enable_syslog": true,
"leave_on_terminate": true,
"start_join": [
"10.128.0.3"
]
}
Step 11: Create a consul client service file.
sudo vi /etc/systemd/system/consul-client.service
Copy the following contents
[Unit]
Description=Consul Startup process
After=network.target
[Service]
Type=simple
ExecStart=/bin/bash -c '/usr/bin/consul agent -config-dir /etc/consul.d/client'
TimeoutStartSec=0
[Install]
WantedBy=default.target
Step 12: Reload system daemon.
sudo systemctl daemon-reload
Step 13: Start & check the status of consul client service.
sudo systemctl start consul-client
sudo systemctl status consul-client
Step 14: Check the consul members using the following command.
consul members
You should see your client node in your list of members. It will be of type client
. The server cluster members will be of type server
.
Query Services & Key Value Pairs From Consul Server
Now that we have successfully configured the client, lets run some checks by retrieving data from the consul server.
List All Available Services
Method 1: Using consul command
consul catalog services
Method 2: Using API
curl http://127.0.0.1:8500/v1/catalog/services\?pretty
Method 3: Using DNS query. Here you need to specify your service name to get the details.
dig @127.0.0.1 -p 8600 consul.service.consul SRV
Query key Values From Consul Client
Lets list a key named backend
recursively,
consul kv get -recurse backend
6 comments
thanks it was super useful for me
Why is it necessary to have separate Servers and Clients? What is the purpose of them?
Is it necessary to run consul agent on my every host where a service is running?
Hi,
I have done creating the consul servers its working fine.
Now im trying to create consul agent with same way.
We are getting error when try to run consul members.
Error retrieving members: Get http://127.0.0.1:8500/v1/agent/members?segment=_all: dial tcp 127.0.0.1:8500: connect: connection refused
we have checked the $ ss -tunelp | grep 8500 and got empty response
and $ systemctl status consul this command giving the errors
May 09 10:50:01 ip-172-31-0-106 systemd[1]: Failed to start Consul Service Disco
we set up the route53 also for this
Hi TQuang,
Please i need your help i need to configure Vault server and client for secret keys in my environment. Please i need your help and i will appreciate it if you can help me out on this. Thanks
Hi @is@disqus_WkONdeCcN4:disqus can you elaborate you requirement. Also you can send us a email in [email protected]. We can guide you
Thanks, best article. In my case, the same with this article: 3 servers quorum and 2 agents. They are serving like as private DNS.
====:8500/v1/agent/service/register
Add service (register a service = domain name for service):
curl -X PUT -d ‘{“ID”: “app1”, “Name”: “app”, “Address”: “1.1.1.1”, “Port”: 3000}’ http://
Check by dig comman: dig @ip-agent app.service.consule
====:8500/v1/agent/service/deregister/app1
Remove service (deregister a service):
curl -X PUT http://