본문 바로가기
WIKI 기술 지식 베이스

Reroute client traffic to the capture proxy

원문 보기 위키 갱신

출처: 문서

본문

캡처 프록시로 클라이언트 트래픽 재라우팅하기

다음 내용은 Capture와 Replay를 사용하는 무중단 마이그레이션에만 적용돼요. {: .note }

마이그레이션 윈도우 동안 발생하는 쓰기를 보존하려면, 스냅샷 백필보다 Capture가 먼저 시작되어야 해요.

워크플로우가 생성하는 리소스

워크플로우에 traffic.proxies 섹션이 포함되어 있으면, Migration Assistant가 다음을 생성해요:

  • 캡처 프록시 파드.
  • 해당 파드 앞에 위치하는 Kubernetes Service 리소스.
  • 캡처한 트래픽을 나중에 리플레이할 수 있도록 하는 Apache Kafka 설정.

클라이언트 트래픽은 프록시 Kubernetes Service로 전송돼요. 프록시는 요청을 소스 클러스터로 전달하고, 나중에 리플레이할 수 있도록 기록해요.

Kubernetes와 EKS 비교

마이그레이션 엔진은 Kubernetes와 Amazon Elastic Kubernetes Service(EKS) 플랫폼 모두에서 동일해요. 실질적인 차이는 Kubernetes Service가 여러분의 환경에 노출되고 통합되는 방식이에요:

  • 일반 Kubernetes에서는 클라이언트를 프록시 Kubernetes Service로 라우팅하는 네트워킹 패턴을 직접 제공해야 해요.
  • Amazon EKS에서는 Kubernetes Service가 AWS 로드 밸런서 인프라를 기반으로 동작할 수 있고, 부트스트랩 경로가 플랫폼 구성을 더 많이 자동화해 줘요.

워크플로우에서 프록시 구성하기

항상 최신 샘플에서 시작하세요:

workflow configure sample --load
workflow configure edit

{% include copy.html %}

프록시 구성에서 중요한 필드는 다음과 같아요:

  • listenPort
  • podReplicas
  • EKS에서 외부 노출이 필요할 때 사용하는 internetFacing
  • tls
  • setHeader

TLS 동작

프록시는 기본적으로 보안이 적용돼요. TLS를 명시적으로 구성하지 않으면, 워크플로우가 프록시에 자체 서명된 인증서를 프로비저닝해요.

일반 텍스트 HTTP를 의도적으로 사용하려면, 프록시 TLS 모드를 plaintext로 설정하세요.

호스트 및 헤더 오버라이드

소스가 호스트 기반 라우팅을 사용한다면, 프록시 구성에 정적 헤더를 추가하세요.

setHeader 필드에 Header-Name: value 형식의 항목을 사용하세요. 예를 들면 다음과 같아요:

{
  "setHeader": ["Host: source.example.com"]
}

{% include copy.html %}

프록시 엔드포인트 찾기

워크플로우를 제출한 후, ma 네임스페이스의 Service를 확인하고 프록시를 위해 생성된 것을 찾아보세요:

kubectl get svc -n ma

{% include copy.html %}

그런 다음 애플리케이션, DNS, 또는 로드 밸런서를 업데이트해서, 소스로 직접 보내던 트래픽이 해당 프록시 엔드포인트로 향하도록 하세요.

진행하기 전에 캡처 확인하기

메타데이터 마이그레이션과 백필로 넘어가기 전에 다음을 확인하세요:

  • 프록시 파드가 실행 중인지.
  • Kubernetes Service에 접근 가능한지.
  • 애플리케이션 트래픽이 프록시를 통해 흐르는지.
  • 워크플로우에서 트래픽 구성 요소가 정상(healthy)으로 표시되는지.

유용한 명령어:

workflow status
workflow manage

{% include copy.html %}

다음 단계

캡처가 활성화되면, 다음 단계를 수행하는 동안에도 트래픽이 프록시를 통해 흐르도록 유지하세요:

  1. 메타데이터 마이그레이션
  2. 과거 문서 백필
  3. 캡처한 트래픽을 리플레이해서 타깃을 따라잡기

{% include migration-phase-navigation.html %}

더 알아보기 (Learn more)