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 트래픽 관리 동작을 구성하려면 다음 단계를 순서대로 완료하세요:

  1. 서비스 리졸버 구성에서 피어 클러스터를 장애 조치 대상으로 정의합니다.

다음 예제는 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'
  1. 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
  1. 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'

더 알아보기 (Learn more)