본문 바로가기

프로그래밍/AWS Solutions Architect

AWS SAA - Elastic Load Balancer(ELB)

로드밸런싱

  • 로드 밸런서는 서버 혹은 서버셋으로 트래픽을 백엔드나 다운스트림 또는 서버들(EC2 인스턴스)로 전달하는 역할
  • 사용하는 이유
    • 부하를 다수의 다운스트림 인스턴스로 분산
    • 애플리케이션에 단일 액세스 지점(DNS)을 노출
    • 다운스트림 인스턴스의 장애를 원할히 처리
    • 상태 확인 매커니즘으로 어떤 인스턴스로 트래픽을 보낼 수 없는지 확인
    • SSL 종료(HTTPS)를 할 수 있다.
    • 크키로 고정도를 강화할 수 있다.
    • 영역에 걸친 고가용성을 가진다.
    • 클라우드 내에서 개인 트래픽과 공공 트래픽을 분리할 수 있다.

ELB(Elastic Load Balancer)

  • ELB는 관리형 로드 밸런서이다.
    • AWS가 관리하며, 어떤 경우에도 작동할 것을 보장한다.
    • AWS가 업그레이드와 유지 관리 및 고가용성을 책임진다.
    • 로드 밸런서의 작동 방식을 수정할 수 있게 일부 구성 knobs도 제공한다.
  • 자체 로드밸런서를 마련하는 것보다 저렴하다.
    • 자체 로드밸런서를 직접 관리하면 확자성 측면에서 번거롭다.
  • 다수의 AWS의 서비스들과 통합되어 있다.
    • EC2 인스턴스
    • 스케일링 그룹
    • Amazon ECS
    • 인증서 관리(ACM)
    • CloudWatch
    • Route 53
    • WAF Global Accelerator 등
  • AWS 로드 밸런싱에는 무조건 ELB를 쓰는 것이 좋다.

상태 확인(Health Check)

  • ELB가 EC2 인스턴스의 작동이 올바르게 되고 있는지의 여부를 확인하기 위해 사용한다.
  • 상태 확인은 포트와 라우트에서 이뤄집니다.
  • 만약 response가 200 (OK)가 아니라면, 인스턴스 상태가 좋지 않다고 기록된다.

AWS의 로드밸런서 타입

  • Classic Load Balancer(v1 - 과거 세대) - CLB

    • HTTP, HTTPS, TCP, SSL(secure TCP)
  • Application Load Balancer(v2 - 신 세대) - ALB

    • HTTP, HTTPS, WebSocket
  • Network Load Balancer(v2 - 신 세대) - NLB

    • TCP, TLS(secure TCP), UDP
  • Gateway Load Balancer - GWLB

    • 네트워크 레이어(IP Protocol)
  • 더 많은 기능을 가지고 있는 신형 로드 밸런서를 사용하는 것이 권장된다.

  • 일부 로드밸런서들은 내부(internal)에 설정될 수 있어 네트워크에 개인적 접근(private)이 가능하다.

  • 웹사이트와 공공 애플리케이션 모두에 사용이 가능한 외부(external) 공공(public) 로드밸런서도 있다.

Classic Load Balancer(v1)

  • TCP(Layer 4), HTTP & HTTPS(Layer 7)을 지원한다.
  • TCP 혹은 HTTP로 상태확인을 진행한다.
  • 고정 호스트 이름을 부여받는다.
    • XXX.region.elb.amazonaws.com

Application Load Balancer(v2)

  • HTTP(Layer 7) 전용 로드 밸런서이다.
  • 머신 간 다수 HTTP 애플리케이션의 라우팅에 사용이 된다.(target groups)
  • 동일한 EC2 인스턴스 상의 여러 애플리케이션에 부하를 분산한다. (container, ECS)
  • HTTP/2와 WebSocket을 지원하며 리다이렉트도 지원한다.
    • HTTP에서 HTTPS로 트래픽을 자동 리다이렉트 하는 것이 가능하다.
  • 경로 라우팅을 지원한다.
