ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [AWS] 강의실습 - (9) Amazon ELB(ALB, NLB)
    Environment(개발환경)/Infra(인프라) 2023. 7. 26. 10:21
    반응형

    AWS 강의 커리큘럼을 통해, 기본적인 사용법 학습과 경험을 취득하고자 수강을 시작했다!

    애초에 코딩하면서 수기노트를 한 적도 까마득하며, 글씨 쓰는것도 귀찮아하는 나이기에 포스팅으로나마 주요내용을 정리하며 강의를 들으려한다!

    - 강의 : CloudNet@와 함께하는 AWS 네트워킹 입문 (인프런 링크)

     

    CloudNet@와 함께하는 AWS 네트워킹 입문 - 인프런 | 강의

    AWS 클라우드 입문자를 대상으로, AWS 클라우드 네트워크 기초 지식을 따라하며 배우는 실습 기반의 입문 강의입니다., - 강의 소개 | 인프런

    www.inflearn.com

    * CloudNet@ 측에서 강의영상 및 자료 저작권이 있어, 최대한 내용이해를 도울 수 있는 사진으로 대체해보려고 합니다 😁😁


    * 기본 인프라 구성(CloudFormation)

     

    다수 인스턴스를 배치하고, 여기서 Amazon ELB의 ALB와 NLB를 생성 및 검증하는 실습이다.

    이전과 같이 CloudFormation 스택을 생성했다. 방법과 스펙은 아래를 참고해주면 된다! (CloudFormation 생성참고)

     

    [AWS] 강의실습 - (7) 보안 그룹, 네트워크 ACL + Flow Logs

    AWS 강의 커리큘럼을 통해, 기본적인 사용법 학습과 경험을 취득하고자 수강을 시작했다! 애초에 코딩하면서 수기노트를 한 적도 까마득하며, 글씨 쓰는것도 귀찮아하는 나이기에 포스팅으로나

    abangpa1ace.tistory.com


    ☁️ ALB (Application Load Balancer) 생성 및 검증

    1. 대상 그룹 생성

    먼저, 대상 그룹 및 로드 밸런서 생성을 위해 EC2의 로드 밸런싱 탭으로 이동한다.

     

    기본 설정은 인스턴스로 한다. 이외 대상 그룹명, VPC, 상태검사(HTTP) 등을 설정해주면 된다.

     

    생성하고자 하는 인스턴스 서버들을 선택하고, 아래에 보류 중인 것으로 포함 버튼을 클릭하여 대상 그룹을 추가해주면 된다.

     

     

    2. 로드 밸런서 생성

    다음은 로드 밸런서 생성 단계이다. 로드 밸런서 메뉴로 진입해서 생성을 클릭하면 위와 같은 화면이 표시된다.

    우리는 우선 가장 좌측의 ALB를 생성할 것이다.

     

    먼저 ALB 이름을 지정하고, 체계의 인터넷 경계를 유지해줘야 외부 라우팅에서 활용이 가능하다.

     

    다음으로 VPC, 가용영역 등을 설정한다. 각 가용 영역 당 로드 밸런서가 위치하게 된다.

     

    마지막으로 보안그룹과 리스너를 설정한다. (보안그룹은 최초 디폴트가 존재)

    리스너에 대상 그룹을 추가하는데, 이는 80번 포트 트래픽에 대해 해당 대상 그룹으로 부하 분산을 진행한다는 의미다.

     

    ALB가 생성완료된 것을 하단할 수 있다. 하단의 도메인 주소(DNS name) 접근을 통해 부하 분산을 확인할 수 있다.

     

     

    3. 부하 분산 검증

    # 변수 지정(자주 사용할 IP/도메인 주소를 변수에 저장)
    ALB=ALB_DNS_ADDRESS
    
    # 도메인 주소 해석
    dig +short $ALB
    
    # HTTP 1회 접근
    curl $ALB
    
    # HTTP 60회 접근
    for i in {1..60}; do curl $ALB --silent; done | sort | uniq -c | sort -nr

    다음으로, ALB의 부하 분산을 확인할 것이다. 먼저, ALB 도메인을 변수에 저장하고 SSH 접근을 한다.

     

     dig +short [ALB도메인]  명령어를 통해 ALB 도메인에서 트래픽을 전달하는 IP를 확인할 수 있다.

    2개 IP가 번갈아가며 상단에 배치되는데, 해당 IP로 트래픽이 전송되는 것이다.

     

     curl [ALB도메인]  명령어로 실제 EC2 인스턴스에 부하 분산이 되는 것을 확인할 수 있다. 서버 1~3으로 분배되고 있는 것이다.

    for문을 통해 60회 접근을 테스트해봤다.

    서버 1~3에 균일하게 트래픽이 분산되었는데, 이는 ALB에서 기본적으로 교차 영역 로드 밸런싱을 활성화되어 있기 때문이다.

     

     

    4. 고급 라우팅

    1) 고급 라우팅 1 - 경로 기반 라우팅

    우선, 고급 라우팅 중 경로 기반 라우팅을 실습한다.

    /mgt 는 서버 2~3만 존재하는 경로인데, 경로 기반 라우팅 설정 전에는 접근과 실패(Not Found) 를 반복하고 있음을 볼 수 있다.

    이는, ALB 리스너가 대상그룹인 서버 1~3 모두에 트래픽을 전달하므로, 서버1로 접근하는 경우엔 실패가 발생하는 것이다.

     

    우선 /mgt 경로에 대한 대상 그룹을 추가해준다. 이름, VPC 등을 설정하고, 인스턴스는 서버 2, 3 만 선택해준다.

     

    다음으로, 로드 밸런서 메뉴에서 해당 로드 밸런서의 리스너 탭에서 리스너를 선택하고 규칙 관리로 추가하면 된다.

     

    규칙 이름, 종류(path), 대상 그룹, 우선순위 등을 설정하는 단계들이 있다. 이를 순차적으로 수행하고, 추가해주면 된다.

     

    이제 경로 기반 라우팅이 설정되어, MGT-TG 대상그룹(서버 2,3) 으로만 트래픽이 분산되고 있음을 확인할 수 있다!

     

     

    2) 고급 라우팅 2 - HTTP 헤더 기반 라우팅

    사진과 같이, 현재는 모바일에서도 ALB의 IP 혹은 도메인으로 접근이 가능하다.

    이 때, 모바일인 경우 접근을 막는 고급 라우팅을 추가하는 실습이다. 이를 위해, User-Agent 정보의 iPhone 값을 활용할 것이다.

     

    마찬가지로, 로드 밸런서 리스너 탭에서 규칙을 추가해주면 된다.

    조건으로, HTTP HeaderUser-Agent 값에 iPhone, Android 값이 있는지를 확인한다.

    이에 대한 액션으로, 대상 그룹으로 보내는게 아닌 응답반환을 선택하고 에러(503) 및 메세지 텍스트를 하달해주는 것으로 설정한다.

     

    웹 - 정상 접근
    모바일 - 에러(503) 반환

    위처럼, 웹은 정상접근, 모바일은 에러반환을 하는 것을 확인할 수 있다.

     

    ALBHTTP 기반의 OSI 7계층 로드 밸런서 이므로, IP 외에도 HTTP 정보 등 다양한 조건으로 고급 라우팅을 설정할 수 있다.


    ☁️ NLB (Network Load Balancer) 생성 및 검증

    1. 대상 그룹 생성

    ALB와 마찬가지로, 대상 그룹을 추가하기 위해 EC2 의 대상 그룹 메뉴로 이동했다.

    SNMP 트래픽 처리를 위해 프로토콜을 UDP(161번 포트), VPC, 상태검사(HTTP) 를 설정했다. 이 그룹에 EC2 서버 1~3을 추가한다.

     

     

    2. 로드 밸런서 생성

    다음으로 로드 밸런서 메뉴로 들어와서, NLB를 생성해준다.

     

    이름, VPC, 리스너 등 NLB 설정을 진행한다.

    각 밸런서는 AWS에서 제공하는 IP(변동값, 기본), 탄력적 IP(고정값, 유료) 2가지를 적용할 수 있다.

    리스너는 SNMP 트래픽 처리를 위해 UDP(161번 포트) 로 설정하고, 대상 그룹을 지정해준다.

     

    일정 시간이 지나면 NLB가 Active 되면서 생성이 완료된다! 부하 분산 검증을 위해 도메인 주소를 활용할 것이다.

     

     

    3. 부하 분산 검증

    # 변수 지정(자주 사용할 IP/도메인 주소를 변수에 저장)
    NLB=NLB_DNS_ADDRESS
    NLB1=NLB_IP_ADDRESS_1
    NLB2=NLB_IP_ADDRESS_2
    
    # 도메인 주소 해석
    dig +short $NLB
    
    # SNMP 60회 접근
    for i in {1..60}; do snmpget -v2c -c public $NLB 1.3.6.1.2.1.1.5.0; done | sort | uniq -c | sort -nr
    for i in {1..60}; do snmpget -v2c -c public $NLB1 1.3.6.1.2.1.1.5.0; done | sort | uniq -c | sort -nr
    for i in {1..60}; do snmpget -v2c -c public $NLB2 1.3.6.1.2.1.1.5.0; done | sort | uniq -c | sort -nr

    마찬가지로 SNMP 트래픽 검증을 위한 명령어이다.

     

    먼저, NLB 도메인 주소를 NLB 변수에 저장한다.

    다음으로,  dig +short [NLB도메인]  명령어로 확인된 IP주소들을 각각 NLB1, NLB2 변수에 저장한다.

     

    다음은, NLB 부하 분산 검증이다. for문을 통해 NLB 도메인 주소로 SNMP 트래픽을 60회 발송했다.

    서버1에는 30회, 서버2,3은 그 절반에 가까운 12,18회 각각 전달한 것을 확인할 수 있다.

    이는, NLB는 기본적으로 교차 영역 로드 밸런싱이 활성화되지 않아, 가용 영역 기반으로 트래픽을 분산하는 것이다.

    혹은 NLB2 IP주소에만 트래픽을 발송해도, 유사하게 대략 절반씩 트래픽을 분산하고 있는 것을 확인할 수 있다.

     

     

    4. NLB 교차 영역 로드 밸런싱 활성화

    NLB의 교차 영역 로드 밸런싱을 활성화 해보겠다. 로드 밸런서 메뉴의 속성 탭으로 이동하면, 현재 비활성화(Off) 되있음을 볼 수 있다.

     

    속성 편집으로 진입해서, 사진과 같이 교차 영역 로드 밸런싱 옵션을 켜준다. (약, 2-3분 경과 후 반영됨)

     

    이제, 가용 영역에 의존하지 않고 교차 영역 로드 밸런싱이 적용된 것을 볼 수 있다.

     

     

    * NLB의 출발지 IP주소 보존

    ALB는 로드 밸런서에서 트래픽을 분산하면, 출발지를 밸런서의 프라이빗 IP로 변환한다.

    그래서, 출발지의 IP주소를 확인하려면 HTTP 헤더의 X-Forwarded-for 컬럼값을 참조해야 한다.

     

    반면, NLB는 로드 밸런서가 출발지의 IP를 그대로 전달한다. (단, 목적지가 EC2가 아닌 IP면 밸런서의 프라이빗 IP로 변환)


    반응형
Designed by Tistory.