Notice
Recent Posts
Recent Comments
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Archives
Today
Total
관리 메뉴

채록채록

[AWSCloudClubs] Elastic Load Balancing, ALB, NLB, GLB, Sticky Sessions, SSL, TLS, SNI, Auto Scailing Group 본문

Cloud Computing

[AWSCloudClubs] Elastic Load Balancing, ALB, NLB, GLB, Sticky Sessions, SSL, TLS, SNI, Auto Scailing Group

김책은 2024. 9. 21. 17:09

"EC2 인스턴스의 보안 그룹을 Load Balancer의 보안그룹으로 연결함으로써 EC2 인스턴스는 Load Balancer에서 오는 트래픽만을 허용하게 되는 강화된 보안 메커니즘을 구현할 수 있다."

클라우드컴퓨팅 팀플을 하면서 Nginx를 EC2에 설치하고 라우팅을 하면서 조금 애를 먹었었다. (잘몰라서)
오히려 개발 속도가 늦어지는 것 같아 아 이게 도대체 왜 필요할까 싶었는데 ELB를 먼저 알았더라면 그런 시간낭비는 줄일 수 있었을 것 같다. 

아니 오히려 그런 시간이 있어서 ELB의 중요성을 알고 공부할 수 있는거라고 긍정적으로 생각하자!


ELB (Elastic Load Balancing)

  • Application Load Balancer
    • HTTP, HTTPS 타입의 트래픽을 위한 L7 로드밸런서
      • http 헤더, url 경로, 호스트명 등을 기반으로 http/https 트래픽을 라우팅할 수 있다는 의미
    • Has a port mapping feature to redirect to a dynamic port in ECS?
    • 두개의 독립된 마이크로 서비스가 서로 다른 작업을 처리해도 url에서 사용되는 라우팅을 기반으로 각 대상 그룹으로 지능적으로 라우팅 하는 방법을 알고있는 동일 애플리케이션 로드밸런서 뒤에 있으면 된다.
    • application server는 clinet의 IP를 직접 보지 못한다.
      1. client IP는 Load balancer와 직접 통신해 Connection termination 수행
      2. Load balancer가 EC2 인스턴스와 통신할 때에는 Load balancer IP(Private IP)를 이용해 EC2 인스턴스로 들어가게 된다.
      3. EC2 인스턴스가 클라이언트의 IP를 알기 위해서는 HTTP 요청에 있는 추가 헤더를 확인해야한다. (ft. X-Forwarded-For, X-Forwarded-Port, X-Forwarded-Proto)
    • Target Groups : EC2 instances(can be managed by Auto Scaling Group), ECS tasks, Lambda functions, IP Address(private IP)
    • Cross-Zone Load Balancing이 default값 O
  • Network Load Balancer
    • TCP, UDP, TCP기반의 TLS를 위한 L4 로드밸런서
      • IP주소 및 포트 정보를 기반으로 tcp및 udp 트래픽을 라우팅한다는 의미
      • 초고성능 환경구축
      • 지연시간 최소 유지, 초당 수백만건의 요청 처리
      • AZ별로 하나의 static IP를 갖는다. + 탄력적 IP주소를 각 AZ에 할당할 수 있다.
        • 여러 개의 고정 IP를 가진 애플리케이션을 노출할 때 유용하다.
        • 1~3개의 IP로만 엑세스할 수 있는 애플리케이션을 만들라는 문제가 나오면 Network Load Balancer을 고려하자.
    • Target Groups : EC2 instances, IP Address(private IPs), ALB(HTTP 유형의 트래픽을 처리하는 규칙을 얻을 수 있으므로)
    • Health Check support the TCP, HTTP, HTTPS → 백엔드 애플리케이션이 http/https를 지원하면 해당 프로토콜에 대한 상태확인을 정의할 수 있다.
    • Cross-Zone Load Balancing이 default값 X
  • Gateway Load Balancer
    • 모든 로드밸런서보다 낮은 수준, IP packets의 Network 계층인 L3의 로드밸런서
    • Deploy, scale, manage a fleet of 3rd party network virtual applicances in AWS
    • Transparent Network Gateway : VPC의 모든 트래픽이 single entry/exit인 GWLB를 통과하기 때문이다.
    • Load Balancer : 3rd party Virtual Appliance로 이루어진 Target Group에 traffic을 분산하기 때문이다.
    • ex : 사용자가 애플리케이션으로 이동하기 전에 모든 네트워크 트래픽을 검사할 때
    1. 트래픽이 애플리케이션이 도달하기 전에 트래픽을 통과하도록 3rd party virtual appliance(EC2 인스턴스같은)을 배포한다.
    2. VPC에서 라우팅 테이블을 수정하면 모든 사용자 트래픽은 GWLB를 통과하게 되고, GWLB는 virtual appliance의 대상 그룹 전반으로 트래픽을 확산한다.
    3. Appliance는 모든 트래픽을 분석하고 처리 (firewall, 침입 탐지 등) 하여 GWLB로 다시 보내거나 트래픽을 드롭한다.

    • Target Group : EC2 instances, IP Address(private IPs)
    • Cross-Zone Load Balancing이 default값 X
  • Uses the GENEVE protocol on port 6081 → GWLB

