Question

  1. 사내 클라우드 보안을 강화하고자 WAF를 도입했습니다.

  2. 이용하고 있는 EKS의 로드 밸런서가 CLB라 만든 WAF에 CLB를 연결할 수가 없습니다.

  3. CLB를 ALB로 마이그레이션해야할 것 같은데, 무중단으로 어떻게 할 수 있을지에 대한 조언을 얻고 싶습니다.


Answer

1. 로드밸런서 마이그레이션 시 EKS에서의 고려 사항

- EKS 클러스터에서는 AWS Load Balancer Controller를 통해 LoadBalancer타입의 Service 생성 시 자동으로 CLB가 생성되고, Ingress 생성 시 ALB가 생성됩니다.

  따라서 CLB에 등록되어 있던 Target Group이 새로 생성된 ALB의 Target Group에도 동일하게 등록될 수 있도록 Ingress를 설정하거나, AWS 콘솔에서 수동으로 Target Group 등록이 필요합니다.

  또한 이후에 CLB를 삭제하기 위해 LoadBalancer타입의 Service가 삭제될 예정이라면, Ingress를 통해 서비스로 트래픽이 전달될 수 있도록 NodePort나 ClusterIP 타입의 서비스를 추가로 생성한 뒤 Ingress에 매핑하여 주어야 합니다.


2. 로드 밸런서 마이그레이션 중 가동 중지 시간

- 로드밸런서 간 트래픽 전환 시 가동 중지 시간을 최소화하기 위해서는 Amazon Route 53의 가중치 기반 라우팅 정책을 사용하여 트래픽을 새로운 로드 밸런서로 점진적으로 라우팅하는 방법이 있습니다. 


테스트 결과 생성한 CLB와 ALB의 DNS 이름으로 웹 브라우저를 통해 모두 접속이 가능하며,

트래픽 끊김 없이 마이그레이션 할 수 있도록 Route53의 호스팅 영역에 example.com과 같은 새로운 도메인 이름을 생성 후

2개의 DNS이름을 별칭 레코드(A)로 등록, 가중치 기반 라우팅을 지정할 수 있습니다. 


- 로드 밸런서 간 트래픽 전환 시 가동 중지 시간을 최소화하기 위해 다음과 같은 pre-warm 방법을 고려할 수 있습니다.


  1. 사전에 대기 중인 서버 준비 

로드 밸런서로 트래픽을 전환하기 전에, 새로운 서버를 사전에 구성하고 초기화하여 대기 상태로 유지합니다. 이를 통해 서버가 트래픽을 처리할 준비가 되어 있으며, 가동 중지 시간을 최소화할 수 있습니다.


  1. 서버 사전 로딩

로드 밸런서로 트래픽을 전환하기 전에, 사전에 서버를 로딩하여 필요한 소프트웨어, 데이터 또는 캐시 등을 사전에 메모리에 로드합니다. 이를 통해 서버가 가동되면 즉시 트래픽을 처리할 수 있으므로 응답 시간을 최소화할 수 있습니다.


  1. 트래픽 점진적 이동

로드 밸런서로 트래픽을 전환할 때, 새로운 로드 밸런서에 점진적으로 트래픽을 이동시킵니다. 예를 들어, 처음에는 새로운 로드 밸런서에 일부 트래픽을 전달하고, 이후 시간이 지남에 따라 점차적으로 트래픽을 늘려나갑니다. 이를 통해 서버 부하를 분산시키고, 트래픽 전환 시 가동 중지 시간을 최소화할 수 있습니다.


  1. 자동화된 배포

로드 밸런서 간의 트래픽 전환을 자동화된 배포 프로세스로 관리합니다. 이를 위해 배포 도구나 오케스트레이션 도구를 사용하여 로드 밸런서 구성 및 트래픽 전환을 자동화하고, 최소한의 가동 중지 시간을 유지할 수 있습니다.


이러한 pre-warm 방법은 로드 밸런서 간의 트래픽 전환 시 가동 중지 시간을 최소화하기 위한 일부 전략입니다. 선택한 방법은 시스템 요구 사항과 환경에 따라 달라질 수 있으며, 실제 구현에는 테스트와 성능 모니터링이 필요합니다.



References:

[1] Route53에 새롭게 지정한 도메인에 A 레코드로 2개의 로드밸런서 DNS 이름을 등록하여 가중치를 부여

https://aws.amazon.com/ko/premiumsupport/knowledge-center/migrate-classic-load-balancer/

[2] 테스트 후 새로운 로드밸런서에 문제가 없는 것으로 보이는 경우 이전 로드밸런서 삭제

https://docs.aws.amazon.com/ko_kr/Route53/latest/DeveloperGuide/resource-record-sets-values-weighted-alias.html

[3] 예제 템플릿 다운

https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.3.1/docs/examples/2048/2048_full_latest.yaml