Search

Service Mesh: Envoy

Tags
k8s
network
service-mesh
envoy
Created
2024/10/17 18:57
Created time
2024/10/17 09:57
category
kubernetes

개요

일전에 Gateway API에서 Envoy를 살짝 언급했고 관련 개념을 살짝 학습했었는데, 관련 개념을 복습하고 Envoy를 직접 구축하는 실습 수행

개념

이후에 Istio 글에서도 나오겠지만, Envoy는 Istio의 Sidecar 리소스로 주입되는 L4 및 L7 Proxy로써 이용
동작에 대해 간단한 흐름은 컨트롤 플레인에서 istiod가 xDS를 이용하여 Configuration을 동기화하고, 데이터 플레인의 Envoy로 접근

구성 요소

Cluster : Envoy 가 트래픽을 포워드할 수 있는 논리적인 Service로 엔드포인트의 묶음을 지칭 (실제 요청이 처리되는 IP의 묶음)
Endpoint : IP 주소를 의미하며, 네트워크 노드 혹은 클러스터로 그룹핑 되는 대상
Listener : IP와 Port 를 바인딩하고, 요청 처리 측면에서 다운스트림을 제어
Route : Listener로 들어온 요청을 라우팅하기 위한 규칙을 정의하고, 라우팅은 일반적으로 클러스터를 대상으로 동작
Filter : Listener로부터 Service에 트래픽을 전달하기까지 요청이 처리되는 파이프라인
UpStream : Envoy 요청을 포워딩해서 연결하는 백엔드 네트워크 노드로써 Sidecar 일때 애플리케이션을 지칭하며, 아닐 때는 원격 백엔드를 지칭
DownStream : Envoy에 연결하고자 하는 엔티티를 지칭

xDS

Envoy는 설정을 동적으로 관리하기 위해 강력한 xDS Sync API를 제공
Service Mesh 솔루션, Gateway API 구현체들은 Envoy를 내부적으로 사용하기에, Envoy가 제공하는 xDS Sync API를 이용하여 네트워크 정책을 다양하게 설정
LDS - Listener Discovery Service
RDS - Route Discovery Service
CDS - Cluseter Discovery Service
EDS - Endpoint Discovery Service

실습

실습은 이전에 작성한 Service Mesh의 실습 준비에서 마련한 환경을 이용

설치

# testpc 접속 vagrant ssh testpc # Envoy 설치 wget -O- https://apt.envoyproxy.io/signing.key | sudo gpg --dearmor -o /etc/apt/keyrings/envoy-keyring.gpg echo "deb [signed-by=/etc/apt/keyrings/envoy-keyring.gpg] https://apt.envoyproxy.io jammy main" | sudo tee /etc/apt/sources.list.d/envoy.list sudo apt-get update && sudo apt-get install envoy -y
Shell
복사

확인

# 버전 확인 envoy --version # 도움말 envoy --help
Shell
복사

실행

# 좌측 터미널 (testpc) # config를 받아서 Envoy를 실행 curl -O https://www.envoyproxy.io/docs/envoy/latest/_downloads/92dcb9714fb6bc288d042029b34c0de4/envoy-demo.yaml envoy -c envoy-demo.yaml # 우측 터미널 (testpc) # LISTEN 상태 확인 및 로컬 접속 테스트 ss -nlpt curl -s http://127.0.0.1:10000 | grep -o "<title>.*</title>"
Shell
복사
# k3s-s에서 Envoy 접속 확인 curl -s http://192.168.10.200:10000 | grep -o "<title>.*</title>"
Shell
복사

관리자 페이지

# testpc에서 실행했던 Envoy를 끄고 아래 설정을 덮어쓰기 cat << EOT > envoy-override.yaml admin: address: socket_address: address: 0.0.0.0 port_value: 9902 EOT # 설정 파일 지정하여 Envoy 재실행 envoy -c envoy-demo.yaml --config-yaml "$(cat envoy-override.yaml)"
Shell
복사
# vagrant ssh <hostname> 접속 시 제공되는 ip 주소를 이용 open <testpc-ip>:9902
Shell
복사