cf : aws의 network load balancer나 gateway load balancer의 target group이 IP address가 되는 경우 그 ip 주소는 private ip여야 하는 이유는 VPC 내의 사설 네트워크에서 트래픽을 안전하게 분산 처리하기 위한 것 이다.
cf : 온프레미스 인스턴스로 대상그룹을 설정했다면 load balancer는 VPN이나 Direct Connect를 통한 연결을 수행

Sticky Sessions (Session Affinity)

  • cookie : 클라이언트에서 로드밸런서로 요청의 일부로서 전송되는 것.
    • request cookies에서는 브라우저가 로드 밸런서에 요청을 보내면 존재하는 쿠키를 같이 전송한다. 그러면 stickyness가 구현된다.
    • Application-based Cookies
      • Custom cookie : 애플리케이션에 필요한 모든 사용자 정의 속성을 포함할 수 있다. 각 대상 그룹별로 개별적으로 지정해야한다.
      • Application cookie : load balancer에 의해 생성
    • Duration-based Cookie
      • 로드밸런서 자체에서 설정되는 특정 기간을 기반으로 만료된다.
  • Target Group에 설정 후 로드밸런서가 Stickyness를 실행시 해당 쿠키 이름이 쓰인다.

SSL (Secure Sockets Layer) / TLS (Transport Layer Security)

  • traffic btw client&load balancer to be encrypted in transit (ft. in-flight encryption)
    • 서버가 클라이언트의 요청을 받으면 인증서를 클라이언트에게 전달하여 암호화된 연결을 설정하게 된다.

SNI (Server Name Indication)

  • SNI solves the problem of loading multiple SSL certificates → one web server (to serve multiple websites) = 한 웹 서버에서 여러 개의 ssl 인증서를 로딩하는 문제를 해결하여, 하나의 웹 서버가 여러 웹사이트를 제공할 수 있게 해준다.
    • 하나의 ip 주소에서 여러 개의 도메인을 지원할 수 있게 해주는 기술
    1. 최초 SSL handshake단계에서 클라이언트는 서버에 연결 요청을 보낼 때 자신이 접속하려는 도메인(서버 이름)을 먼저 전송한다.
    2. 서버는 이 정보를 바탕으로 해당 도메인에 맞는 ssl 인증서를 선택하여 클라이언트에게 제공한다.

ALB/NLB는 한 리스너에서 여러 개의 SSL 인증서를 사용하거나, 여러 리스너를 설정하여 각각의 리스너가 다른 SSL 인증서를 사용할 수 있도록 구성할 수 있다.

Connection Draining (Deregistration Delay)

짧은 요청의 경우에는 draining time connection param을 낮은 값으로 설정하자. EC2 인스턴스가 빠르게 draining되고 오프라인 상태가 되어 교체 등 작업을 할 수 있기 때문.

ASG (Auto Scailing Group)

  • Scale In/Out EC2 instances
  • Load Balacner와 페어링하는 경우 ASG에 속한 모든 인스턴스가 LB에 연결된다.
    • ELB가 EC2 인스턴스들의 health check(상태 확인)을 하고 ASG에 전달
  • Launch Template 설정
    • AMI+Instance Type, EC2 User Data, EBS Volumes, Security Groups, SSH Key Pair, IAM Roles for EC2 Instances, Network+Subnets Information, Load Balancer Information
  • Scaling Policies
    • Dynamic Scailing
      • Target Tracking Scailing
      • Simple/Step Scailing : When CloudWatch alarm is triggered
    • Scheduled Scailing
    • Predictive Scailing : 주기적인 데이터가 있는 경우에 유용
  • Scailing Cooldowns : 인스턴스 추가/제거 할 때마다 쿨다운 시간동안 ASG는 추가 인스턴스 작업을 하지 않는다.

