7주차 - Service Mesh: Envoy
1. Envoy 아키텍처 및 구성요소
목적성
네트워크는 애플리케이션에 투명해야하고, 장애가 발생했을때 파악하기 쉽게 하기 위함
네트워크 프록시의 일종으로 동적 구성을 지원하고 관찰성과 네트워크 정책들을 내부 서비스간 쉽게 지원할 수 있습니다.
Cluster: Envoy가 트래픽을 포워드 하는 논리적인 엔드포인트 세트
Endpoint: 네트워크 노드로 클러스터로 그룹화됨
Listener: IP/PORT를 바인딩하고 다운스트림에서 요청을 처리하는 역할
Route: Listener로 들어온 요청들이 어디로 라우팅 할것인지 정의, Cluster로 라우팅 된다.
Filter: Listener로부터 Cluster에 어떻게 라우팅할지 설정
Upstream: 업스트림 호스트는 요청을 받고 응답을 반환한다.
Downstream: 다운스트림 호스트는 요청을 envoy에 보내고 응답을 받는다.
1.1 동적 구성 (xDS Sync API)

Configuration
설정값들로, 네트워크, 라우팅, 클러스터 정보들을 일컫습니다.
Control Plane
Envoy가 설정해야되는 설정 값들을 수집하고 관리합니다.
xDS Sync API는 Control Plane의 Pilot이 Proxy에 전파하는 값들로 다음과 같이 구분 되어 있습니다.
LDS - Listener Discovery Service : Envoy 리스너 설정
RDS - Route Discovery Service : 트래픽 라우팅 규칙
CDS - Cluseter Discovery Service : 클러스터 정보 전달
EDS - Endpoint Discovery Service : 엔드포인트 정보를 전
2. 설정 값을위한 Admin page

여기서 실제로 설정되어있는 값들을 확인할 수 있고, 설정을 할 수 있습니다.
3. [실습] Envoy 사용
// 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
// ENVOY 확인
envoy --version

3.1 [실습] Proxy 접속 테스트
envoy로 10000 포트로 들어오는 http 요청을 www.envoyproxy.io 로 전달합니다.
service_envoyproxy_io 클러스터가 TLS를 사용합니다.
// yaml 파일을 가져와서 설정해줍니다.
curl -O https://www.envoyproxy.io/docs/envoy/latest/_downloads/92dcb9714fb6bc288d042029b34c0de4/envoy-demo.yaml
envoy -c envoy-demo.yaml
// (터미널2) 정보 확인
ss -tnlp
// 접속 테스트
curl -s http://127.0.0.1:10000 | grep -o "<title>.*</title>"
// 외부 접속 정보 출력
echo -e "http://$(curl -s ipinfo.io/ip):10000"


HTTP 로 직접 붙게되면 ENVOY로 네트워크 결과가 프록시되는것을 확인할 수 있다.

3.2 envoy 설정에 대한 구성

// (터미널1) envoy 실행 취소(CTRL+C) 후 (관리자페이지) 설정 덮어쓰기 - 링크
cat <<EOT> envoy-override.yaml
admin:
address:
socket_address:
address: 0.0.0.0
port_value: 9902
EOT
envoy -c envoy-demo.yaml --config-yaml "$(cat envoy-override.yaml)"
// envoy 관리페이지 외부 접속 정보 출력
echo -e "http://$(curl -s ipinfo.io/ip):9902"
Last updated