해당 스터디는 90DaysOfDevOps
https://github.com/MichaelCade/90DaysOfDevOps
를 기반으로 진행한 내용입니다.
Day 68 - Service Mesh for Kubernetes 101: The Secret Sauce to Effortless Microservices Management
서비스 메시는 쿠버네티스 클러스터 내 마이크로서비스 간의 통신을 관리, 관찰, 제어하기 위해 설계된 전용 인프라 계층(Infrastructure Layer)이다.
복잡하게 분산된 시스템과 애플리케이션을 구성하는 마이크로서비스들의 전반적인 신뢰성, 보안, 그리고 관측 가능성을 확보하는 데 도움을 준다.

대표적인 오픈 소스 기술로는 Istio, Linkerd, Consul Connect 등이 있다.
그렇다면 정확하게 왜 Service Mesh가 필요한건가?
마이크로서비스 아키텍처는 유연하지만, 플랫폼 차원에서 해결해야 할 연결성, 보안, 신뢰성, 관측 가능성과 같은 복잡한 과제들을 동반한다.
서비스 메시는 다음과 같은 방식으로 이러한 문제들을 해결한다.
내장된 서비스 디스커버리(Service Discovery): 서비스 간 위치를 자동으로 파악한다.
네트워크 복잡성 처리: 개발자가 비즈니스 로직에만 집중할 수 있도록 네트워크 로직을 분리한다.
지능형 로드 밸런싱: 트래픽을 효율적으로 분산시킨다.
보안 조치 강제: 암호화 및 인증 정책을 애플리케이션 코드 변경 없이 적용한다.
관측 가능성 제공: 분산된 서비스들의 상태를 투명하게 모니터링할 수 있게 한다.
오늘날 가장 널리 사용되는 Istio를 기준으로 서비스 메시의 아키텍처를 살펴보면, 크게 데이터 평면 (Data Plane)과 제어 평면 (Control Plane) 두 가지로 나뉜다.

