# 1. 개요
MSA(Micro Service Architecture)를 사용하는 기업이 많아지면서 MSA 서비스 네트워크 통신은 어떻게 처리할지 고민하게 되었고, HTTP , HTTP2 뿐만 아니라 gRPC, Kafka, MongoDB 등 여러 Protocol 간의 통신을 어떻게 효율적으로 처리할지, 분산 추적 및 헤더 등에 대한 관리는 어떻게 할지 고민하게 되었다.
이에 따라 L7 기능을 갖춘 Proxy의 필요성이 느껴지게 되었고 그 중 가장 널리 사용되고 있는 Envoy에 대해서 간단하게 설명하도록 하겠다.
- L7과 L4는 아래의 차이점이 존재하며, 당연히 L4 레벨의 통신이 좀 더 빠를 수 밖에 없다.
하지만 좀 더 많은 정보를 기반으로 프록시 및 라우팅을 설정할 수 있는 것이 L7 계층이다.
[1] L7 : Application Layer에서 Proxy를 수행하며, Client가 요청을 하면 Header 등 추가 정보를 확인하여 그에 따라 Response를 보내줘야 한다.
[2] L4 : Transport Layer에서 Proxy를 수행하며, Client가 요청을 하면 IP, Port, TCP 수준의 정보를 확인하여 그에 따라 Response를 보내줘야 한다.
# 2. 기능
[1] L7 Proxy 뿐만 아니라 L4 Proxy의 역할도 수행
: TCP, HTTP Proxy 및 TLS 인증 모두 가능하다.
[2] L7 수준에서의 기능 지원
: Rate Limiting, 버퍼링, 라우팅 및 포워딩 등 다양한 기능
[3] HTTP/2 , gRPC 지원
[4] retry, Circuit Breaker, Speed Limiting 등 기능 지원
[5] Health Check 지원
[6] MongoDB, DynamoDB 등 프록시 지원
# 3. Envoy Proxy 아키텍쳐 및 구성 요소
- 다운스트림 / 업스트림
- 클러스터 : 호스트 / Endpoint 그룹
- 로드밸런싱 정책 O
- 리스너 : downstream 클라이언트들을 위한 Port (Frontend HAProxy와 유사)
- TCP/HTTP Filters
- TLS
- 네트워크 필터 : 어떻게 Envoy가 Listener, Cluster와 매핑하는지 정의
- TCP Proxy 네트워크 필터 (envoy.filters.network.tcp_proxy)
- HTTP Proxy 네트워크 필터 (envoy.filters.network.http_connection_manager)
- MongoDB/MySQL 네트워크 필터
- 쓰레딩 모델
- Single 프로세스 & 멀티 쓰레디드 모델
- 각각의 Thread는 단일 커넥션을 맺음
- 각 쓰레드들은 서로가 무엇을 하는지 모르고, 자신의 업무만 처리함
- 커넥션 풀 : 클러스터 내 각각의 Host 들은 1개 이상의 Connection Pool을 얻는다.
- 커넥션 풀은 워커 쓰레드 당 하나씩 얻는다.
'DevOps' 카테고리의 다른 글
[Github Action] Self hosted runner에서 Gradle, Docker image cache #1 - EBS, PVC로 캐시하기 (2) | 2022.12.17 |
---|---|
[Istio] EKS에서 Okta와 AWS ALB, Istio를 활용하여 인증, 인가 처리하기 (0) | 2022.11.06 |
[Terraform] Atlantis를 통한 Git 협업 #1 - Demo (0) | 2022.05.14 |
[Terraform] terraform state mv 명령어 알아보기 및 활용법 (0) | 2021.12.18 |
[Ansible] 기본 개념 정리 (0) | 2021.11.14 |