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"
ss -tnp 의 결과로 envoy 가 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