2-1. 데이터 평면 (Data Plane) - Envoy Proxy
사이드카 (Sidecar) 패턴: Envoy 프록시가 각 마이크로서비스의 사이드카 형태로 배포된다.
역할: 마이크로서비스 간의 모든 통신을 가로채고 제어한다. 또한 네트워크 트래픽에 대한 모든 Telemetry 데이터를 수집한다.
특징: 레이어 7 프록시로서 모든 네트워킹 로직을 재사용 가능한 컨테이너로 옮겨, 서비스가 직접 통신하는 대신 프록시끼리 통신하게 만든다.
2-2. 제어 평면 (Control Plane) - Istiod
역할: 서비스 메시의 두뇌 역할을 한다.
기능: 모든 Envoy 프록시를 설정하여 트래픽 라우팅, 보안 정책 강제, 텔레메트리 수집 등을 수행하게 한다.
통합 관리: 과거에는 여러 컴포넌트로 나뉘어 있었으나, 현재는 Istiod라는 단일 컴포넌트로 통합되어 서비스 디스커버리, 트래픽 관리, 보안, 인증서 관리 등을 일원화하여 처리한다.
2-3. 아키텍처 작동 원리
외부 또는 내부 트래픽이 발생하면 서비스 (Service A)로 직접 가지 않고 해당 서비스의 프록시를 통과한다.
프록시는 목적지 서비스 (Service B)의 프록시와 통신한다.
목적지 프록시가 최종적으로 Service B에게 요청을 전달한다.
이 모든 과정의 설정과 정책은 Istiod인 제어 평면에 의해 관리된다. 즉, 모든 네트워킹 로직은 데이터 평면으로 이관되며, 애플리케이션 코드는 네트워크 통신 방식에 대해 알 필요가 없다.
3-1. 간소화된 서비스 간 통신
개발자가 각 서비스 코드 내에 재시도 로직, 타임아웃, 서킷 브레이커 등을 일일이 구현할 필요가 없다.
인프라 레벨에서 통신 로직을 처리하므로 Polyglot 환경 (다양한 언어로 개발된 환경)에서도 일관된 통신 방식을 유지할 수 있다.
3-2. 포괄적인 Observability
분산 추적: 여러 서비스를 거쳐가는 요청의 흐름을 시각화하여 병목 지점을 찾는다.
로깅 및 모니터링: 트래픽 양, 에러율, 응답 시간 (Latency) 등의 신호를 자동으로 수집하여 Prometheus, Grafana 등과 연동할 수 있다.
3-3. 정교한 트래픽 관리
단순한 로드 밸런싱을 넘어선 기능을 제공한다.
트래픽 쉐이핑(Traffic Shaping): 특정 버전으로 트래픽의 10%만 보내는 등의 제어가 가능하다.
배포 전략 지원: 카나리 배포, 블루/그린 배포, A/B 테스트를 네트워크 레벨에서 손쉽게 구현할 수 있다.
3-4. 강화된 보안 - Zero Trust 구현
mTLS (상호 TLS): 모든 서비스 간 통신을 자동으로 암호화하고 상호 인증한다.
접근 제어: 누가 어떤 서비스에 접근할 수 있는지에 대한 세밀한 정책을 코드 수정 없이 적용할 수 있어 '제로 트러스트' 보안 모델 구현에 핵심적이다.
3-5. 지능형 로드 밸런싱
라운드 로빈(Round Robin), 최소 연결(Least Connection) 등 다양한 알고리즘을 통해 들어오는 요청을 여러 인스턴스에 최적으로 분배하여 리소스 활용도를 극대화한다.
3-6. 자동화된 서비스 디스커버리
쿠버네티스 환경에서 파드(Pod)의 IP는 수시로 바뀐다.
서비스 메시는 엔드포인트의 변화를 자동으로 감지하고 등록하여, 수동으로 관리할 필요를 없앤다.
3-7. 일관된 구성 및 정책 시행
수백 개의 마이크로서비스가 있어도 중앙 (Control Plane)에서 한 번의 설정으로 모든 프록시에 정책을 배포할 수 있다.
속도 제한, 재시도 로직 등을 전체 시스템에 일관되게 적용할 수 있다.
성공적인 서비스 메시 도입과 운영을 위해 다음과 같은 모범 사례를 따르는 것이 중요하다.
4-1. 점진적 도입
한 번에 모든 서비스에 적용하는 빅뱅 방식은 위험하다.
전략: 비즈니스에 치명적이지 않은 서비스나 읽기 전용 서비스부터 시작하여 점차 범위를 넓혀간다.
효과: 리스크를 최소화하고 운영 팀이 기술에 익숙해질 시간을 확보한다.
4-2. 전체 서비스의 균일성 확보
일관된 동작을 보장하기 위해 플랫폼 내 모든 서비스에 동일한 구성 표준과 정책을 적용해야 한다.
특정 서비스만 예외 처리를 많이 할수록 관리가 복잡해지고 장애 포인트가 된다.
4-3. 모니터링과 로깅의 적극 활용
서비스 메시가 제공하는 텔레메트리 데이터를 방치하지 말고 적극 활용해야 한다.
이를 통해 이슈를 조기에 진단하고 시스템의 전반적인 성능 추이를 분석하는 대시보드를 구축해야 한다.
4-4. 강력한 보안 정책 구현
기본 설정에 의존하지 말고, mTLS를 'Strict' 모드로 설정하고 서비스 간 명시적인 접근 허용 정책을 사용하여 보안을 강화해야 한다.
4-5. 문서화 및 교육
서비스 메시는 러닝 커브가 높은 기술이다.
개발팀과 운영팀이 프록시의 동작 방식, 트러블슈팅 방법 등을 이해할 수 있도록 포괄적인 문서화와 정기적인 교육이 필수적이다.
4-6. 철저한 테스트
통합 테스트: 서비스 메시 적용 후 서비스 간 통신이 의도대로 동작하는지 확인한다.
성능 테스트: 사이드카 프록시가 추가됨에 따라 약간의 레이턴시가 발생할 수 있다. 이것이 허용 범위 내인지 부하 테스트를 통해 확인하고 병목 현상을 방지해야 한다.
4-7. 정기적인 업데이트 및 성능 최적화
업데이트: Istio와 같은 프로젝트는 업데이트 주기가 빠르다. 최신 보안 패치와 기능을 활용하기 위해 구성 요소를 최신 상태로 유지하되, 버전 호환성을 체크해야 한다.
최적화: 사이드카 리소스 사용량(CPU/Memory)을 모니터링하고, 불필요한 설정을 튜닝하여 클러스터 리소스를 효율적으로 관리해야 한다.
서비스 메시는 쿠버네티스 환경에서 마이크로서비스 간의 복잡한 통신을 관리하고 제어하는 전용 인프라 계층이다.
주로 Istio와 같은 도구를 통해 구현되며, 사이드카 패턴을 활용해 네트워크 로직을 애플리케이션 코드와 완전히 분리하는 것이 기술의 핵심이다.
구조적으로는 데이터 평면(Envoy Proxy)이 실제 트래픽을 처리하고, 제어 평면(Istiod)이 이를 중앙에서 설정하여 트래픽 관리, 보안(mTLS), 관측 가능성 기능을 일관되게 제공한다.
이를 통해 개발자는 인프라 설정 없이 비즈니스 로직에만 집중할 수 있으며, 운영 측면에서는 코드 수정 없이 정교한 정책 적용이 가능하다.
도입 시에는 시스템 복잡성을 고려하여 비핵심 서비스부터 점진적으로 적용하는 것이 안정성을 확보하는 필수적인 전략이다.