q1: Envoy
a1:
Envoy는 MSA(Microservices Architecture) 환경에서 중요한 역할을 하는 프록시 서버이자 서비스 메쉬의 핵심 구성 요소로 사용되는 고급 L7(Layer 7) 프록시입니다. Kubernetes 클러스터에서 Envoy는 주로 서비스 간의 통신을 관리하고, 트래픽 라우팅, 로드 밸런싱, 모니터링, 보안 등을 제공합니다.
1. Envoy의 기본 개념
Envoy는 클라우드 네이티브 환경에서 주로 사용되며, 서비스 메쉬 또는 API 게이트웨이 역할을 수행할 수 있는 강력한 프록시입니다.
• L7 프록시: Envoy는 HTTP, gRPC, WebSocket 등과 같은 애플리케이션 계층 트래픽을 처리합니다.
• 고성능: Envoy는 높은 성능과 확장성을 제공하며, 트래픽 분배와 관리에서 중요한 역할을 합니다.
2. Envoy의 주요 역할
Envoy는 Kubernetes 클러스터 내 여러 서비스가 통신하는 방식을 효율적으로 관리하고, 서비스 메쉬의 **데이터 평면(Data Plane)**에서 중요한 역할을 수행합니다.
(1) 서비스 간 통신 관리
Envoy는 서비스 간의 트래픽을 프록시하여, 서비스 간 통신을 확장 가능하고 안전하게 만듭니다. Kubernetes 환경에서는 서비스 간 트래픽을 Envoy가 라우팅하고 처리하는데, 이를 통해 서비스들이 독립적으로 동작하도록 할 수 있습니다.
(2) 로드 밸런싱
Envoy는 트래픽을 효율적으로 분배하기 위해 로드 밸런싱 기능을 제공합니다. Envoy는 클러스터 내 여러 인스턴스로 요청을 분배하며, 이는 서비스의 가용성을 높이고 트래픽 처리를 효율적으로 만듭니다.
(3) 서비스 디스커버리
Envoy는 서비스 디스커버리 기능을 지원합니다. 이를 통해 서비스가 동적으로 변경될 때 Envoy가 자동으로 새로운 서비스 인스턴스를 인식하고 트래픽을 해당 인스턴스로 라우팅할 수 있습니다.
(4) 트래픽 관찰 및 모니터링
Envoy는 분산 추적, 로깅, 메트릭 수집 등을 통해 서비스의 트래픽을 모니터링할 수 있습니다. 이는 문제를 감지하고 성능을 최적화하는 데 중요한 정보를 제공합니다.
(5) 보안
Envoy는 TLS 종료를 지원하며, 서비스 간 보안 통신을 관리합니다. 이를 통해 각 서비스는 서로 안전하게 통신할 수 있으며, Envoy가 암호화된 트래픽을 처리합니다.
(6) 트래픽 제어 및 라우팅
Envoy는 트래픽을 동적으로 라우팅하고, A/B 테스트, 롤링 배포, 그레이스풀 셧다운 등의 기능을 지원합니다. 이러한 고급 기능들은 MSA에서 서비스의 배포 및 변경을 효율적으로 관리할 수 있게 도와줍니다.
3. Envoy와 Kubernetes 클러스터 내의 관계
Kubernetes 클러스터에서 Envoy는 일반적으로 서비스 메쉬의 일환으로 동작합니다. 서비스 메쉬는 서비스 간 통신을 관리하는 인프라 계층으로, Envoy와 같은 프록시가 이를 구성하는 핵심 요소입니다.
(1) 서비스 메쉬와 Envoy
Envoy는 서비스 메쉬에서 **데이터 평면(Data Plane)**을 구성하며, 클러스터 내의 서비스들이 서로 통신할 때의 모든 트래픽을 처리합니다. Kubernetes에서 Envoy는 주로 Istio와 같은 서비스 메쉬 관리 툴과 함께 사용됩니다.
(2) Istio와 Envoy
• Istio는 Kubernetes와 같은 컨테이너 오케스트레이션 시스템에서 MSA 환경을 관리하는 오픈 소스 플랫폼으로, Envoy를 데이터 평면의 프록시로 사용합니다.
• Istio는 Envoy를 통해 서비스 간의 트래픽을 관리하고, 보안, 모니터링, 로깅 등의 기능을 제공합니다.
(3) Envoy의 구성
Kubernetes에서 Envoy는 Sidecar 형태로 각 서비스와 함께 배포됩니다. 이 방식은 컨테이너화된 애플리케이션에 매우 유용합니다.
• Sidecar 패턴: Envoy는 각 애플리케이션 컨테이너와 함께 배포되어, 애플리케이션 트래픽을 관리하고 모니터링합니다.
4. Envoy의 주요 기능
Envoy는 MSA 환경에서 다양한 기능을 제공합니다:
(1) 트래픽 라우팅
• URL 경로 또는 호스트 이름에 따라 트래픽을 라우팅합니다.
• 예를 들어, /api 경로는 api-service, /auth 경로는 auth-service로 라우팅할 수 있습니다.
(2) 로드 밸런싱
• Envoy는 클러스터 내 여러 서비스 인스턴스에 대해 로드 밸런싱을 수행합니다.
• 여러 로드 밸런싱 알고리즘을 지원하며, 서비스 인스턴스의 상태에 따라 동적으로 로드를 분배합니다.
(3) 서비스 디스커버리
• Envoy는 서비스 디스커버리를 통해 동적으로 서비스 인스턴스를 탐지하고, 트래픽을 최신 상태의 서비스로 라우팅합니다.
(4) 트래픽 제어
• A/B 테스트 또는 카나리아 배포와 같은 고급 트래픽 제어 기능을 제공합니다.
• 정책 기반 라우팅을 통해 트래픽을 제어할 수 있습니다.
(5) 보안
• TLS 종료를 지원하며, **mTLS(mutual TLS)**를 통해 서비스 간의 안전한 통신을 보장합니다.
(6) 모니터링 및 로깅
• Envoy는 분산 추적, 로그 수집, 메트릭 등을 통해 서비스의 상태를 모니터링하고 분석할 수 있는 기능을 제공합니다.
5. Envoy 사용 예시
Kubernetes 클러스터에서 Envoy를 사용하는 경우의 설정 예시를 살펴보겠습니다:
(1) Envoy 사이드카 컨테이너
Envoy를 Kubernetes Pod의 사이드카로 배포하는 방식은 아래와 같습니다:
apiVersion: apps/v1
kind: Deployment
metadata:
name: example-service
spec:
replicas: 1
template:
metadata:
labels:
app: example
spec:
containers:
- name: example-service
image: example-service-image
- name: envoy
image: envoyproxy/envoy:v1.18-latest
ports:
- containerPort: 10000
위와 같은 설정에서는 envoyproxy/envoy 이미지를 사이드카 컨테이너로 추가하여 서비스 트래픽을 관리하게 됩니다.
(2) Istio와의 통합
Istio를 사용하는 경우, Envoy는 Istio의 데이터 평면에서 역할을 하며, 클러스터 내 모든 서비스와 통신을 관리합니다. Istio는 Envoy에 대한 구성 및 정책을 자동화하며, 서비스 간 트래픽을 보안하고 모니터링합니다.
6. Envoy의 장점
• 고성능: Envoy는 빠르고 확장성이 뛰어난 L7 프록시로, 대규모 트래픽을 처리할 수 있습니다.
• 유연한 라우팅: 고급 라우팅 기능을 제공하여 서비스 배포와 트래픽 제어를 효율적으로 관리할 수 있습니다.
• 보안: mTLS를 지원하여 서비스 간 보안 통신을 보장합니다.
• 모니터링: 트래픽 모니터링, 분산 추적, 메트릭 수집 등을 통해 애플리케이션 성능을 분석할 수 있습니다.
7. 결론
Kubernetes 환경에서 Envoy는 서비스 메쉬에서 중요한 역할을 하는 L7 프록시로, 서비스 간 통신을 관리하고 보안, 로드 밸런싱, 모니터링 등의 기능을 제공합니다. Istio와 통합되어 사용되며, MSA 아키텍처에서 효율적인 트래픽 제어와 안전한 통신을 가능하게 만듭니다.
Envoy 250113
2025. 1. 13. 23:32
반응형