클러스터 피어링과 동적 트래픽 관리
클러스터 피어링과 동적 트래픽 관리 (Dynamic Traffic with Cluster Peering)
이 문서는 이미 클러스터 피어링 연결이 있는 서비스 간에 리다이렉트와 장애 조치(failover)를 설정하기 위해 service-resolver 구성 항목을 구성·적용하는 방법을 설명해요. 피어 클러스터에 호스팅된 서비스로 트래픽을 분배하는 워크플로를 다룰게요.
출처: 문서
본문
이 사용법 문서는 기존 클러스터 피어링 연결이 있는 서비스 간에 리다이렉트와 장애 조치를 설정하기 위해 service-resolver 구성 항목을 구성·적용하는 방법을 설명합니다.
클러스터 피어링으로 L7 트래픽을 관리하는 Kubernetes 전용 안내는 Kubernetes에서 클러스터 피어링으로 L7 트래픽 관리를 참조하세요.
리다이렉트·장애 조치용 서비스 리졸버 (Service resolvers for redirects and failover)
클러스터 피어링으로 어드민 파티션을 통해 데이터센터를 연결할 때 동적 트래픽 관리를 사용해 서비스가 피어 클러스터에 호스팅된 서비스로 트래픽을 자동으로 전달하도록 서비스 메시를 구성할 수 있습니다.
그러나 service-splitter와 service-router 구성 항목 종류는 피어에 호스팅된 서비스 인스턴스를 직접 대상으로 지정하는 것을 기본적으로 지원하지 않습니다. 피어의 서비스로 트래픽을 분배(split)하거나 라우팅하기 전에, service-resolver 구성 항목에서 장애 조치를 구성해 피어에 호스팅된 서비스를 업스트림 서비스로 정의해야 합니다. 그런 다음 두 번째 서비스 리졸버에서 리다이렉트를 설정해 피어 서비스를 이름으로 상호작용할 수 있습니다.
Consul에서 구성 항목의 형식 지정, 업데이트, 관리 방법에 대한 자세한 내용은 구성 항목 사용 방법을 참조하세요.
피어 간 동적 트래픽 구성 (Configure dynamic traffic between peers)
클러스터 피어링 연결이 있는 배포에서 L7 트래픽 관리 동작을 구성하려면 다음 단계를 순서대로 완료합니다:
-
서비스 리졸버 구성에서 피어 클러스터를 장애 조치 대상으로 정의합니다.
다음 예제는
cluster-01의service-resolver구성 항목을 업데이트하여, 여러 연결 장애를 감지하면frontend서비스 용도의 트래픽을 피어cluster-02의 백업 인스턴스로 Consul이 리다이렉트하도록 합니다.HCL
JSON
YAML
Kind = "service-resolver" Name = "frontend" ConnectTimeout = "15s" Failover = { "*" = { Targets = [ {Peer = "cluster-02"} ] } }{ "ConnectTimeout": "15s", "Kind": "service-resolver", "Name": "frontend", "Failover": { "*": { "Targets": [ { "Peer": "cluster-02" } ] } }, "CreateIndex": 250, "ModifyIndex": 250 }apiVersion: consul.hashicorp.com/v1alpha1 kind: ServiceResolver metadata: name: frontend spec: connectTimeout: 15s failover: '*': targets: - peer: 'cluster-02' service: 'frontend' namespace: 'default' -
service-splitter또는service-router구성 항목에서 원하는 동작을 정의합니다.다음 예제는 원하는 동작을 로컬로 정의하여 피어에 호스팅된
frontend서비스 사이에 트래픽을 균등하게 분배합니다:HCL
JSON
YAML
Kind = "service-splitter" Name = "frontend" Splits = [ { Weight = 50 ## defaults to service with same name as configuration entry ("frontend") }, { Weight = 50 Service = "frontend-peer" }, ]{ "Kind": "service-splitter", "Name": "frontend", "Splits": [ { "Weight": 50 }, { "Weight": 50, "Service": "frontend-peer" } ] }apiVersion: consul.hashicorp.com/v1alpha1 kind: ServiceSplitter metadata: name: frontend spec: splits: - weight: 50 ## defaults to service with same name as configuration entry ("frontend") - weight: 50 service: frontend-peer -
frontend-peer라는 로컬service-resolver구성 항목을 만들고 피어와 그 서비스를 대상으로 하는 리다이렉트를 정의합니다.HCL
JSON
YAML
Kind = "service-resolver" Name = "frontend-peer" Redirect { Service = frontend Peer = "cluster-02" }{ "Kind": "service-resolver", "Name": "frontend-peer", "Redirect": { "Service": "frontend", "Peer": "cluster-02" } }apiVersion: consul.hashicorp.com/v1alpha1 kind: ServiceResolver metadata: name: frontend-peer spec: redirect: peer: 'cluster-02' service: 'frontend'