AWS

Cross-zone Load Balancing, SSL, Connection Draing

박현국 2024. 10. 14. 01:59
Cross-zone Load Balancing (교차 영역 밸런싱)
  • Load Balancer = Instance 
  • 불균형한 상태의 두 가용 영역에서 한쪽에는 EC2 인스턴스 2개의 로드 밸런서와 다른 쪽에는 로드밸런서 인스턴스 8개가 있다고 가정하면, 클라이언트가 로드 밸런서에 접속할때, 교차 영역 로드 밸런싱을 쓰면, 각각의 로드 밸런서 인스턴스가 모든 가용 영역에 등록된 모든 인스턴스에 부하를 고르게 분배한다.
  • 클라이언트가 트래픽의 절반을 첫번째 ALB 인스턴스로 보내고, 나머지 절반을 다른 쪽으로 보냈다고 가정하여도, ALB 는 받은 트래픽을 10개의 EC2 인스턴스에 모두 전달한다. 가용영역에 상관없이 --> 이게 Cross-zone Load Balancing 이다. 

Cross-zone Load Balancing 예시

  • 2번째 방식은, 영역을 교차하지 않고 부하를 분산하는 것
  • 같은 상황일 때 영역을 교차하지 않고 요청을 분산하면 Elastic Load Balancer 노드의 인스턴스로 분산된다.
    ->> 교차영역과 동일하게 클라이언트가 트래픽의 절반을 첫번째 가용 영역으로 보내고, 나머지 절반을 두번째 영역으로 보냈다고 가정해보면,  첫번째 ALB 인스턴스는 자기 영역에 있는 두 개의 인스턴스에게만 트래픽을 보낼 것이다.
    그래서 AZ1에 있는 두 개의 인스턴스는 각각 트래픽의 25%씩을 할당 받을 것이다. AZ2 에도 등록된 EC2 인스턴스 개수로 나누는데, 교차 영역 밸런싱이 아니기 때문에 각 가용 영역 안에서 부하가 분산된다.
  • 만약 가용 영역마다 EC2 인스턴스의 개수가 다르다면, 특정 영역에 있는 EC2 인스턴스에게 좀 더 많은 트래픽이 할당될 것이다.
  • 이것들을 고려하여 Cross-zone 으로 할 것인지, Without Cross Zone 으로 할 것인지 고려하면 된다.

Without Cross Zone 예시

 

 

 

Load Balancer 에서 SSL 의 동작

일단 하기 전 SSL 은 클라이언트와 로드 밸런서 사이에서 트래픽이 이동하는 동안 암호화 해주는 역할 -->> 전송중(in-flight) 암호화  --> 데이터는 네트워크를 이동하는 중에는 암호화 되고, 송신자와 수신자 측에서만 이를 복호화할 수 있다..

  • 사용자가 HTTPS 를 통해 접속한다. (HTTPS 에서 S는 SSL 인증서를 써서 암호화하여 안전하다는 뜻)
  • 접속하게 되면, 로드 밸런서에서는 내부족으로 SSL 종료(SSL Termination)를 수행한다. (백엔드에서는 HTTP 로 EC2 와 통신)
  • VPC 로 이동하는 트래픽은 프라이빗 네트워크를 쓰기 때문에 안전하게 보호된다.
  • Load Balancer 는 X.509 인증서를 사용 -> SSL 또는 TLS 서버 인증서라고 부른다
  • AWS 에서는 이 인증서들을 관리할 수 있는 ACM(AWS Cerificate Manager) - AWS 인증서 관리자 이 있다. 

SSL 예시

  • 클라이언트는 SNI(서버 이름 지정) 을 써서 접속할 호스트의 이름을 알릴 수 있다.
  • SNI 는 여러 개의 SSL 인증서를 하나의 웹 서버에 로드하여, 하나의 웹 서버가 여러 개의 웹 사이트를 지원할 수 있게 해주는 것 -> 즉, 확장된 프로토콜이며, 클라이언트가 대상 서버의 호스트 이름을 지정하도록 한다.
  • SNI 는 CloudFront 에서만 동작한다.
  • 어떤 로드밸런서에 SSL 인증서가 여러 개 있다면 ALB 나 NLB 둘 중 하나이다. \
  • SNI 구조
    1. ALB 에 두 개의 SSL 인증서가 있다고 가정 (ALB 는 어떤 규칙에 의해 트래픽을 라우팅할 대상 그룹을 고를 것이다. -> 규칙: 호스트 이름)
    2. 클라이언트는 ALB 에 접속하여 하나의 SSL 인증서에 접속하고 싶다면
    3. ALB 는 해당 인증서에 접속하고 싶다는 것을 파악하고, 해당 SSL 인증서를 로드하는데, 요청을 수행하려면 해당하는 인증서를 가져와 트래픽을 암호화한 다음, 규칙에 따라 대상 그룹인 해당 인증서로 요청을 재전송한다.
    --> 이렇게 SNI(Server Name Indication) 을 사용하여 여러 개의 대상 그룹과 웹사이트를 지원할 수 있다. -> 다중 SSL

SNI 예시

 

 

 

 

Connection Draining = Deregistration Delay(등록 취소 지연)
  • Connection Draining - for CLB, Deregistration Delay - for ALB & NLB
  • 이는 인스턴스가 등록 취소, 혹은 비정상인 상태에 있을 때 인스턴스에 어느정도의 시간을 주어 in-flight 요청, 즉 활성 요청을 완료할 수 있도록 하는 기증
  • 연결이 드레이닝되면 즉 인스턴스가 드레이닝되면 ELB 는 등록 취소 중인 EC2 인스턴스로 새로운 요청을 보내지 않는다. 
    1. 예시: EC2 인스턴스에 이미 연결된 유저는 충분한 드레이닝 시간을 얻게될 것이고, 기존 연결 및 기존 요청을 완료할 수 있을 것이다. 그리고 작업이 끝나면 모든 연결이 정지된다. 
    --> 만약 새로운 유저가 ELB 에 연결하려고 하면 ELB 는 기존의 EC2 인스턴스가 드레이닝 상태에 있으므로 새로운 연결은 다른 EC2 인스턴스와 수립될 거라는 점을 알고 있다. -> 다른 EC2 인스턴스를 사용할 것이다.
    여기서 연결 드레이닝 파라미터는 매게변수로 표시할 수 있다. 1~3600초 사이의 값으로 설정 가능(default : 300 s)

Connection Draining 예시