여기 정리하는 내용들은 Udemy 강의를 통해 배운 내용들을 정리하였습니다.
출처 - Udemy AWS Certified Developer Associate 2022 - New!


EBL Sticky Sessions (Session Affinity)

Load Balancer를 통해 유입되는 client가 항상 같은 instance 로 배정되도록 합니다.
cookie를 사용합니다.


Application-based Cookies (Type 1)

  • Custom cookie
    • target에 의해 만들어집니다.
    • application 에서 요구하는 custom attributes 정보를 가지고 있습니다.
    • Each target group 마다 특정 Cookie name이 있어야 합니다.
      • “AWSALB”, “AWSALBAPP”, or “AWSALBTG”는 ELB에서 사용되는 keyword 이기 때문에 Cookie name으로 쓸 수 없습니다!


  • Application cookie
    • load balancer에 의해서 만들어집니다.
    • “AWSALBAPP” 이라는 특정 Cookie name을 가지고 있습니다.


Duration-based Cookies (Type 2)

  • load balancer에 의해서 만들어집니다.
  • “AWSALB” for ALB, “AWSELB” for CLB 라는 특정 Cookie name을 가집니다.

    aws console > EC2 > Load Balancing > target group > Edit attributes > stickiness
    위 경로에 가면 type 이름이 Load balancer generated cookie 라고 표시되어 있는데 이것이 Duration-based Cookie이다.


Sickiness을 AWS console에서 해보면서 깨달은 점은

  1. Classic Load Balancer에서는 Target group 설정이 되지 않아 stickiness 설정을 할 수 없다.
  2. Stickiness Duration은 1 초 ~ 7 일 까지만 가능했습니다. (더 길게 하는 방법이 있을까요?)
    Chrome을 사용하는 사람은 Coockie 정보를 보기 위해 inspector > application > cookies > 해당 사이트에서 볼 수 있습니다.
    Cookies의 Request/Response 정보는 Inspector > Network > Name 섹션의 해당 웹페이지 클릭 > Cookies tab 클릭
    inspector 을 킨 후에 웹페이지를 refresh해줍니다.


Cross-Zone Load Balancing

다른 AZ에 있는 모든 Instances에 동일하게 traffic을 분배하는 기능입니다.

예시!!
AZ1 안에 2개의 Instances 가 있고, AZ2 안에 8개의 Instances 가 있다고 가정해봅시다.
AZ1 과 AZ2에 각각 50이라는 traffic이 발생했을때

  1. Cross-Zone Load Balancing을 사용하지 않으면,
    AZ1의 각각의 Instance에 25만큼의 traffic이 배정될 것이고,
    AZ2의 각각의 Instance에 6.25만큼의 traffic이 배정될 것입니다.
  2. Cross-Zone Load Balancing을 사용하게 되면,
    AZ1과 AZ2의 모든 Instances 각각에 10 만큼의 traffic을 배정해줍니다.


  • Application Load Balancer에서
    • 항상 Cross-Zone 기능이 On(Enable) 상태 입니다. (Disabled로 만들 수 없습니다.)
    • inter AZ data transfers에 대한 요금은 발생하지 않습니다.
  • Network Load Balancer에서
    • default로 Cross-Zone 기능이 Disabled 상태입니다.
    • enabled 상태로 만들게 될때 inter AZ data tranfers에 대한 요금이 발생합니다.
  • Classic Load Balancer
    • default로 Cross-Zone 기능이 Disabled 상태입니다.
    • enabled 상태로 만들더라도 inter AZ data transfers데 대한 요금은 발생하지 않습니다.


SSL/TLS certificate

Clients와 Load Balancer 사이에 traffic이 이동하는 동안 encrypted 되도록 합니다. (in-flight encryption)
SSL = Secure Sockets Layer (encrypt connections에 사용됩니다.)
TLS = Transport Layer Security (SSL의 새로운 버전)

TLS가 많이 사용되고 있지만 여전히 SSL을 참조하고 있습니다.


Public SSL은 Certificate Authorities(CA)에 의해 issued(발생) 됩니다.

CA의 예
Comodo, Symantec, GoDaddy, GloblaSign, Digicert, Letsencrypt, 등등등


SSL Certificate은 만료일(우리가 설정합니다.)이 있으며 자주 갱신되어야 합니다.


  • AWS에서는 AWS Certificate Manger(ACM)라는 서비스가 있습니다.
  • HTTPS listener을 set 할 수 있습니다.
    • default certificate을 설정해줘야합니다.
    • optional list of certificates를 더해줄 수 있습니다.
    • Clients는 Server Name Indication(SNI)를 사용하여 hostname을 특정지을 수 있습니다.
    • older version을 위한 security policy를 특정지을 수 있습니다.
  • CLB (v1)
    • 한 개의 SSL certificate만 지원합니다. (multiple hostname을 위해 multiple CLB가 필요합니다.)
    • Load Balancer > Listeners > Edit > ADD HTTPS > Change Cipher && Change SSL Certificate

  • ALB/NLB (v2)
    • multiple listeners w/ multiple SSL certificates 를 지원합니다.
    • SNI를 사용하기 때문에 가능합니다.
    • Load Balancer > Listeners > Add Listener > HTTPS protocal > Default action : Forward to Target group > Set Security policy && Default SSL certificate
      NLB의 경우 : HTTPS가 아닌 TLS 입니다.


SSL - Server Name Indication

Multiple SSL Certificates를 한 웹서버에 로딩하는 문제점를 해결해줍니다. (이로써 서버는 multiple 웹사이트를 serve 할 수 있습니다.)

ALB 와 최신 버전 NLB, 그리고 CloudFront 에서만 지원됩니다.
CLB에서는 지원되지 않습니다.

Connection Draining

사실 두가지의 이름을 가지고 있습니다.

  1. Connection Draining - for CLB
  2. Deregistration Delay - for ALB & NLB


그래서 Connection Draining의 개념은
instance가 de-registering 이거나 unhealthy일때 in-flight requests를 완료할 수 있게 시간을 주는 것입니다.
동시에 새로 들어오는 request는 해당 instance가 아닌 다른 instance로 보냅니다.


다음 post에는 Auto Scaling Groups(ASG)에 대해 post하겠습니다.