Back/AWS

ALB(Application Load Balancer)

TimeSave 2023. 5. 15. 02:01

ref)

아래 블로그를 요약했습니다.

https://aws-hyoh.tistory.com/134

https://aws-hyoh.tistory.com/147

 


목차


    1. ALB 정의

    • Application Layer를 다루는 Load Balancer
      • 이에 대비되는 L4 Switch : L7 Virtual Server 사용하는 LB
    • TCP기반의 HTTP, HTTPS, WebSocket을 활용하는 LB
      • HTTP의 Header, Request Method등을 이용해, Request를 적절한 대상 그룹으로 Routing(부하분산) 할 수 있다.
      • 규칙에 우선순위를 두고 차례로 적용할 수 있다
      • 뒤에 나올 ALB rule 설정 시 HTTP 특징 활용
      • 라우팅 실시 이전에 3-way handshake로 커넥션 생성필요
        • HTTP도 TCP기반의 Protocol이므로
        • L4의 Protocol 이행후 Http Routing 실시

     

    ALB Rule

    2. ALB 특징 상세

    2.1 HTTP를 활용한 라우팅

    • HTTP Header 
      • 요청헤더 : 사용자 상태정보, 디바이스 정보
        • Cookie Header, User-agent Header, Accept Header 활용 
      • 일반헤더 : 사용자 IP
        • X-For-warded-For

    2.2 HTTP요청 메서드

    • GET/HEAD/POST/PUT 등을 기준으로 Rule을 생성하여 Rule에 맞는 적절한 대상 그룹으로 라우팅
    • 요청 경로 : 경로에 따라 다른 대상그룹으로 라우팅
    • Source IP : 사용자 IP에 따라 다른 대상그룹으로 라우팅
    • 쿼리 문자열 : 쿼리 문자열의 Parameter를 기준으로 라우팅

    2.3 로드밸런싱 방식

    • Round Robin : 기본알고리즘, EC2 Instance에 순서대로 할당
    • Least Outstanding Request : 요청을 가장 적게 가지고 있는 EC2 Instance에 할당(커넥션 수 기준?)

    2.4 SSL 인증서 탑재

    • ALB가 SSL 인증서를 이용해 EC2 Instance대신 암호화 통신을 한다.
      • HTTPS 통신을 할 경우 SSL 인증서를 이용해 SSL Handshake를 통해 메세지 암호화 후 전달
        • 리소스 소모가 커서, 서버에서 하면 부담이 된다
        • L4 스위치에서 이 작업을 대행하고, L4스위치 <-> 서버는 평문통신
          • SSL Offload라고 함
    • 사전작업
      • Route53을 통해 사용할 도메인 발급
      • ACM(AWS Certificate Manager) 통해 SSL 인증서 발급 : AWS SSL인증서 발급 서비스
    • how-to
      • 리스너에서 서비스포트의 프로토콜을 443으로 변경
      • Cipher Suite와 SSL 인증서 선택
      • 대상 그룹의 EC2 Instance 포트를 80으로 설정(평문 통신만 하면 되니까)

    2.5 프록시 서버

    • 사용자와 통신은 ALB가 하므로, 중간의 프록시 서버 역할을 하는 것이다.
    • 트래픽 플로우
      • 1. 사용자 -> 브라우저 -> ALB -> 3-way handshake
      • 2. 라우팅 대상그룹 결정 -> EC2 Instance 결정
      • 3. VPC내 private IP를 활용해 EC2 Instance와 3-way handshake 실시
      • 4. 사용자 -> Get 요청 -> ALB -> 서버 -> 응답 -> 웹페이지

    구성도
    트래픽 플로우

    2.6 AWS WAF 연동

    • AWS WAF는 웹서버로 유입되는 트래픽을 검사하여 차단/보호 한다.

     

     

    3. ALB 구성요소

    • ALB는 여러개의 리스너가 존재 할 수 있으며
    • 리스너 안에 다수의 규칙이 가능하며
    • 리스너는 여러 대상그룹을 가질 수 있다.
    • ALB -> Listener -> Listener{ rule()} -> Target Group

    3.1 리스너(Listener) : 사용자 요청을 받고, 이를 적절한 대상그룹에 전달

    • HTTP,HTTPS 요청을 받아 헤더, 요청메서드에 담긴 HTTP 관련 정보 해석하는 파츠
    • HTTP 정보를 기반으로 규칙을 세우고 라우팅 실시
      • Listener ID 존재(필수)
      • 규칙 존재(필수)
      • 포트(필수)
        • ALB리스너의 사용가능 포트 1~65535
          • 8080, 8888 쓰는 HTTP 리스너 사용 가능
    • 종류
      • HTTP 리스너
        • 80포트
      • HTTPS 리스너
        • HTTPS 리스너는 암호화 된 요청 처리를 위해 SSL 인증서, 보안정책 필요
        • 443포트

     

    3.2 규칙(Rule) : 리스너의 대상그룹 결정 기준

    • 해석한 HTTP 관련 정보(헤더, 요청메서드)를 대상그룹에 전달하는 판단 로직
    • 규칙이 여러개 존재하면 ,가장 상단 규칙부터 비교
    • 구성
      • 규칙조건(IF) : 요청이 오면 규칙조건에 대조해본다. AND조건
        • 규칙조건은 최대 5개 포함 가능하며, 모든 규칙 조건을 충족해야 함
      • 규칙작업(THEN) : 규칙조건에 해당하면 규칙 작업(라우팅 작업)을 실시한다.
        • 작업 종류
          • 전달대상 : 대상그룹을 지정하여 사용자 요청을 전달. 여러 대상 그룹 지정이 가능하며, 각 그룹의 요청 처리 비중을 정할 수 있다.
          • 리디렉션 대상 : 사용자 요청을 다른 URL로 전달(리디렉션)
            • 영구(301)/임시(302) 리디렉션 가능
            • 경로, 쿼리 지정 가능 
            • ex) second.aws-hyoh.com -> www.naver.com 연결하여 웹페이지 띄우기 

            • 고정응답 반환
              • 사용자가 정한 html,css,js,json등의 웹페이지를 HTTP 응답코드(2xx,3xx..)와 함께 전달
              • 잘못된 경로 진입 시, 트래픽 폭주 시 유용

     

    3.3 대상그룹(Target Group) : 요청을 처리할 EC2의 묶음

    • 전달대상에 포함된 대상그룹이 리스너로 부터 요청을 받아 작업 실시
    • 특징 : HTTP 항목으로 설정 됨
      • 기본설정  Protocol : Port
        • ALB의 타겟이므로 HTTP, HTTPS만 사용.
        • EC2들이 Protocol : Port로 설정된 요청만 받는다.
        • 리스너의 포트번호와 대상그룹의 포트번호 다르게 설정가능
          • 리스너 -> 대상그룹으로 요청 전달시 포트번호 변경 됨
      • 헬스체크
        • 소속된 EC2 상태 점검시 HTTP/HTTPS를 사용한다.
        • 3-way handshake 체크 + 원하는 웹페이지 요청하여 상태체크 가능.
      • 모니터링 : 2xx, 3xx, 4xx 응답코드에 대한 모니터링 제공

     

    4. ALB 주요 라우팅 규칙 종류

    • 호스트 헤더
      • HTTP 헤더 중 도메인 네임(호스트 헤더)를 기준으로 라우팅 결정
      • 호스트 헤더에 'www.naver.com'이 포함될 경우 ""규칙 작업을 수행한다.
    • 경로(Path) : 호스트가 제공하는 자원의 존재 위치
      • 사용자가 도메인 네임과 함꼐 경로를 입력하면, 경로를 읽고 규칙 조건으로 사용
      • 호스트 뒤에 "/first/"가 존재하면 규칙작업을 수행한다.
    • HTTP 헤더
      • 호스트헤더와 경로를 포함한 모든 HTTP 헤더로 라우팅 결정
      • 헤더를 직접 골라서 라이팅 규칙으로 사용
      • ex) User-Agent, Accept-Language, Content-Type, Authorization...

    • HTTP 요청 메서드
      • GET일 경우 ~~규칙작업을 수행한다
      • POST일 경우 ~~ 규칙작업을 수행한다.
      • 사용자 정의 메서드 포함 가능

     

    5. 기타

    • Connection Timeout : 사용자<->서버 간 커넥션 유지시간 설정
    • Sticky : 한번 접속한 적 있는 서버 기억 후 기존 커넥션이 있었던 서버로 연결(쿠키 이용)
    • X-Forwarded-For : 사용자 IP를 가진 헤더. Target Group으로 요청 전달시 기본적으로 탑재
      • ALB가 private IP로 Source ip NAT을 실시함.
        • EC2에서는 ALB IP가 Source IP로 보이므로
    • HTTP/2 : ALB 속도 향상을 위해 default로 활성화 됨
      • ALB와 더블어, 대상그룹등 모든 관련된 통신대상에서 요청 프로토콜을 HTTP2로 설정 필요