Consul
- Consule
- Service Mesh를 쉽게 해주는 툴
- Service Mesh Architecture
- 클라우드 환경 MicroService Architecture 에서 서비스간 통신을 위한 메커니즘 구현을 쉽게 해줌
- 기능
- Service Discovery
- api 또는 mysql과 같은 서비스를 DNS 또는 HTTP 이용하여 등록 및 조회
- Health check
- 서비스 또는 로컬 노드 상태 검사
- 운영자가 클러스터 상태 모니터
- KV Store
- key, value 저장소
- HTTP API 지원
- Secure Service Communication
- TLS 인증서를 생성 및 배포하여 상호 TLS 연결을 설정
- Multi Datacenter
- 여러 개의 데이터 센터를 즉시 지원
- Consule Start
- Installing Consul
- https://www.consul.io/downloads.html 에서 시스템에 맞는 패키지 다운로드
- 다운받은 패키지 파일을 /user/local/bin 으로 이동시키고 consul 명령어가 정상 실행 되는지 확인
- mv ./consule /usr/local/bin
- consul version
- consul cli command
- Consul 서버 구성 및 서비스 구동방식
- Consul server
- 관리서버, 리더서버 역할
- Consul agent
- 노드 서버, agent 역할
- Consul Agent 실행
- agent 서버 또는 클라이언트 모드에서 실행
- 데이터 센터에는 적어도 하나의 서버가 있어야 하지만 3 개 또는 5 개의 서버 클러스터가 권장
- Starting the Agent
- consul agent -dev
- 개발 모드, 어떤 상태도 유지하지 않으므로 프로덕션 환경 사용 위함이 아닌 테스트
- 다른 터미널 세션에서 등록된 cluster 조회 가능
- consul members
- 자체 노드, 실행중인 주소, 상태, 클러스터 역할 및 일부 버전 정보가 표시
- -detailed 추가 메타 데이터 확인 가능
- members 명령의 결과 gossip protocol 기반
- 로컬 정보와 서버 정보 일치하지 않을수 있음
- consul 서버에 정확한 정보 HTTP API를 사용하여 요청
- curl localhost:8500/v1/catalog/nodes
- DNS Interface 호출
- DNS 조회가 기본적으로 포트 8600에서 실행되는 Consul 에이전트의 DNS 서버조회
- dig @127.0.0.1 -p 8600 yongui-MBP.node.consul
- Service 정의
- 구성을 위한 디렉토리 생성
- mkdir ./consul.d
- echo '{"service": {"name": "libqa", "tags": ["consul"], "port": 80}}' \
> ./consul.d/libqa.json
- 설정 디렉토리 정보로 agent 재시작
- consul agent -dev -config-dir=./consul.d
- log에서 웹 서비스를 "sync" 확인
- 에이전트가 구성 파일에서 서비스 정의 로드 서비스 카탈로그에 성공적으로 등록 의미
- 여러 서비스를 등록하려면 Consul 구성 디렉토리에 여러 개의 서비스 정의 파일 정의
- 프로덕션 환경에서는 서비스 상태 검사를 활성화하고 80 port에서 정상적인 서비스 사용해야함
- Querying Services
- 에이전트가 시작되고 서비스가 동기화되면 DNS 또는 HTTP API를 사용하여 서비스 쿼리 가능
- DNS API
- 서비스의 DNS 이름은 NAME.service.consul
- 기본적으로 모든 DNS 이름은 구성 가능, consul
- dig @127.0.0.1 -p 8600 libqa.service.consul
- 서비스를 사용할 수있는 노드의 IP 주소와 함께 A 레코드 리턴
- A 레코드는 IP 주소 만 보유가능
- SRV 레코드 값으로 조회 가능
- dig @127.0.0.1 -p 8600 libqa.service.consul SRV
- SRV 레코드는 웹 서비스가 포트 80에서 실행 중이며 yongui-MBP.node.dc1.consul 노드에 있음을 나타냄
- DNS API 사용하여 tag로 서비스 필터링
- tag 기반 서비스 쿼리의 형식은 TAG.NAME.service.consul
- consul agent 정보내 tags 정보("consul" 설정)로 호출
- dig @127.0.0.1 -p 8600 consul.libqa.service.consul
- dig @127.0.0.1 -p 8600 consul2.libqa.service.consul
- HTTP API
- DNS API 외에도 HTTP API를 사용하여 서비스 쿼리 가능
- curl http://localhost:8500/v1/catalog/service/libqa
- catalog API 주어진 서비스를 호스팅하는 모든 노드를 제공
- Updating Services
- 구성 정의 파일을 변경하고 SIGHUP을 에이전트로 전송하여 서비스 정의 갱신 가능
- 다운 타임이나 service quering에 대한 서비스 중단없이 서비스를 업데이트
- HTTP API 사용하여 service 동적 추가, 제거 및 수정 가능
- Web UI
- 사용자 친화적이고 기능적인 웹 UI 지원
- 모든 서비스 및 노드 확인, 모든 상태 검사 및 현재 상태 확인
- key / value 데이터 읽고 설정
- 실행
- 기존 명령어에 -ui 추가
- consul agent -dev -config-dir=./consul.d -ui
- http://localhost:8500/ui 통해서 확인 가능
http://teddykwon.com/2017/01/18/consul-install.html