해당 명령어로 실행
mkdir ./consul.dconfigurationㄴ게
--> 해당 파일에는 이름, 포트, 옵션으로 들어갈 태그가 나중에 서비스를 찾을 때 사용하기 위해 해당 서비스를 정의하는 파일에 들어가게 될 것
echo '{
"service": {
"name": "web",
"tags": [
"rails"
],
"port": 80
}
}' > ./consul.d/web.json
다 만들고 나면 에이전트 재실행하기
configuration 디렉토리를 지정하고 스크립트 체크를 사용 가능하게 하기 위해 에이전트에서 커맨드 라인 플래그를 사용하도록 한다.
스크립트 체크는 멜웨어와 같은 보안상의 문제를 일으킬 수 있으므로 -enable-local-script-checks
를 강하게 권장하는 바이다
.... 머리가 안돌아가서 자꾸 이상한짓을 하네ㅠ
$ consul agent -dev -enable-script-checks -config-dir=./consul.d
==> Starting Consul agent...
Version: 'v1.5.2'
Node ID: '82f64bfa-22c2-5727-0f5d-0bae376f6584'
Node name: 'Judiths-MBP.lan'
Datacenter: 'dc1' (Segment: '<all>')
Server: true (Bootstrap: false)
Client Addr: [127.0.0.1] (HTTP: 8500, HTTPS: -1, gRPC: 8502, DNS: 8600)
Cluster Addr: 127.0.0.1 (LAN: 8301, WAN: 8302)
Encrypt: Gossip: false, TLS-Outgoing: false, TLS-Incoming: false, Auto-Encrypt-TLS: false
==> Log data will now stream in as it occurs:
...
2019/07/16 14:09:25 [INFO] agent: Synced service "web"
2019/07/16 14:09:25 [DEBUG] agent: Node info in sync
2019/07/16 14:09:25 [DEBUG] agent: Service "web" in sync
2019/07/16 14:09:25 [DEBUG] agent: Node info in sync
이제 agent: Synced service "web"
를 보자.
consul이 웹 서비스를 싱크한 것을 알 수 있다.
NAME.service.consul
입니다. 여기서 NAME
는 서비스를 등록하는 데 사용한 이름입니다(이 경우 web
). 기본적으로 모든 DNS 이름은 consul
네임스페이스에 있지만 config될 수 있음web.service.consul
입니다. 등록된 서비스의 DNS 인터페이스(포트 8600
에서 기본적으로 실행되는 컨설)를 쿼리합니다.dig @127.0.0.1 -p 8600 web.service.consul
이러케 실행됨
(이제 귀찮아서 거의 다 파파고 돌릴 예정)
최소한의 구성으로 consul을을 시작했으므로 A 레코드는 로컬 호스트(127.0.0.1)를 반환합니다.
데이터 센터의 다른 노드에 의미 있는 IP 주소를 알리려면 서비스 정의에서 Commer 에이전트 - advertise
인수 또는address
필드를 설정하십시오.
또한 사용자는 DNS 인터페이스를 사용하여 SRV 레코드로 전체 주소/포트 쌍을 검색한다.
dig @127.0.0.1 -p 8600 web.service.consul SRV
dig 127.0.0.1 8600 web.service.consul SRV
SRV 레코드는 80번 포트에서 Judiths-MBP.lan.node.dc1.consul
라는 노드 위에 존재하고 있음을 보여준다.
마지막으로, DNS 인터페이스를 사용하여 사용자는 태그를 통해 서비스를 필터링 할 수 있다.
태그 베이스의 서비스 쿼리를 위한 포맷은 TAG.NAME.service.consul
이다.
하단의 예시를 보면, 사용자는 모든 웹 서비스에 대한 "rails" 태그에 대해 찾을 것
사용자는 해당 태그와 함께 웹 서비스를 등록해뒀다면 성공적인 response를 받을 수 있음
DNS 인터페이스뿐만 아니라 HTTP API를 사용하여 서비스를 쿼리할 수도 있습니다.