Telepresence
로컬에서 원격 클러스터 서비스에 연결하는 도구
로컬에서 원격 클러스터 서비스에 연결하는 도구
Telepresence는 Ambassador Labs에서 개발한 도구로, 로컬 개발 환경에서 원격 Kubernetes 클러스터의 서비스에 직접 연결할 수 있게 해줍니다. 2017년 처음 출시되어 클라우드 네이티브 개발의 핵심 도구로 자리잡았습니다.
핵심 기능은 두 가지입니다. 첫째, 로컬 머신을 클러스터 네트워크에 연결해 클러스터 내 서비스를 localhost처럼 접근할 수 있습니다. 둘째, Intercept 기능으로 클러스터로 들어오는 트래픽을 로컬로 라우팅해 실시간 디버깅이 가능합니다.
Telepresence는 VPN과 유사한 터널을 생성해 로컬과 클러스터를 연결합니다. Traffic Agent라는 사이드카 컨테이너를 대상 서비스에 주입하고, 이를 통해 트래픽을 로컬로 전달합니다. 환경 변수와 볼륨도 로컬에서 접근 가능합니다.
실무에서는 마이크로서비스 환경에서 한 서비스만 로컬에서 개발하면서 다른 의존 서비스는 클러스터 것을 사용하는 시나리오에 유용합니다. 매번 이미지 빌드/푸시/배포 없이 코드 변경을 즉시 테스트할 수 있어 개발 속도가 10배 이상 빨라집니다.
# Telepresence 설치 (macOS)
brew install datawire/blackbird/telepresence
# 클러스터에 연결
telepresence connect
# 연결 상태 확인
telepresence status
# 클러스터 서비스 목록 확인
telepresence list
# 특정 서비스의 트래픽을 로컬로 가로채기 (Intercept)
# user-service:8080으로 들어오는 트래픽을 로컬 3000번 포트로 전달
telepresence intercept user-service --port 3000:8080
# 환경 변수도 함께 가져오기
telepresence intercept user-service --port 3000:8080 --env-file user-service.env
# 헤더 기반 선택적 intercept (다른 팀원 영향 없이)
telepresence intercept user-service --port 3000:8080 \
--http-header x-telepresence-intercept=dev-john
# 로컬에서 개발 서버 실행
source user-service.env
npm run dev # 로컬 3000번 포트에서 실행
# 클러스터 내 다른 서비스 직접 호출 테스트
curl http://order-service.default.svc.cluster.local:8080/api/orders
# Intercept 종료
telepresence leave user-service
# 클러스터 연결 해제
telepresence quit
# Preview URL 생성 (팀원과 공유 가능)
telepresence intercept user-service --port 3000:8080 --preview-url
# 볼륨 마운트와 함께 intercept
telepresence intercept user-service --port 3000:8080 \
--mount=/tmp/user-service-volumes
시니어: "마이크로서비스 로컬 개발이 너무 느려요. 한 줄 바꾸는데 빌드-푸시-배포 5분 걸리는 건 말이 안 돼요."
주니어: "Telepresence intercept 쓰면 코드 수정하고 바로 테스트할 수 있지 않나요?"
시니어: "맞아요. 스테이징 클러스터에 연결해서 내 서비스만 로컬로 돌리면 돼요. 개발 속도가 확 달라져요."
면접관: "마이크로서비스 환경에서 로컬 개발의 어려움을 어떻게 해결하셨나요?"
지원자: "Telepresence로 클러스터에 연결해 개발했습니다. intercept로 특정 서비스 트래픽만 로컬로 가져와서 실시간 디버깅이 가능했고, 다른 의존 서비스는 클러스터 것을 사용해 환경 불일치 문제도 해결됐습니다. 개발 사이클이 5분에서 수 초로 단축됐어요."
리뷰어: "로컬 테스트 잘 되셨나요? 클러스터 환경에서는 다르게 동작할 수 있어서요."
개발자: "Telepresence로 스테이징 연결해서 테스트했습니다. Redis랑 PostgreSQL 다 클러스터 거 쓰니까 환경 차이 걱정 없어요."