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
        • 여러 개의 데이터 센터를 즉시 지원



      • 다운받은 패키지 파일을 /user/local/bin 으로 이동시키고 consul 명령어가 정상 실행 되는지 확인
        • mv ./consule /usr/local/bin
        • consul version


    • 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





참고 : https://www.consul.io

http://teddykwon.com/2017/01/18/consul-install.html