본문 바로가기
개발 이야기/Kubernetes

Telepresence 사용해보기

by 농개 2024. 4. 3.
반응형

 

 

 

Telepresence는 MSA구조의 프로젝트에서 애플리케이션을 로컬에서 개발하기 위한 도구입니다.

개발자들이 Kubernetes cluster에서 서비스를 로컬 컴퓨터에서 실행하여 디버깅 및 테스트를 쉽게 할 수 있게 합니다.

즉, Cluster내에서만 접근 가능한 마이크로 서비스들을 로컬에서 쉽게 접근 할 수 있습니다.

이번 포스팅에서는 Telepresence로 로컬에 설치된 Kubernetes Cluster(Minikube) 연결해보겠습니다.

목차

    1. Telepresence 설치

    설치는 공식 홈페이지에 있는 문서를 참고하면 됩니다.

    https://www.telepresence.io/docs/latest/quick-start/

     

    저는 Mac(M2) 랩탑이라서 아래와 같이 설치해줬습니다.

    # 다운로드
    ~ sudo curl -fL https://app.getambassador.io/download/tel2oss/releases/download/v2.17.0/telepresence-darwin-arm64 -o /usr/local/bin/telepresence
    
    # 실행가능으로 전환
    ~ sudo chmod a+x /usr/local/bin/telepresence

     

    아래와 같이 확인해봅니다.

     ~ telepresence version
    OSS Client     : v2.17.0
    OSS Root Daemon: v2.17.0
    User Daemon    : not running

     

    2. Traffic Manager 설치

    트래픽 매니저를 설치 해줍니다.

     ~ telepresence helm install
    
    Traffic Manager installed successfully

     

    이제 클러스터에 연결할 준비가 완료되었습니다.

    3. Connect

    아래와 같이 클러스터에 연결해봅시다.

     ~ telepresence connect
    Launching Telepresence User Daemon
    Connected to context minikube, namespace default (https://127.0.0.1:42345)

     

    정상적으로 연결된 것을 확인 할 수 있습니다.

    아래와 같이 상태 확인 가능합니다.

     ~ telepresence status
    OSS User Daemon: Running
      Version           : v2.17.0
      ...(중략)
      Status            : Connected
      Kubernetes server : https://127.0.0.1:49324
      Kubernetes context: minikube
      Connection name   : minikube-default
      Namespace         : default
      Manager namespace : ambassador
      Intercepts        : 0 total
      ...(중략)

     

     

    4. Connect 확인

     ~ curl -ik https://kubernetes.default
    HTTP/2 403
    ...(중략)
    cache-control: no-cache, private
    content-type: application/json
    x-content-type-options: nosniff

    위와 같이 curl 명령어로 클러스터와 통신이 되는지 확인 합니다.

     

    5. 연결 가능한 Service 확인

     ~ telepresence list -n api # namespace가 따로있다면 기입해주세요. 기입 안하면 default
    dev-api-server: ready to intercept (traffic-agent not yet installed)

    저는 dev-api-server라는 서비스가 뜨네요.

     

    아래와 같이 Port 및 Cluster Ip 정보를 확인합니다.

     ~ kubectl get svc dev-api-server --output yaml -n api
    ...(중략)
      spec:
      clusterIP: 10.97.34.208
      clusterIPs:
      - 10.97.34.208
      internalTrafficPolicy: Cluster
      ipFamilies:
      - IPv4
      ipFamilyPolicy: SingleStack
      ports:
      - name: svc-port
        port: 8080

     

    위에서 확인한 {Cluster IP}:{Port}로 연결 테스트 해봅시다.

     ~ curl -ik http://10.97.34.208:8080
    HTTP/1.1 404
    Vary: Origin
    Vary: Access-Control-Request-Method
    Vary: Access-Control-Request-Headers
    Content-Type: application/json
    Transfer-Encoding: chunked
    Date: Tue, 02 Apr 2024 14:21:41 GMT
    
    {"timestamp":"2024-04-02T14:21:41.564+00:00","status":404,"error":"Not Found","path":"/"}%

     

    정상적으로 통신되는 것을 확인 할 수 있습니다.

     

    6. 종료

     ~ telepresence quit
    Telepresence Daemons disconnecting...done

    quit 커맨드를 통해 종료할 수 있습니다.

    디버깅이나 테스트가 완료되면 필히 종료 해줘야 합니다!

    여러 개발자가 동시에 개발환경 클러스터에서 디버깅하게 되면 문제가 발생 할 수 있기 때문입니다.

    반응형