Ручная регистрация через командую строку
За регистрацию и перерегистрацию сервисов отвечает Consul REST API по адресу PUT http://consul.loc:8500/v1/agent/service/register. На этот адрес нужно отправить JSON методом PUT. Вместо consul.loc укажите свой адрес.
Сформируйте файл payload.json командой nano payload.json
_x000D_{_x000D_ "ID": "testservice_id01",_x000D_ "Name": "testservice",_x000D_ "Tags": [_x000D_ "primary",_x000D_ "v1"_x000D_ ],_x000D_ "Address": "10.0.0.1",_x000D_ "EnableTagOverride": false,_x000D_}Зарегистрируйте тестовый сервис через команду curl:
_x000D_curl --request PUT --data @payload.json http://consul.loc:8500/v1/agent/service/registerЧерез Curl одной командой:
_x000D_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_x000D_Теперь, через DNS запрос, можно запрашивать IP адрес сервиса:
_x000D_dig @consul.loc -p 8600 testservice.service.dc1.consul. ANYЧтобы определить IP адрес ноды, укажите следующий запрос:
_x000D_dig @consul.loc -p 8600 node01.node.dc1.consul. ANYНазвание ноды указывается при запуске агента Consul в параметре -node=node01 . Выдаваемый IP адрес указывается в параметре -advertise=10.0.0.100
Регистрация сервиса Consul через PHP
_x000D_<?php_x000D__x000D_define("CONSUL_HOST", "127.0.0.1:8500");_x000D_define("NET_INTERFACE", "eth0");_x000D__x000D_# Detect local IP_x000D_function getLocalIP($interface) {_x000D_ preg_match('/inet (?<ip>[0-9.]+)/', `ifconfig $interface`, $arr);_x000D_ if (count($arr) == 0)_x000D_ return null;_x000D_ return $arr['ip'];_x000D_}_x000D__x000D_$local_ip = getLocalIP(NET_INTERFACE);_x000D_if ($local_ip == null){_x000D_ echo "Local IP is nulln";_x000D_ exit(1);_x000D_}_x000D__x000D_echo "Detect local IP: " . $local_ip . "n";_x000D_echo "Register service in consul: ";_x000D__x000D_$data = array(_x000D_ "ID"=> "testservice_id01",_x000D_ "Name"=> "testservice",_x000D_ "Address"=> $local_ip,_x000D_); _x000D_$data_string = json_encode($data);_x000D__x000D__x000D_# Register service in consul_x000D_$link='http://'.CONSUL_HOST.'/v1/agent/service/register';_x000D_$curl=curl_init(); _x000D_curl_setopt($curl,CURLOPT_URL,$link);_x000D_curl_setopt($curl,CURLOPT_CUSTOMREQUEST,'PUT');_x000D_curl_setopt($curl,CURLOPT_USERAGENT,'php-client/7.1');_x000D_curl_setopt($curl,CURLOPT_POSTFIELDS,$data_string); _x000D_curl_setopt($curl,CURLOPT_HTTPHEADER,array(_x000D_ 'Content-Type: application/json',_x000D_ 'Content-Length: ' . strlen($data_string),_x000D_));_x000D_curl_exec($curl);_x000D_$http_code=curl_getinfo($curl,CURLINFO_HTTP_CODE);_x000D_curl_close($curl);_x000D__x000D_if ($http_code == 200){_x000D_ echo "Successn";_x000D_}_x000D_else{_x000D_ echo "Error. Code=".$http_code."n";_x000D_}_x000D_