Service Mesh

Service Mesh

분산 애플리케이션이 등장하면서 연결성, 가시성, 보안에 대한 새로운 요구가 생겼어요. 서비스 메시는 이런 기능들을 애플리케이션 밖으로 꺼내 인프라가 대신 제공해 주는 개념이에요. Cilium의 서비스 메시 구현을 살펴볼게요.

출처: Service Mesh

본문

서비스 메시란 무엇인가요? (What is Service Mesh?)

분산 애플리케이션이 도입되면서 추가적인 가시성, 연결성, 보안 요구 사항이 생겨났어요. 애플리케이션 컴포넌트들은 클라우드와 사내(온프레미스) 경계를 가로질러 신뢰할 수 없는 네트워크를 통해 통신해요. 로드 밸런싱은 애플리케이션 프로토콜을 이해할 수 있어야 하고, 복원력(resiliency)은 점점 더 중요해지며, 보안은 송신자와 수신자가 서로의 정체성을 인증할 수 있는 모델로 진화해야 해요. 분산 애플리케이션 초기에는 이런 요구 사항을 애플리케이션에 직접 로직을 내장해 해결했어요. 서비스 메시는 이러한 기능들을 애플리케이션에서 분리해 모든 애플리케이션이 사용할 수 있는 인프라의 일부로 제공하므로, 더 이상 각 애플리케이션을 수정할 필요가 없어요.

오늘날 서비스 메시의 기능 집합은 다음과 같이 요약할 수 있어요.

  • 복원력 있는 연결성 (Resilient Connectivity): 서비스 간 통신은 클라우드, 클러스터, 온프레미스 같은 경계를 넘어 가능해야 해요. 통신은 복원력이 있어야 하고 장애를 견뎌야 해요.
  • L7 트래픽 관리 (L7 Traffic Management): 로드 밸런싱, 레이트 리미팅, 복원력은 L7 계층(HTTP, REST, gRPC, WebSocket 등)을 이해해야 해요.
  • 식별자 기반 보안 (Identity-based Security): 보안을 달성하기 위해 네트워크 식별자에 의존하는 것은 더 이상 충분하지 않아요. 송신·수신 서비스 모두 네트워크 식별자 대신 정체성(identity)을 기반으로 서로를 인증할 수 있어야 해요.
  • 관찰성과 추적 (Observability & Tracing): 추적(tracing)과 메트릭 형태의 관찰성은 애플리케이션의 안정성, 성능, 가용성을 이해·모니터링·문제 해결하는 데 중요해요.
  • 투명성 (Transparency): 이 기능들은 애플리케이션 코드를 변경하지 않고도 사용할 수 있도록 투명한 방식으로 제공되어야 해요.

비디오: Cilium의 서비스 메시 구현을 영상으로 보고 싶다면, eCHO 에피소드 27 "eBPF-enabled Service Mesh"와 에피소드 100 "Next-gen mutual authentication in Cilium"을 확인해 보세요.

왜 Cilium 서비스 메시인가요? (Why Cilium Service Mesh?)

Cilium은 초창기부터 네트워킹 계층과 애플리케이션 프로토콜 계층 모두에서 동작하며 연결성, 로드 밸런싱, 보안, 관찰성을 제공함으로써 서비스 메시 개념과 잘 맞아 왔어요. IP, TCP, UDP 같은 프로토콜을 포함한 모든 네트워크 처리에는 eBPF를 고효율의 커널 내(in-kernel) 데이터 경로로 사용해요. HTTP, gRPC, DNS 같은 애플리케이션 계층의 프로토콜은 Envoy 같은 프록시로 파싱해요.

이 섹션에서 다루는 주요 문서는 다음과 같아요.

  • Kubernetes Ingress Support: 쿠버네티스 Ingress 지원을 다뤄요. 사전 요구사항, 설치, 참조, CiliumNetworkPolicy와의 관계, 소스 IP 가시성, Ingress 경로 타입·우선순위, 지원되는 Ingress 어노테이션, 호스트 네트워크 모드, 특권 포트 바인딩, 노드 일부에만 리스너 배포, 다양한 예제(HTTP, 네트워크 정책, 경로 타입, gRPC, TLS 종료)를 포함해요.
  • Gateway API Support: Gateway API 지원을 다뤄요. Gateway API란 무엇인지, Cilium의 지원 범위, 설치, 참조, 주소 지원, HTTP·HTTPS·gRPC·트래픽 분할·HTTP 헤더 수정 예제, GatewayClass 파라미터, 기본 TLS 인증서, BackendTLSPolicy, 접근 로그, ListenerSet 지원, 문제 해결을 포함해요.
  • GAMMA Support: GAMMA(Gateway API for Mesh Management and Administration) 지원을 다뤄요. GAMMA가 무엇인지, 설정 유형, 지원 범위, 사전 요구사항과 설치를 설명해요.
  • Migrating from Ingress to Gateway: Ingress에서 Gateway API로의 마이그레이션을 다뤄요. Ingress API 제한사항, Gateway API의 이점, 권장 마이그레이션 워크플로, 마이그레이션 방법, 어노테이션 마이그레이션, HTTP·TLS·NGINX Ingress 예제를 포함해요.
  • Integration with Istio: Istio와의 통합을 다뤄요. Cilium·Istio 설정, ambient 모드·sidecar 모드 데모 애플리케이션을 포함해요.
  • Mutual Authentication (Beta): 상호 인증(베타)을 다뤄요. mTLS 배경, Cilium에서의 상호 인증, Identity 관리, SPIFFE 이점과 Cilium SPIFFE 지원, 예제와 제한사항을 포함해요.
  • L7-Aware Traffic Management: L7 인지 트래픽 관리를 다뤄요. 사전 요구사항, 주의사항, 설치, 지원되는 Envoy API 버전·확장 리소스 타입, L7 경로 변환·로드 밸런싱·URL 재작성·회로 차단(Circuit Breaking), Kubernetes 서비스용 프록시 로드 밸런싱(베타), L7 트래픽 시프팅을 포함해요.

더 알아보기 (Learn more)