- URL 대상 경로에 기반한 라우팅이 가능하다.
    - 예 : example.com/**users** & example.com/**posts**)


- URL의 호스트 이름에 기반한 라우팅이 가능하다.
    - 예 : **one.example.com** & **other.example.com**)


- 쿼리 문자열과 헤더에 기반한 라우팅도 가능하다.
    - 예 : example.com/user?**id=123&order=false**)
  • ALB는 마이크로 서비스나 컨테이너 기반 애플리케이션에 가장 좋은 로드밸런서이다.
    • 예 : Docker & Amazon ECS
  • 포트 매핑 기능이 있어 ECS 인스턴스의 동적 포트로의 리다이렉션이 가능하다.
  • 클래식 로드 밸런서와 비교
    • CLB 뒤에서 다수의 애플리케이션을 사용하는 경우 여러 개의 CLB가 필요하다.
      • 실제 애플리케이션 개수 만큼 로드 밸런서가 필요하다.
    • ALB는 하나로 다수의 애플리케이션을 처리할 수 있다.
  • Target Groups
    • EC2 instances (오토 스케일링 그룹에 의해 관리될 수 있다) - HTTP
    • EC2 tasks (ECS 스스로 관리된다) - HTTP
    • Lambda functions - HTTP 요청을 JSON 이벤트로 변환한다.
    • IP Address
      • 꼭 private IP이어야 한다.
    • ALB는 여러 Target Groups으로 라우팅 할 수 있다.
    • 상태 확인은 Target Group 레벨에서 이루어진다.
  • 고정 호스트 이름을 부여받는다.
    • XXX.region.elb.amazonaws.com
  • 애플리케이션 서버는 클라이언트의 실제 IP를 직접 볼 수 없다.
    • 클라이언트의 실제 IP는 X-Forwarded-For라고 불리는 헤더에 삽입된다.
    • Port(X-Forwarded-Port), 프로토콜(X-Forwarded-Proto)을 얻을 수 있다.

Network Load Balancer (v2)

  • Layer 4(L4) 밸런서
    • TCP나 UDP 기반의 트래픽을 인스턴스로 전달
    • 초당 수백만 건의 요청을 처리할 수 있다.
    • ALB보다 지연 시간이 훨씬 짧다.
      • ALB : 평균 400ms
      • NLB : 평균 100ms
  • NLB는 외부의 가용 영역 당 1개의 고정 IP를 노출한다.

    • 특정 IP를 화이트리스트에 추가할 때 유용하며 NLB 자체의 IP를 가져오는 대신 Elastic IP 할당을 지원한다.
      • 엔트리 포인트를 2개를 얻고자 할 때 NLB를 사용하면 된다.
  • 애플리케이션 전용의 특정 IP를 지정하면 NLB가 해당 트래픽을 EC2 인스턴스로 보내는 것이다.

  • ALB, CLB 모두 고정 IP가 없고 고정 호스트 이름이 있다.

  • 사용 예

    • 고성능
    • TCP 또는 UDP 수준의 트래픽을 얻을 때
  • Target Groups

    • EC2 Instances
      • Target Group에 EC2 인스턴스를 등록하면 NLB에서 트래픽 전송 방법을 파악한다.
    • IP Address
      • 고정 IP와 개인 IP를 지정해서 NLB에서 직접 트래픽을 보낸다.
        • EC2 인스턴스의 경우 자체 데이터 센터에 서버가 있는 경우 개인 IP가 있는 서버의 로드 밸런서를 사용한다.
    • Application Load Balancer
      • NLB의 기능을 활용해서 고정 IP를 가질 수 있기 때문
      • NLB 수준의 고정 IP를 가지면서 규칙과 같은 HTTP 관련 기능에 ALB를 활용할 수 있다.

Gateway Load Balancer

  • GWLB는 배포 및 확장과 AWS의 타사 네트워크 가상 어플라이언스의 플릿 관리에 사용된다.
    • 예 : 방화벽, 침입 탐지 및 방지 시스템, IDPS, 심층 패킷 분석 시스템, 페이로드 수정 등
  • Layer 3 (네트워크 레이어) - IP Packets
    • Transparent Network Gateway
      • 모든 트래픽은 단일 엔트리와 출구를 통과하기 때문
    • Load Balancer
      • 가상 어플라이언스 집합에 전반적으로 그 트래픽을 분산하기 때문
  • 6081번 포트의 GENEVE 프로토콜을 사용해라.
  • Target Groups
    • EC2 instances
    • IP Addresses
      • private IP이어야 한다.

Sticky Sessions(Session Affinity)

  • 로드 밸런서에 2가지 요청을 수행하는 클라이언트가 요청에 응답하기 위해 백엔드에 동일한 인스턴스를 갖는 것이다.
    • 예를들어 A 클라이언트가 1번 인스턴스에 요청을 하면 이후 모든 A 클라이언트의 요청은 1번 인스턴스로 가는 것이다.
  • CLB, ALB에서 설정할 수 있다.
  • "cookie"를 사용해 클라이언트에서 로드 밸런서로 요청의 일부로서 전송되는 것이다.
    • 고정성과 만료 기간이 있다.
    • 쿠키가 만료되면 클라이언트가 다른 EC2 인스턴스로 리디렉션 된다.
  • 사용 예
    • 사용자의 로그인과 같은 중요한 정보를 취하는 세션 데이터를 잃지 않기 위해 사용자가 동일한 백엔드 인스턴스에 연결된다.
  • Sticky Session(고정성)을 사용하면 백엔드 EC2 인스턴스 부하에 불균형을 초래할 수 있다.
    • 일부 인스턴스는 고정 사용자를 갖기 때문이다.

Cookie Name

  • Application-based Cookies(애플리케이션 기반 쿠키)
    • Custom cookie
      • target에서 생성 됨
      • 애플리케이션에 필요한 모든 사용자 정의 속성을 포함할 수 있다.
      • Cookie Name은 각 target group별로 개별적으로 지정해야 한다.
        • AWSALB, AWSALBAPP, AWSALBTG를 사용해서는 안된다.(ELB에서 사용하기 때문)
    • Application cookie
      • 로드 밸런서 자체에서 생성된다.
      • ALB의 cookie name은 AWSALBAPP이다.
  • Duration-based Cookies(기간 기반 쿠키)
    • 로드 밸런서에서 생성된다.
    • ALB에서는 이름이 AWSALB이며 CLB에서는 AWSELB이다.
    • 특정 기간을 기반으로 만료되며 그 기간이 로드 밸런서 자체에서 생성되는 것이다.

Cross-Zone Load Balancing

  • Application Load Balancer
    • 항상 활성화되어 있고 비활성화 할 수 없다.
    • AZ 간 데이터 전송에 관한 비용이 없다.
  • Network Load Balancer
    • 기본적으로 비활성화 되어 있다.
    • 활성화 할 경우 AZ 간 데이터 전송에 관한 비용을 지불해야 한다.
  • Classic Load Balancer
    • 기본적으로 비활성화 되어 있다.
    • 활성화 할 경우 AZ 간 데이터 전송에 관한 비용이 없다.

SSL/TLS

  • SSL 인증서를 사용하면 클라이언트와 로드 밸런서 사이에서 전송 중에 있는 트래픽을 암호화할 수 있다.
    • in-flight 암호화라고 불리는 과정으로 데이터가 네트워크를 통과하는 중에 암호화되고 발신자와 수신자만이 이를 해독할 수 있다.
  • SSL
    • Secure Sockets Layer(소켓 계층 보안)을 뜻하며 연결을 암호화하는 데에 사용된다.
  • TLS
    • Transport Layer Security(전송 계층 보안)을 뜻하며 SSL의 최신 버전이다.
  • 최근 TLS 인증서를 주로 사용하지만 대부분의 사람들이 SSL이라고 부르고 있다.
  • Public SSL 인증서는 Certificate Authorities(CA) 기관에서 발급된다.
  • SSL 인증서에는 유효 기간이 있고 인증을 위해 주기적으로 갱신되어야 한다.

Load Balancer 관점

  • 유저가 HTTPS를 통해 연결된다.
    • 공용 인터넷을 통해 로드밸런서와 연결된다.
    • 로드밸런서는 SSL 인증서 종료 작업을 수행한다.
    • 백엔드는 HTTP 통신을 통해 EC2 인스턴스와 통신한다.
      • 사설 네트워크인 VPC를 통해 전송하기 때문에 어느 정도의 안전성을 보장한다.
  • 로드밸런서는 X.509 인증서를 불러온다.
    • SSL 혹은 TLS 서버 인증서라고 불리는 인증서이다.
    • AWS에서 ACM(AWS Certificate Manager)을 사용해 SSL 인증서를 관리할 수 있다.
    • HTTPS 리스너를 설정할 때는 기본 인증서를 지정해야 한다.
      • 다수의 도메인을 지원하는 인증서 선택 목록을 추가할 수 있다.
      • Client는 SNI(Server Name Indication)을 사용해서 도달하는 호스트 이름을 지정할 수 있다.
      • 원하는 경우 HTTPS에 대해 특정한 보안 정책을 설정할 수 있다.

SNI(Server Name Indication)

  • SNI를 사용하면 한 웹서버 상에 다수의 SSL 인증서를 발급해 단일 웹 서버가 여러 개의 웹 사이트를 제공하도록 하는 문제를 해결한다.
  • 클라이언트가 초기 SSL handshake에서 대상 서버의 호스트 이름을 명시해야 한다.
  • ALB, NLB와 같은 최신 버전의 로드 밸런서나 CloundFront에서만 작동한다.
  • 구형의 CLB에서는 작동하지 않는다.

SSL Certificates

  • Classic Load Balancer(v1)
    • 하나의 SSL 인증서만 지원한다.
    • 여러 SSL 인증서가 있는 다중 호스트 이름이 필요한 경우 다수의 CLB를 사용하는게 좋다.
  • Application Load Balancer(v2)
    • 다중 SSL 인증서를 가진 다수의 리스너를 지원할 수 있다.
      • SNI를 사용하여 작업한다.
  • Network Load Balancer(v2)
    • 다중 SSL 인증서를 가진 다수의 리스너를 지원할 수 있다.
      • SNI를 사용하여 작업한다.

Connection Draining

  • 다양한 별명

    • CLB : Connection Draining (연결 드레이닝)
    • ALB, NLB : Deregistration Delay (등록 취소 지연)
  • 인스턴스가 등록 취소, 혹은 비정상적인 상태에 있을 때 인스턴스에 어느 정도의 시간을 주어 in-flight 요청, 즉 활성 요청을 완료할 수 있도록 하는 기능이다.

  • 연결이 드레이닝되면 즉 인스턴스가 드레이닝되면 ELB는 등록 취소 중인 EC2 인스턴스로 새로운 요청을 보내지 않는다.

  • 1~3600초 사이의 값을 설정할 수 있는데 기본적으로는 300초(5분) 이다.

  • 0초로 지정하면 비활성화가 되어 드레이닝이 일어나지 않는다.

'프로그래밍 > AWS Solutions Architect' 카테고리의 다른 글

AWS SAA - Amazon RDS  (0) 2022.05.15
AWS SAA - Auto Scaling Group (ASG)  (0) 2022.05.12
AWS SAA - Scalability & High Availability  (0) 2022.05.12
AWS SAA - EC2 Instance Storage  (0) 2022.05.12
AWS SAA - EC2 (2)  (0) 2022.05.11