클러스터 매니저 — 업스트림 클러스터를 관리하는 두뇌

클러스터 매니저 — 업스트림 클러스터를 관리하는 두뇌

Envoy의 클러스터 매니저(cluster manager)는 설정된 모든 업스트림 클러스터를 관리해요. Envoy 설정에 리스너를 몇 개든 넣을 수 있는 것처럼, 독립적으로 설정된 업스트림 클러스터도 몇 개든 넣을 수 있어요. 업스트림 클러스터와 호스트는 서로 다른 여러 프록시 작업에 공통으로 쓰일 수 있기 때문에 네트워크/HTTP 필터 스택에서 추상화되어 있어요.

출처: https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/upstream/cluster_manager

필터 스택에 제공하는 API

클러스터 매니저는 필터 스택에 API를 노출해서, 필터가 업스트림 클러스터로의 L3/L4 연결을 얻거나 (업스트림 호스트가 HTTP/1.1·HTTP/2·HTTP/3 중 무엇을 지원하는지 숨긴 채) 업스트림 클러스터로의 추상 HTTP 커넥션 풀 핸들을 얻을 수 있게 해줘요. 필터 스테이지가 L3/L4 연결이 필요한지 새 HTTP 스트림이 필요한지 결정하면, 클러스터 매니저가 관련 복잡성을 모두 처리해요.

  • 어떤 호스트가 사용 가능하고 건강한지(healthy)
  • 로드밸런싱
  • 업스트림 연결 데이터의 스레드-로컬 저장(대부분의 Envoy 코드가 단일 스레드로 작성됨)
  • 업스트림 연결 유형(TCP/IP, UDS)
  • 해당 시 업스트림 프로토콜(HTTP/1.1, HTTP/2, HTTP/3)

정적/동적 설정(CDS)

클러스터 매니저가 아는 클러스터는 정적으로 설정하거나, 클러스터 디스커버리 서비스(CDS, Cluster Discovery Service) API로 동적으로 가져올 수 있어요. 동적 클러스터 가져오기는 더 많은 설정을 중앙 설정 서버에 두게 해서, Envoy 재시작과 설정 배포 횟수를 줄여줘요.

클러스터 워밍(Cluster warming)

클러스터는 서버 부팅 때와 CDS를 통할 때 모두 "워밍(warmed)" 과정을 거쳐요. 즉 다음 작업이 끝나기 전까지 클러스터가 사용 가능해지지 않아요.

  • 초기 서비스 디스커버리 로드 (예: DNS 해석, EDS 업데이트)
  • 능동 헬스체크가 설정돼 있다면 초기 능동 헬스체크 1회. Envoy가 발견된 각 호스트에 헬스체크 요청을 보내 초기 건강 상태를 판정해요.

이 과정 덕분에 Envoy는 트래픽 서빙에 클러스터를 쓰기 전에 정확한 상태를 갖게 돼요.

클러스터가 "사용 가능해진다"의 의미는 다음과 같아요.

  • 새로 추가된 클러스터: 워밍되기 전까지 Envoy의 나머지 부분에는 없는 것처럼 보여요. 즉 해당 클러스터를 참조하는 HTTP 라우트는 (설정에 따라) 404 또는 503을 반환해요.
  • 업데이트된 클러스터: 기존 클러스터는 계속 존재하며 트래픽을 서빙해요. 새 클러스터가 워밍되면 트래픽 중단 없이 원자적으로(atomically) 교체돼요.

더 알아보기