20일차_리버스 프록시를 이용해 컨테이너 HTTP 트래픽 제어하기

최지웅·2025년 1월 6일
0

인프라

목록 보기
27/31

20-1. 리버스 프록시란?

  • 일반적인 프록시는 네트워크 상의 다른 구성 요소를 대신해 트래픽을 처리하는 네트워크 구성 요소를 말한다.
  • 리버스 프록시는 컨테이너로 실행되어, 애플리케이션 컨테이너(업스트림)와 연결해줌으로써 앱 컨테이너의 포트를 외부(다운스트림)에 공개시키지 않는다.
  • 엔진엑스(Nginx)와 트래픽(Traefik)을 주로 사용한다.
# 1. 사이트에 대한 엔진엑스 프록시 설정 파일
server {
	server_name whoami.local; # 도메인
    
    location / (
    	proxy_pass http://whoami; # 콘텐츠가 위치한 주소
        proxy_set_header Host $host; # 호스트 정보를 콘텐츠 위치로 설정
        add_header X-Host $hostname; # 응답의 호스트 정보를 프록시 이름으로 변경
    )
}

20-2. 리버스 프록시의 라우팅과 SSL 적용하기

  • 엔진엑스를 재시작할 때 사이트별 설정파일을 읽은 후 접근가능한지 확인하기 때문에 앱 컨테이너 실행->사이트 설정파일 엔진엑스 컨테이너에 복사->엔진엑스 컨테이너 재시작 순서를 지켜야한다.
  • 리버스 프록시는 로드밸런싱까지 수행하기에 스웜이나 쿠버네티스 없이도 적용가능하다.
  • SSH인증서를 중앙 프록시에 설정하여 애플리케이션 컴포넌트마다 설정하지 않아도 된다.
# 2. HTTP연결을 리다이렉트하는 HTTPS 설정
server{
	server_name image-gallery.local;
    listen 80;
    return 301 https://$server_name$request_uri;
}

server{
	server_name image-gallery.local;
    listen 443 ssl;
    
    ssl_certificate /etc/nginx/certs/server-cert.pem;
    ssl_certificate_key /etc/nginx/xerts/server-key.pem;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
}

20-3. 프록시를 이용한 성능 및 신뢰성 개선

  • nginx 프록시 설정에 사용자 정의 응답 헤터 X-Cache를 포함시켜 캐싱 프록시로 두면 고성능 활용이 가능하다. 아래는 초당 5000번의 요청이 들어온다는 가정하에, 1분동안 캐싱되게 설정한 파일이다.
# 3. 캐시 프록시 설정
...
location = /api/image{
	proxy_pass http://iotd/image;
    proxy_set_header Host $host;
    proxy_cache SHORT; # 캐시 규격
    proxy_cache_valid 200 1m; # 용량과 유효시간
}

location /{
	proxy_pass http://image-gallery;
    proxy_set_header Host $host;
    proxy_cache LONG;
    proxy_cache_valid 200 6h;
    proxy_cache_use_stale error timeout invalid_header updating # proxy_cache_use_stale은 업스트림이 사용불가할 때 만료된 캐시라도 사용하여 서비스를 제공하는 설정이다.
    	http_500 http_502 http_503 http_504;
    ...
}

20-4. 클라우드 네이티브 리버스 프록시

  • 리버스 프록시 도구 중 하나인 트래픽(Traefik)은 설정파일 없이 컨테이너 레이블 추가로 적용가능하다.
# 4. 컨테이너 레이블로 트래픽 자동 설정
services:
	whoami:
    	labels:
        	- "traefik.enable=true"
            - "traefik.http.route.whoami.rule=Host('whoami.local')"
  • 트래픽은 도커 엔진 접속 채널이 리눅스와 윈도에서 서로 다르기에 오버라이드 파일이 따로 있다.
  • 트래픽은 외부 트래픽을 주시하는 포트인 엔트리 포인트, 요청을 컨테이너 배정하는 라우터, 업스트림 컴포넌트인 서비스, 라우터와 서비스 사이에서 서비스에 전달되는 요청을 변경하는 미들웨어로 작동된다.
  • 트래픽은 캐시를 지원하지 않지만 SSL 지원이 굉장히 잘돼있기에 자동으로 인증서 갱신까지 된다.
  • 현대 애플리케이션은 최대한 많은 부분을 Stateless하게 만들어야 수평확장과 로드밸런싱이 극대화된다. 이를 위해 트래픽은 같은 사용자 요청은 깉은 컨테이너로 라우팅되게 하는 sticky session(사용자에게 컨테이너 쿠키를 부여)을 지원한다.

20-5. 리버스 프록시를 활용한 패턴의 이해

  • 리버스 프록시가 필요한 상황은 다음과 같다.
  1. 클라이언트 요청에 포함된 호스트 명에 따라 HTTP or HTTPS를 제공
  2. MSA에서 일부만 노출
  3. 모놀리식 설계 애플리케이션을 컨테이너로 이주하여 프론트엔드 역활을 프록시에 맡김
profile
이제 3학년..

0개의 댓글