오답노트

Application Load Balancer를 사용하여 EC2 인스턴스에 트래픽을 배분하는 경우, 요청을 받게되는 IP주소는 ALB의 사설 IP 주소가 된다. 대신 ALB는 클라이언트의 IP주소를 포함하고 있는 X-Forwarded-For라는 헤더를 추가하기 때문에 웹사이트의 백엔드를 수정해 X-Forwareded-For 헤더로부터 클라이언트 IP주소를 가져오도록 만들면 된다.

Q. Application Load Balancer는 트래픽을 다른 대상 그룹으로 라우팅할 수 있다. 이 때, 확인할 내용으로 사용할 수 없는 것은?
A. 클라이언트의 지리적 위치
→ ALB는 URL 경로, 호스트 이름(Domain Name), HTTP 헤더/쿼리 문자열을 기반으로 트래픽을 다른 대상 그룹으로 라우팅할 수 있다.

Q. 규정 준수를 위해, 고정된 정적 IP 주소를 최종 사용자에게 노출하여 사용자들이 안정적이고, 규제 기관의 승인을 받은 방화벽 규칙을 작성할 수 있도록 하려 합니다. 이런 경우, 다음 중 어떤 종류의 Elastic Load Balancer를 사용해야 할까요?
A. Network Load Balancer
→ Network Load Balancer는 AZ당 하나의 정적 IP주소를 가진다.

Q. Application Load Balancer 내에 사용자 지정 애플리케이션 기반 쿠키를 생성할 때, ELB가 선점하고 있는 쿠키 이름은?
A. AWSALB, AWSALBAPP, AWSALBTG

서버 이름 표식(SNI)을 사용하면 동일한 리스너 상에 있는, 자체 SSL 인증서를 가진 다수의 https 애플리케이션을 노출시킬 수 있다.

Q. 여러분의 상사가 애플리케이션이 데이터베이스로 보내는 분당 요청 수를 기반으로 오토 스케일링 그룹을 스케일링하라고 요청했습니다. 어떻게 해야 할까요?
A. 상세 모니터링을 활성화한 후 ASG 스케일링을 위한 CloudWatch 경보 생성하기 (X)
CloudWatch 사용자 지정 지표를 생성한 후 ASG를 스케일링하기 위한 CloudWatch 경보 생성 (O)
→ CloudWatch 경보를 생성하려면 CloudWatch 사용자 지정 지표를 먼저 생성해야 한다.

Q. 오토 스케일링 그룹(ASG)과 네트워크 로드 밸런서로 구성된 환경이 있습니다. ASG에 있는 애플리케이션은 HTTP 프로토콜을 지원하고 로드 밸런서 상태 확인(Health Check)을 사용하도록 설정돼 있습니다. 다음 중 현재 사용하고 있는 TCP 상태 확인을 HTTP 상태 확인으로 변경하는 방법은 무엇입니까?
A. 상태 확인 방식을 HTTP로 변경한다. NLB는 TCP, HTTPS, HTTP 상태 확인을 지원하기 때문이다.

Q. 한 웹 사이트가 애플리케이션 로드 밸런서 뒤에 있는 오토 스케일링 그룹의 EC2 인스턴스에서 호스팅되고 있습니다. 현재 HTTP로 서비스 중인 웹 사이트를 HTTPS로 바꾸는 작업을 진행하고 있습니다. ACM 인증서를 발급받아 애플리케이션 로드 밸런서에 적용한 상태입니다. 사용자들이 HTTP가 아닌 HTTPS를 사용해 웹 사이트에 접속하게 하려면 어떻게 해야 합니까?
A. DNS 레코드가 HTTP를 HTTPS로 리디렉션하도록 설정한다. (X)
→ DNS는 단순히 네트워크 요청을 특정 서버로 라우팅하는 역할을 할 뿐, 프로토콜 변환을 처리하지 않는다.
ALB가 HTTP를 HTTPS로 리디렉션하도록 설정한다. (O)
→ ALB는 SSL 인증서를 통해 SSL termination을 수행할 수 있다. 추가로 ALB는 리디렉션 규칙을 설정하여 http(포트 80)으로 들어오는 요청을 https(포트 443)로 리디렉션할 수 있다.