Telepresence을 활용한 개발 환경 구축하기
K8S통한 MSA환경에서 개발
K8S 환경에서 애플리케이션을 개발하고 디버깅하는 것은 쉽지 않다. 각 서비스가 독립적으로 운영되고 각종 서비스나 third-party와 상호작용이 필요 하기 때문이다. 그리하여, 로컬 머신에서 개발하기 위해 여러 가지 방법을 사용한다.
클러스터 서비스의 노출 및 접근
클러스터에서 작동되고 있는 서비스를 외부에 노출해 로컬 서비스에서 endpoint를 통해 접근을 할 수 있다.
로컬 서비스에서 클러스터 서비스에 접근하는 방법
- NodePort 또는 LoadBalancer를 통한 포트 터널링
- External IP를 통한 노출
- kubectl port-forward
클러스터 서비스에서 로컬 서비스에 접근하는 방법
- k8s endpoints의 주소 변경
클러스터 환경 구축
로컬 환경에 실제 클러스터 환경에 구축된 각종 서비스와 third-party를 구축하여 클러스터 환경과 같게 만들어 로컬 개발 환경을 만들 수 있다.
- minikube 및 docker을 통한 환경 구축
Telepresence
클러스터에 있는 서비스를 로컬 환경에서 손쉽게 개발 및 디버깅을 할 수 있도록 도와주는 도구이다. 종속된 다른 서비스와 third-party에 대한 노출 및 실행 없이 로컬에서 서비스한 것처럼 변경해준다.
따라 해보기
개발 환경
- Windows 10
- Telepresence 2.15.0
- k8s 1.19.14
다운로드 하기
# https://app.getambassador.io/download/tel2/windows/amd64/latest/telepresence.zip
curl -fL https://app.getambassador.io/download/tel2/windows/amd64/latest/telepresence.zip -o telepresence.zip
로컬 머신에 설치 하기
위에 다운로드 받은 zip파일을 풀어 관리자 모드 PowerShell로 install-telepresence.ps1
스크립트를 실행시켜 설치한다.
# 실행 정책을 변경
PS> Set-ExecutionPolicy Bypass -Scope Process
# 스크립트 실행
PS> .\install-telepresence.ps1
# 설치 확인하기
PS> telepresence version
# Client : v2.15.1
# Root Daemon: not running
# User Daemon: not running
로컬 머신에 k8S 클러스터 설정
kubectl을 로컬에 설치하고, 해당 클러스터의 접근을 위한 설정을 한다.
# 서버 주소 및 cert 설정
kubectl config set-cluster dev --server=https://kubernetes.default --certificate-authority={path}
# context 설정 - 클러스터
kubectl config set-context dev --cluster=dev
# 유저 설정
kubectl config set-credentials user --token={token}
# context 설정 - 유저
kubectl config set-context dev --user=user
# dev context 사용
kubectl config use-context dev
Telepresence connect
telepresence와 연결을 하게 되면 해당 클러스터의 서비스와 연결할 수 있다.
# telepresence 연결하기
telepresence connect
# 연결 확인하기
curl -ik https://kubernetes.default
# 클러스터 서비스 연결 확인하기
# curl -ik {Cluster service IP}
curl -ik http://10.244.222.49:8080
Telepresence intercept
클러스터의 서비스를 로컬 머신의 서비스로 가로채어 대체할 수 있다. 기본은 Global intercept 형식으로 작동하게 되는데 모든 API 요청을 가로챈다. 그렇기에 여러 개발자가 사용하기 위해선 Private intercept(유료)를 사용해야 한다.
# telepresence 인터셉트 하기
# telerpesence intercept {service name} --port {local-service Port}:{cluster-service Port}
telepresence intercept example-service --port 8081:8080
# telepresence 인터셉트 해제하기
telepresence uninstall example-service --agent
Leave a comment