prepared query로 동적 서비스 쿼리

prepared query로 동적 서비스 쿼리 (Dynamic service discovery)

prepared query를 사용해 Consul 카탈로그를 동적으로 쿼리하는 방법을 설명하는 문서예요. prepared query는 복잡한 서비스 쿼리를 등록하고 필요할 때 실행할 수 있게 해주는 구성이에요.

출처: 문서

본문

이 주제는 prepared query를 사용해 Consul 카탈로그를 동적으로 쿼리하는 방법을 설명해요. prepared query는 복잡한 서비스 쿼리를 등록하고 필요할 때 실행할 수 있게 해주는 구성이에요. 표준 노드 및 서비스 조회를 수행하는 방법은 정적 DNS 쿼리 수행을 참고하세요.

소개 (Introduction)

prepared query는 여러 태그로 필터링하고, 로컬 데이터센터에 정상 노드가 없으면 원격 데이터센터의 서비스를 자동으로 페일오버해서 찾는 등 풍부한 조회 기능을 제공해요. 또한 접두사 일치(prefix match)로 이름을 일치시키는 prepared query 템플릿을 만들어 단일 템플릿이 잠재적으로 많은 서비스에 적용되도록 할 수도 있어요. DNS 쿼리 동작에 대한 추가 정보는 Consul DNS 개요를 참고하세요.

요구 사항 (Requirements)

Consul은 단일 포트로 등록된 서비스에 대해 prepared query를 지원하며, 이는 멀티포트 서비스를 제외해요. prepared query를 사용할 때는 서비스의 ports 매개변수로 필터링할 수 없어요.

ACL

ACL이 활성화된 경우 쿼리하는 서비스는 query, service, node 리소스에 대한 읽기 접근을 가능하게 하는 권한에 연결된 토큰을 제시해야 해요. 필요한 리소스에 대한 읽기 접근을 활성화하는 정책을 만드는 방법은 다음 문서를 참고하세요:

prepared query 만들기 (Create prepared queries)

사용법 정보는 prepared query 참조를 참고하세요.

  1. prepared query 옵션을 JSON 형식으로 지정해요. 다음 prepared query는 dc1과 dc2의 redis 서비스의 모든 인스턴스를 대상으로 해요:
payload.json{
  "Name": "my-query",
  "Session": "adf4238a-882b-9ddc-4a9d-5b6758e4159e",
  "Token": "",
    "Service": {
      "Service": "redis",
      "Failover": {
        "NearestN": 3,
        "Datacenters": ["dc1", "dc2"]
      },
      "Near": "node1",
      "OnlyPassing": false,
      "Tags": ["primary", "!experimental"],
      "NodeMeta": {
        "instance_type": "m3.large"
      },
      "ServiceMeta": {
        "environment": "production"
      }
    },
    "DNS": {
      "TTL": "10s"
    }
}

사용 가능한 모든 옵션에 대한 정보는 prepared query 구성 참조를 참고하세요.

  1. 쿼리를 /query API 엔드포인트로 POST 요청으로 보내요. 요청이 성공하면 Consul이 prepared query의 ID를 출력해요. 다음 예시에서 prepared query 구성은 payload.json 파일에 저장되어 있어요:
$ curl --request POST --data @payload.json http://127.0.0.1:8500/v1/query
{"ID":"014af5ff-29e6-e972-dcf8-6ee602137127"}%
  1. 쿼리를 실행하려면 엔드포인트로 GET 요청을 보내고 POST 호출에서 반환된 ID를 지정해요.
$ curl http://127.0.0.1:8500/v1/query/14af5ff-29e6-e972-dcf8-6ee602137127/execute\?near\=_agent

prepared query 실행 (Execute prepared queries)

표준 조회 형식 또는 엄격한 RFC 2782 SRV 조회를 사용해 prepared query를 실행할 수 있어요.

표준 조회 (Standard lookup)

표준 조회 형식을 사용해 prepared query를 실행하려면 다음 형식을 사용해요:

<query name or id>.query[.<datacenter>].<domain>

Consul에서 표준 조회 형식에 대한 추가 정보는 표준 조회를 참고하세요.

RFC 2782 SRV 조회 (RFC 2782 SRV lookup)

RFC 2782 조회 형식을 사용해 prepared query를 실행하려면 다음 형식을 사용해요:

_<query name or id>._tcp.query[.<datacenter>].<domain>

Consul에서 RFC 2782 SRV 조회 형식을 따르는 방법에 대한 추가 정보는 RFC 2782 조회를 참고하세요. RFC 2782 사양에 대한 일반 정보는 서비스 위치 지정을 위한 DNS RR (DNS SRV)을 참고하세요.

조회 옵션 (Lookup options)

datacenter 하위 도메인은 선택 사항이에요. 기본적으로 조회는 이 Consul 에이전트의 데이터센터를 쿼리해요.

query name 또는 id 하위 도메인은 기존 prepared query의 이름 또는 ID예요.

쿼리 결과 (Query results)

간단한 로드 밸런싱을 허용하기 위해 Consul은 각 쿼리에 대해 노드 집합을 무작위 순서로 반환해요. prepared query는 A 및 SRV 레코드를 지원해요. SRV 레코드는 서비스가 등록된 포트를 제공해요. Consul은 클라이언트가 명시적으로 요청할 때만 SRV 레코드를 제공해요.

더 알아보기 (Learn more)