Регистрация сервиса в 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";
}