본문 바로가기
Service Mesh/Linkerd

Linkerd 란?

by wlsdn3004 2023. 4. 4.
728x90
반응형

Linkerd란?

 

Linkerd는 CNCF(Cloud Native Computing Foundation)에 의해 graduated 프로젝트로 분류되는 최초의 서비스 메시(service mesh) 도구이다.

[참고]
CNCF는 프로젝트를 다양한 수준으로 분류하여 관리하는데, graduated는 그 중에서도 가장 높은 수준의 분류로 이는 프로젝트가 성숙하고 안정적이며 커뮤니티에 널리 인정받은 프로젝트임을 나타낸다.

 

서비스 메시는 분산 애플리케이션의 네트워크 트래픽 관리, 모니터링, 보안, 라우팅 등을 처리하기 위해 설계된 인프라스트럭처 계층이다.

아래 그림은 Linkerd의 아키텍처이다.

 참조 링크 : https://linkerd.io/2.12/reference/architecture/#

 

Architecture

Deep dive into the architecture of Linkerd.

linkerd.io

 

Linkerd는 크게 control planedata plane으로 나뉜다.

  • Control Plane 
    Linkerd 에 대한 전반적인 제어 역할을 담당한다.
  • Data Plane
    pod에 사이드카 형태로 배포된 linkerd-proxy로 서비스에서 나가고 들어오는 모든 TCP 트래픽을 가로채서 처리하는 역할을 담당한다.

 

Control Plane에는 다음과 같은 component들이 존재한다.

  • destination
    linkerd-proxy와 통신하여 트래픽을 보낼 위치를 조회하고, 경로 별 metric, retry, timeout, serviceprofile 등과 같은 정보를 가져오는 역할을 한다.
  • identity
    linkerd-proxy에서 인증 요청을 수락하고 올바른 ID로 서명된 인증서를 반환하는 인증 기관 역할을 담당하며, 발급된 인증서를 proxy간 mTLS 통신에 사용된다.
  • proxy-injector
    pod가 생성될 때 annotation(linkerd.io/inject: enabled)을 검사하여 admission webhook(mutating, validating) 요청을 받아 pod에 init컨테이너(linkerd-init)와 proxy컨테이너(linkerd-proxy)를 추가하는 역할을 한다.

 

 

Data Plane에는 linkerd-proxy와 linkerd-init 사이트카 컨테이너가 존재한다.

  • linkerd-proxy : pod 내부에 사이드카 형태로 배포되는 초경량 micro-proxy로 다음과 같은 기능을 제공한다. 
    • HTTP, HTTP/2 및 임의의 TCP 프로토콜에 대해 투명하고 구성이 필요 없는 프록시 기능을 제공한다.
    • HTTP 및 TCP 트래픽에 대한 Prometheus 메트릭스를 자동으로 내보내는 기능을 제공한다.
    • WebSocket 프로토콜을 사용하는 어플리케이션의 프록시를 자동으로 처리하는 기능을 제공하며, 설정이 필요하지 않고 투명하게 동작한다.
    • 자동으로 laytency를 고려한 layer-7 로드 밸런싱 기능을 제공한다.
    • 자동으로 layer-4 로드 밸런싱을 수행하여 HTTP가 아닌 트래픽에 대한 로드 밸런싱을 지원합니다.
    • 애플리케이션 간 통신에 TLS를 자동으로 적용해주는 기능
    • 디버깅 및 진단 목적으로 사용되는 tap API 도구를 제공한다.

  • linkerd-init : pod가 시작되면 제일 먼저 실행되는 컨테이너로, linkerd-proxy가 트래픽을 가로챌 수 있도록 iptables를 조작한다.
linkerd-init container

 

 

Linkerd는 Rust 언어 기반으로 자체 구현 한 linkerd2-proxy를 사용한다.

Rust를 선택한 이유는 다음과 같다.

  • 리소스 공간을 최대한 적게 차지하는 native binary로 컴파일 되는 언어 중에서 선택하기로 했다.
  • garbage collection이 일어나면 latency가 길어질 수 있기 때문에 garbage collection이 없는 언어를 선택하기로 했다.
  • 대부분 취약점은 메모리 취약점에서 시작되는데 garbage collection은 새로운 공격 영역으로 노출될 수 있다. Rust는 garbage collection의 영향 없이 컴파일 타임에 해결하기 때문에 잠재적인 메모리 취약점을 피할 수 있다는 장점이 있다.

아래 그림은 현재 많이 사용하는 Service mesh 도구인 Istio와 성능을 비교한 벤치마크 결과이다.

 

 

마치며

Linkerd는 envoy proxy와 같이 Service Mesh를 구현하는 프록시 서버 중 하나로, envoy proxy와 비교해 상대적으로 가벼우며, 배포와 운영이 간단하다는 장점이 있다. 이는 서비스 메시의 핵심 기능을 제공하는 동시에, 복잡한 기능과 설정이 없어서 관리가 용이하다. 하지만 envoy proxy에 비해 기능의 한계가 존재한다.

 

따라서, Linkerd는 Service Mesh 구축을 위한 선택지 중 하나로, 기능보다는 성능과 보안에 중점을 둔다면 고려할 만한 좋은 옵션인 것 같다.

 

반응형

'Service Mesh > Linkerd' 카테고리의 다른 글

Linkerd mTLS 통신 검증  (0) 2023.04.05
Linkerd 사이드카 주입  (0) 2023.04.05
Linkerd 대시보드 ID, Password 변경  (0) 2023.04.05
Linkerd 대시보드 구성  (0) 2023.04.04
Linkerd 설치  (0) 2023.04.04

댓글