VM에서 피어링된 클러스터 트래픽 관리
VM에서 피어링된 클러스터 트래픽 관리 (Manage traffic for peered clusters on VMs)
이 사용 주제에서는 기존 클러스터 피어링 연결이 있는 서비스 사이에 리디렉트와 장애 조치(failover)를 설정하기 위해 service-resolver 구성 항목을 구성하고 적용하는 방법을 설명해요.
출처: 문서
본문
이 사용 주제에서는 기존 클러스터 피어링 연결이 있는 서비스 사이에 리디렉트와 장애 조치(failover)를 설정하기 위해 service-resolver 구성 항목을 구성하고 적용하는 방법을 설명합니다.
클러스터 피어링으로 L7 트래픽을 관리하는 Kubernetes 전용 지침은 Kubernetes에서 클러스터 피어링으로 L7 트래픽 관리를 참조하세요.
리디렉트 및 장애 조치를 위한 서비스 리졸버 (Service resolvers for redirects and failover)
클러스터 피어링을 사용하여 admin 파티션을 통해 데이터센터를 연결할 때 동적 트래픽 관리를 사용하여 서비스가 자동으로 피어 클러스터에 호스팅된 서비스로 트래픽을 전달하도록 서비스 메시를 구성할 수 있습니다.
그러나 service-splitter 및 service-router 구성 항목 종류는 피어에 호스팅된 서비스 인스턴스를 기본적으로 직접 대상으로 지정하는 것을 지원하지 않습니다. 피어의 서비스로 트래픽을 분할하거나 라우팅하기 전에 service-resolver 구성 항목에서 장애 조치를 구성하여 피어에 호스팅된 서비스를 업스트림 서비스로 정의해야 합니다. 그런 다음 두 번째 서비스 리졸버에서 리디렉트를 설정하여 피어 서비스와 이름으로 상호 작용할 수 있습니다.
Consul에서 구성 항목의 형식 지정, 업데이트, 관리에 대한 자세한 내용은 How to use configuration entries를 참조하세요.
피어 간 동적 트래픽 구성 (Configure dynamic traffic between peers)
클러스터 피어링 연결이 있는 배포에서 L7 트래픽 관리 동작을 구성하려면 다음 단계를 순서대로 완료하세요:
- 서비스 리졸버 구성에서 피어 클러스터를 장애 조치 대상으로 정의합니다.
다음 예제는 cluster-01의 service-resolver 구성 항목을 업데이트하여, Consul이 여러 연결 실패를 감지할 때 frontend 서비스로 향하는 트래픽을 피어 cluster-02의 백업 인스턴스로 리디렉트하도록 합니다.
HCL:
Kind = "service-resolver"
Name = "frontend"
ConnectTimeout = "15s"
Failover = {
"*" = {
Targets = [
{Peer = "cluster-02"}
]
}
}
JSON:
{
"ConnectTimeout": "15s",
"Kind": "service-resolver",
"Name": "frontend",
"Failover": {
"*": {
"Targets": [
{
"Peer": "cluster-02"
}
]
}
},
"CreateIndex": 250,
"ModifyIndex": 250
}
YAML:
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:
Kind = "service-splitter"
Name = "frontend"
Splits = [
{
Weight = 50
## defaults to service with same name as configuration entry ("frontend")
},
{
Weight = 50
Service = "frontend-peer"
},
]
JSON:
{
"Kind": "service-splitter",
"Name": "frontend",
"Splits": [
{
"Weight": 50
},
{
"Weight": 50,
"Service": "frontend-peer"
}
]
}
YAML:
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:
Kind = "service-resolver"
Name = "frontend-peer"
Redirect {
Service = frontend
Peer = "cluster-02"
}
JSON:
{
"Kind": "service-resolver",
"Name": "frontend-peer",
"Redirect": {
"Service": "frontend",
"Peer": "cluster-02"
}
}
YAML:
apiVersion: consul.hashicorp.com/v1alpha1
kind: ServiceResolver
metadata:
name: frontend-peer
spec:
redirect:
peer: 'cluster-02'
service: 'frontend'