구성 항목

구성 항목 (Configuration Entries)

구성 항목이 Consul의 보안, 트래픽, 클러스터 관리 동작 중 많은 부분을 명시적으로 정의하는 방법을 설명하는 문서예요. 구성 항목은 HCL 또는 JSON으로 지정할 수 있고, Kubernetes에서는 YAML로 커스텀 리소스 정의를 지정해요.

출처: 문서

본문

구성 항목은 Consul의 보안, 트래픽, 클러스터 관리 동작 중 많은 부분을 명시적으로 정의해요. 구성 항목은 HCL 또는 JSON으로 지정할 수 있어요. Kubernetes에서는 YAML로 커스텀 리소스 정의를 지정해요.

구성 항목 기본 사항 (Configuration entry basics)

모든 구성 항목에는 Kind와 Name이라는 최소 두 개의 필드가 있어요. 이 두 필드는 Consul에 대한 구성 항목을 식별해요. 구성 항목은 키 이름에 snake-case 또는 CamelCase를 사용해요.

베어메탈 및 VM

Kind = "<supported kind>"
Name = "<name of entry>"

Kubernetes에서는 Kind가 커스텀 리소스 kind로 설정되고 Name이 metadata.name으로 설정돼요:

Kubernetes

apiVersion: consul.hashicorp.com/v1alpha1
kind: <supported kind>
metadata:
  name: <name of entry>

Kubernetes 외부에서는 Consul CLI 또는 Consul HTTP API를 사용해 구성 항목을 관리해야 해요.

초기 클러스터 부트스트래핑의 편의를 위해 Consul 서버 에이전트 구성 파일에 구성 항목을 지정할 수도 있어요. 서버가 리더십을 획득하면 구성 항목을 초기화하려 시도해요. 서버 구성 외부에 구성 항목이 아직 존재하지 않으면 서버가 이를 생성해요. kind와 name이 모두 일치하는 구성 항목이 이미 존재하면 서버는 아무것도 하지 않아요.

클러스터 관리 구성 항목 (Cluster management configuration entries)

다음 구성 항목은 Consul 데이터센터의 구성 기본값, 서비스 간 보안, 서비스 신원, 트래픽 관리를 정의해요.

  • 컨트롤 플레인 요청 한도는 Consul Enterprise 클러스터에서 카탈로그, ACL, 키/값 저장소에 대한 읽기 및 쓰기 속도를 정의해요.
  • 내보낸 서비스(Exported services)는 로컬 admin 파티션과 원격 피어에 대한 서비스 접근을 활성화해요.
  • 인그레스 게이트웨이(Ingress gateway)는 인그레스 게이트웨이의 구성을 정의해요. 네트워크로의 접근을 보호하려면 대신 Consul API 게이트웨이를 권장해요.
  • JWT 프로바이더는 JWT 검증을 서비스 메시의 프록시에 추가하기 위해 JSON Web Token(JWT)과 JSON Web Key Set(JWKS)을 사용하도록 Consul을 구성해요.
  • Mesh는 네임스페이스와 페더레이션된 데이터센터 전반에 적용되는 메시 전체 프록시 구성을 제어해요.
  • Proxy defaults는 사이드카 프록시의 기본 구성을 제어해요.
  • Sameness group은 장애 조치와 트래픽 관리를 위해 동일한 서비스를 가진 파티션과 클러스터 피어를 정의해요.
  • Service defaults는 주어진 서비스의 모든 인스턴스에 대한 기본값을 구성해요.
  • Service intentions는 서비스 메시의 서비스에서 들어오는 트래픽에 사이드카 프록시가 어떻게 응답하는지 정의해요.
  • Service resolver는 서비스 메시에서 서비스 하위 집합, 리다이렉트, 페일오버, 로드 밸런싱 동작을 정의해요.
  • Service router는 HTTP 경로를 기반으로 애플리케이션 트래픽의 대상을 정의해요.
  • Service splitter는 단일 HTTP 경로에 대한 요청을 서비스 하위 집합으로 나누는 방법을 정의해요.
  • 종료 게이트웨이(Terminating gateway)는 서비스 메시 내부에서 외부 서비스로 트래픽을 보내는 서비스에 대한 보안 설정을 정의해요.

API 게이트웨이 구성 항목 (API gateway configuration entries)

모든 들어오는 트래픽에 대해 네트워크의 서비스에 대한 접근을 보호하려면 Consul API 게이트웨이를 배포할 것을 권장해요. 다음 구성 항목은 API 게이트웨이와 그것이 들어오는 트래픽을 처리하는 방법을 정의해요:

Kubernetes 커스텀 리소스 정의 (CRDs)

구성 항목 대신 Consul on Kubernetes는 구성 항목을 모델로 한 커스텀 리소스를 사용해요. kubectl apply 명령 또는 consul-k8s CLI를 사용해 이 리소스를 클러스터에 적용할 수 있어요.

클러스터 관리 구성 항목은 모두 동일한 이름을 가진 Consul CRD 대응물을 가지며, 그 차이는 HCL과 YAML 사이의 형식 차이로 제한돼요. 따라서 이 구성 항목과 CRD에 대한 사양과 예시는 하나의 리소스로 문서화돼요.

Registration CRD는 Kubernetes에 고유해요. 외부 노드에서 실행되는 서비스를 등록하고 Consul이 실행할 헬스 체크를 구성하는 데 사용할 수 있어요.

Consul API 게이트웨이는 Kubernetes 클러스터에서 다르게 배포되고 관리되므로 API 게이트웨이 구성 항목은 CRD로 제공되지 않아요. 대신 Kubernetes에서 Consul API 게이트웨이 동작을 정의하기 위해 다음 CRD가 존재해요:

이 CRD와 API 게이트웨이 구성에 사용하는 방법에 대한 자세한 내용은 Consul API 게이트웨이 개요를 참고하세요.

구성 항목 생성 또는 업데이트 (Create or update a configuration entry)

consul config write 명령을 사용해 구성 항목을 만들고 업데이트할 수 있어요. 이 명령은 구성 항목(JSON 또는 HCL) 정의를 로드한 다음 Consul에 적용해요.

다음 예시는 전역 네임스페이스에 대한 proxy defaults를 구성하는 HCL 구성 파일을 보여줘요:

global-proxy-defaults.hcl

Kind = "proxy-defaults"
Name = "global"
Config {
  local_connect_timeout_ms = 1000
  handshake_timeout_ms = 10000
}

이 구성을 적용해요.

$ consul config write global-proxy-defaults.hcl

구성 항목을 변경해야 한다면 파일을 편집한 다음 명령을 다시 실행해요. 이 명령은 오류가 없는 한 아무것도 출력하지 않아요. write 명령은 다른 알 수 없는 수정을 덮어쓰지 않도록 compare-and-swap 작업을 수행할 수 있게 해주는 -cas 옵션도 지원해요.

HTTP API를 사용한다면 항목을 페이로드로 포함하고 Consul 서버로 PUT 요청을 보내요.

$ curl \
    --request PUT \
    --data @payload \
    http://127.0.0.1:8500/v1/config

다음 단계 (Next steps)

이제 Consul 구성의 기본을 배웠으니, Consul Terraform 프로바이더가 인프라 배포와 에이전트 구성을 자동화하는 방법을 알아보세요.

더 알아보기 (Learn more)