Регистрация сервиса в Consul через API

Ручная регистрация через командую строку

За регистрацию и перерегистрацию сервисов отвечает Consul REST API  по адресу PUT  http://consul.loc:8500/v1/agent/service/register. На этот адрес нужно отправить JSON методом PUT. Вместо consul.loc укажите свой адрес.

Сформируйте файл payload.json командой nano payload.json

{
  "ID": "testservice_id01",
  "Name": "testservice",
  "Tags": [
    "primary",
    "v1"
  ],
  "Address": "10.0.0.1",
  "EnableTagOverride": false,
}

Зарегистрируйте тестовый сервис через команду curl:

curl --request PUT --data @payload.json http://consul.loc:8500/v1/agent/service/register

Через Curl одной командой:

curl -H "Content-Type: application/json" -X PUT -d '{"ID": "testservice_id01","Name": "testservice", "Address": "10.0.0.1"}' http://consul.loc:8500/v1/agent/service/register

Теперь, через DNS запрос, можно запрашивать IP адрес сервиса:

dig @consul.loc -p 8600 testservice.service.dc1.consul. ANY

Чтобы определить IP адрес ноды, укажите следующий запрос:

dig @consul.loc -p 8600 node01.node.dc1.consul. ANY

Название ноды указывается при запуске агента Consul в параметре -node=node01. Выдаваемый IP адрес указывается в параметре -advertise=10.0.0.100

Регистрация сервиса Consul через PHP

<?php

define("CONSUL_HOST", "127.0.0.1:8500");
define("NET_INTERFACE", "eth0");

# Detect local IP
function getLocalIP($interface) {
    preg_match('/inet (?<ip>[0-9\.]+)/', `ifconfig $interface`, $arr);
	if (count($arr) == 0)
		return null;
	return $arr['ip'];
}

$local_ip = getLocalIP(NET_INTERFACE);
if ($local_ip == null){
	echo "Local IP is null\n";
	exit(1);
}

echo "Detect local IP: " . $local_ip . "\n";
echo "Register service in consul: ";

$data = array(
	"ID"=> "testservice_id01",
	"Name"=> "testservice",
	"Address"=> $local_ip,
);                                                                    
$data_string = json_encode($data);


# Register service in consul
$link='http://'.CONSUL_HOST.'/v1/agent/service/register';
$curl=curl_init(); 
curl_setopt($curl,CURLOPT_URL,$link);
curl_setopt($curl,CURLOPT_CUSTOMREQUEST,'PUT');
curl_setopt($curl,CURLOPT_USERAGENT,'php-client/7.1');
curl_setopt($curl,CURLOPT_POSTFIELDS,$data_string);                                                                  
curl_setopt($curl,CURLOPT_HTTPHEADER,array(
	'Content-Type: application/json',
	'Content-Length: ' . strlen($data_string),
));
curl_exec($curl);
$http_code=curl_getinfo($curl,CURLINFO_HTTP_CODE);
curl_close($curl);

if ($http_code == 200){
	echo "Success\n";
}
else{
	echo "Error. Code=".$http_code."\n";
}