Thank you for reading this post, don't forget to subscribe!
Ручная регистрация через командую строку
За регистрацию и перерегистрацию сервисов отвечает Consul REST API по адресу PUT http://consul.loc:8500/v1/agent/service/register. На этот адрес нужно отправить JSON методом PUT. Вместо consul.loc укажите свой адрес.
Сформируйте файл payload.json командой nano payload.json
1 2 3 4 5 6 7 8 9 10 |
{ "ID": "testservice_id01", "Name": "testservice", "Tags": [ "primary", "v1" ], "Address": "10.0.0.1", "EnableTagOverride": false, } |
Зарегистрируйте тестовый сервис через команду curl:
1 |
curl --request PUT --data @payload.json http://consul.loc:8500/v1/agent/service/register |
Через Curl одной командой:
1 2 |
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 адрес сервиса:
1 |
dig @consul.loc -p 8600 testservice.service.dc1.consul. ANY |
Чтобы определить IP адрес ноды, укажите следующий запрос:
1 |
dig @consul.loc -p 8600 node01.node.dc1.consul. ANY |
Название ноды указывается при запуске агента Consul в параметре -node=node01. Выдаваемый IP адрес указывается в параметре -advertise=10.0.0.100
Регистрация сервиса Consul через PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
<?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"; } |