공식문서 보고 정리해보는 Consul

6democratickim9·2021년 12월 30일
0
post-thumbnail

공식문서 보고 정리하는 Consul

1. 시작하기

  • 컨설 다운로드
  • 컨설.exe 설치된 곳으로 간다
  • conda activate msa(내가 가진 가상환경 구동)

해당 명령어로 실행

2. 서비스 정의하기

mkdir ./consul.dconfigurationㄴ게

  • .d는 해당 디렉토리가 일련의 config 파일들을 가지고 있다는 뜻
  • 서비스를 정의하는 구성 파일 작성하기
  • 포트 80번에 "web" 이라는 이름의 서비스가 돌아간다고 가정한다
  • consul.d 에 들어가 web.json 이라는 이름의 파일을 만든다

--> 해당 파일에는 이름, 포트, 옵션으로 들어갈 태그가 나중에 서비스를 찾을 때 사용하기 위해 해당 서비스를 정의하는 파일에 들어가게 될 것

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이 웹 서비스를 싱크한 것을 알 수 있다.

  • 이 것은 에이전트가 configuration 파일들을 통해 서비스 정의를 로드한 것을 뜻하고, 서비스 카탈로그 또한 성공적으로 등록한 것을 알 수 있음
  • 알아둘 것
    • 우리는 해당 예시에서 웹서비스를 시작한 적이 없다. 컨설은 아직 기동되지 않은 서비스를 등록할 수 있다. 이것은 해당 서비스의 포트에 기반하여 등록과 함께 기동되는 서비스를 상관짓는다.
  • 다수의 컨설 데이터센터에서는 각 서비스는 로컬 컨설 클라이언트를 등록하고, 클라이언트들은 서비스 카탈로그를 포함하는 등록(registration)을 컨설 서버에 전달한다.
  • 쿼리 서비스

    • 에이전트가 서비스를 영사의 서비스 카탈로그에 추가하면 DNS 인터페이스 또는 HTTP API를 사용하여 서비스를 쿼리할 수 있습니다.
  • 먼저 Consul의 DNS 인터페이스를 사용하여 웹 서비스를 쿼리합니다. Consul에 등록된 서비스의 DNS 이름은 NAME.service.consul입니다. 여기서 NAME는 서비스를 등록하는 데 사용한 이름입니다(이 경우 web). 기본적으로 모든 DNS 이름은 consul네임스페이스에 있지만 config될 수 있음
  • 웹 서비스의 정규화된 도메인 이름은 web.service.consul입니다. 등록된 서비스의 DNS 인터페이스(포트 8600에서 기본적으로 실행되는 컨설)를 쿼리합니다.
dig @127.0.0.1 -p 8600 web.service.consul
  • 윈도우에서는 @와 -p를 뺍니당

이러케 실행됨

(이제 귀찮아서 거의 다 파파고 돌릴 예정)

  • 출력에서 확인할 수 있듯이 서비스가 등록된 IP 주소가 포함된 A 레코드가 반환되었습니다.
  • 레코드는 IP 주소만 저장할 수 있습니다.

  • 최소한의 구성으로 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 라는 노드 위에 존재하고 있음을 보여준다.

  • 추가적인 섹션은 해당 노드를 위해 A레코드와 함꼐 DNS에 의해 반환됨

마지막으로, DNS 인터페이스를 사용하여 사용자는 태그를 통해 서비스를 필터링 할 수 있다.

태그 베이스의 서비스 쿼리를 위한 포맷은 TAG.NAME.service.consul 이다.

  • 하단의 예시를 보면, 사용자는 모든 웹 서비스에 대한 "rails" 태그에 대해 찾을 것

  • 사용자는 해당 태그와 함께 웹 서비스를 등록해뒀다면 성공적인 response를 받을 수 있음

  • SRV 레코드

    • SRV 레코드는 SRV(서비스 로케이터) 리소스 레코드
    • 유사한 TCP/IP 기반 서비스를 제공하는 여러 서버를 단일 DNS 쿼리 동작을 사용하여 찾음
    • 레코드를 사용하여 잘 알려진 서버 포트 및 전송 프로토콜 종류에 대한 서버 목록을 DNS 도메인 이름의 우선 순위로 정렬하여 관리 가능


DNS 인터페이스뿐만 아니라 HTTP API를 사용하여 서비스를 쿼리할 수도 있습니다.

profile
인생은 그렇게 호락호락하지 않다..

0개의 댓글

관련 채용 정보