7주차-2 ALB를 통한 로드 밸런싱 실습

아이수베어·2022년 1월 21일
1

AFOS[2기]

목록 보기
16/29
post-thumbnail

링크 접속

https://console.aws.amazon.com/cloudformation/home?region=ap-northeast-2#/stacks/new?stackName=ELBLab&templateURL=https:%2F%2Fcloudneta-book.s3.ap-northeast-2.amazonaws.com%2Fchapter5%2F5_lab1-AFOS.yaml

다음 클릭 -> key설정다음 클릭 -> 다음 클릭 -> 스택 생성 클릭
스크린샷 2021-07-21 오후 10 20 06
스크린샷 2021-07-21 오후 10 20 29
스크린샷 2021-07-21 오후 10 20 35
스크린샷 2021-07-21 오후 10 20 42

기본 환경 검증

ELB-EC2-1

sudo su -
tree /var/www/html
/var/www/html
cat /var/www/html/xff.php

ELB-EC2-2

sudo su -
tree /var/www/html
/var/www/html
cat /var/www/html/xff.php
스크린샷 2021-07-21 오후 10 32 44 스크린샷 2021-07-21 오후 10 33 18 스크린샷 2021-07-21 오후 10 33 51 스크린샷 2021-07-21 오후 10 34 18

My-EC2 에서 확인

EC21= 아이피 주소
EC22= 아이피 주소
echo $EC21
echo $EC22

# ELB-EC2-1 서비스 확인
curl $EC21
curl $EC21/xff.php;echo
curl $EC21/dev/
snmpget -v2c -c public $EC21 1.3.6.1.2.1.1.5.0
snmpget -v2c -c public $EC21 1.3.6.1.2.1.1.3.0

# ELB-EC2-2 서비스 확인
curl $EC22
curl $EC22/xff.php;echo
curl $EC22/mgt/
snmpget -v2c -c public $EC22 1.3.6.1.2.1.1.5.0
스크린샷 2021-07-21 오후 10 36 49 스크린샷 2021-07-21 오후 10 42 19 스크린샷 2021-07-21 오후 10 42 28 스크린샷 2021-07-21 오후 10 43 38 스크린샷 2021-07-21 오후 10 43 46

ALB 생성

Load Banlancer 생성 클릭 -> ALB 찾아서 생성 클릭
스크린샷 2021-07-21 오후 10 45 30
스크린샷 2021-07-21 오후 10 45 36

1. 기본 구성
    - 이름(ALB-TEST), 인터넷 경계
    - 리스너 : 프로토콜(HTTP), 포트(80)
    - 가용 영역 : ELB-VPC, 2a 와 2c 선택
2. 보안 설정 구성 : skip
3. 보안 그룹 구성 : 기존보안그룹 (###-ELBSG-### , TCP 80, 22 허용) 선택
4. 라우팅 구성
    - 대상 그룹(새 대상 그룹), 이름(ALB-TG), 대상 유형(인스턴스), 프로토콜(HTTP), 포트(80)
    - 상태 검사 → 고급 상태 검사 설정 : 정상 임계 값(3), 간격(10), 나머지는 기본값
5. 대상 등록 : 하단 인스턴스 선택 → 등록된 항목에 추가
6. 검토 → 생성
스크린샷 2021-07-21 오후 10 46 31 스크린샷 2021-07-21 오후 10 47 02 스크린샷 2021-07-21 오후 10 47 12 스크린샷 2021-07-21 오후 10 47 30 스크린샷 2021-07-21 오후 10 47 40 스크린샷 2021-07-21 오후 10 48 11 스크린샷 2021-07-21 오후 10 48 34 스크린샷 2021-07-21 오후 10 48 51 스크린샷 2021-07-21 오후 10 49 02 스크린샷 2021-07-21 오후 10 49 06 스크린샷 2021-07-21 오후 10 49 11

EC2 -> 네트워크 및 보안 -> 네트워크 인터페이스에서 IP주소랑, 인스턴스 소유자 확인
스크린샷 2021-07-21 오후 10 50 26
스크린샷 2021-07-21 오후 10 51 16

ALB 검증

ALB=ALB DNS 주소
echo $ALB

# curl 접속 테스트 - ALB 는 기본 라운드 로빈 방식으로 대상 분산
dig $ALB +short
while true; do dig $ALB +short && echo "------------------------------" && date; sleep 5; done

curl $ALB
curl $ALB
for i in {1..20}; do curl $ALB --silent ; done | sort | uniq -c | sort -nr
for i in {1..100}; do curl $ALB --silent ; done | sort | uniq -c | sort -nr
curl $ALB/xff.php ;echo
curl $ALB/xff.php ;echo

# /dev/index.html 접근
curl $ALB/dev/index.html --silent
curl $ALB/dev/index.html --silent

# /mgt/index.html 접근
curl $ALB/mgt/index.html --silent
curl $ALB/mgt/index.html --silent
스크린샷 2021-07-21 오후 10 52 54 스크린샷 2021-07-21 오후 10 53 16 스크린샷 2021-07-21 오후 10 53 35 스크린샷 2021-07-21 오후 10 54 00 스크린샷 2021-07-21 오후 10 54 16 스크린샷 2021-07-21 오후 10 54 33 스크린샷 2021-07-21 오후 10 54 52 스크린샷 2021-07-21 오후 10 57 03 스크린샷 2021-07-21 오후 10 57 09 스크린샷 2021-07-21 오후 10 57 33 스크린샷 2021-07-21 오후 10 57 43 스크린샷 2021-07-21 오후 10 58 23 스크린샷 2021-07-21 오후 10 58 31
tail -f /var/log/httpd/access_log
tail -f /var/log/httpd/access_log |grep -v "ELB-HealthChecker/2.0"
tcpdump tcp port 80 -nn
스크린샷 2021-07-21 오후 11 12 50 스크린샷 2021-07-21 오후 11 13 07 스크린샷 2021-07-21 오후 11 13 54
# Apache 기본 로그 설정 정보 확인
grep -n LogFormat /etc/httpd/conf/httpd.conf

# Apache 기본 로그 설정 변경 : 196번째 줄에 %{X-Forwarded-For}i 추가
nano /etc/httpd/conf/httpd.conf
# CTRL+X Y Enter 로 저장하고 빠져나오기

# HTTP 다시 로드 
systemctl reload httpd

# 실시간 로그 출력 후 외부에서 접속 시도
tail -f /var/log/httpd/access_log |grep -v "ELB-HealthChecker/2.0"
스크린샷 2021-07-21 오후 11 14 45 스크린샷 2021-07-21 오후 11 15 42 스크린샷 2021-07-21 오후 11 17 01

경로(Path) 기반 라우팅 설정

- 대상 그룹 생성 : Dev-Group(ELB-EC2-1) , Mgt-Group(ELB-EC2-2)
- 리스너 규칙 편집 : 경로 /dev/* → 전달 대상(Dev-Group) , 경로 /mgt/* → 전달 대상(Mgt-Group)

Create target group 클릭
스크린샷 2021-07-21 오후 11 21 50

Target group name 'Dev-Group' 입력
스크린샷 2021-07-21 오후 11 22 19

VPC ELB-VPC로 변경
스크린샷 2021-07-21 오후 11 22 38

Next 클릭
스크린샷 2021-07-21 오후 11 22 43

ALB-EC2-1 클릭 -> Include as pending below 클릭
스크린샷 2021-07-21 오후 11 23 22

추가 됐으면 Create target group 클릭

스크린샷 2021-07-21 오후 11 23 34

Mgt-Group도 똑같이 만들기
스크린샷 2021-07-21 오후 11 24 19

EC2 -> 로드밸런서 -> ALB-TEST 선택 후 리스너 클릭 -> 규칙 보기/편집 클릭
상단에 + 버튼 클릭
스크린샷 2021-07-21 오후 11 25 11
스크린샷 2021-07-21 오후 11 25 24
스크린샷 2021-07-21 오후 11 25 41

규칙 삽입 클릭

스크린샷 2021-07-21 오후 11 25 51
조건 -> 경로 -> 값 /dev/*
전달 대상 -> 대상 그룹: Dev-Group

저장 클릭

스크린샷 2021-07-21 오후 11 26 33

Mgt-group에도 똑같이 리스너 규칙을 추가해줍니다.
스크린샷 2021-07-21 오후 11 27 11

규칙 설정 전
스크린샷 2021-07-21 오후 11 29 28
스크린샷 2021-07-21 오후 11 30 34

규칙 설정 후
스크린샷 2021-07-21 오후 11 31 54

HTTP 헤더 기반 라우팅 설정 - 고정 응답 반환

목적: HTTP header 에 이름이 user 이고 값이 이름인 쿠키(Cookie)가 매칭되면 고정된 응답을 반환

EC2 -> 로드밸런서 -> ALB-TEST 선택 후 리스너 클릭 -> 규칙 보기/편집 클릭
상단에 + 버튼 클릭 -> 규칙 삽입 클릭
스크린샷 2021-07-21 오후 11 33 21
스크린샷 2021-07-21 오후 11 33 27

리스너 규칙 편집 : HTTP 헤더 - Cookie 는 user=닉네임 → 고정 응답 반환 200 "Hello 닉네임"
스크린샷 2021-07-21 오후 11 34 18
curl --cookie "user=닉네임" $ALB ;echo
스크린샷 2021-07-21 오후 11 35 01

소스 IP 기반 라우팅 설정 - 고정 응답 반환

목적: 소스IP 주소가 매칭되면 고정된 응답을 반환

규칙 삽입 클릭
스크린샷 2021-07-21 오후 11 35 14

리스너 규칙 편집 : 소스IP -확장='My-EC2 공인 IP입력' → 고정 응답 반환 200 "Hello EC2 Instance. Your IP address #"
스크린샷 2021-07-21 오후 11 36 34
# 인터넷 사용 시 자신의 IP 주소(공인IP)를 확인하는 법
 curl -4 icanhazip.com

# 규칙 확인
curl $ALB
스크린샷 2021-07-21 오후 11 37 11

Query String 기반 라우팅 설정 - 고정 응답 반환

목적: 쿼리 문자열 값이 매칭되면 고정된 응답을 반환

리스너 규칙 편집 : 쿼리 문자열='ABTest' → 고정 응답 반환 200 "A/B Test, option A selected"
스크린샷 2021-07-21 오후 11 38 45
curl $ALB
curl $ALB?ABTest=A
스크린샷 2021-07-21 오후 11 39 27

HTTP Request method 기반 라우팅 설정 - 고정 응답 반환

목적: HTTP 특정 메소드가 매칭되면 고정된 응답을 반환

리스너 규칙 편집 : HTTP 요청 메서드='READ' → 고정 응답 반환 200 "Custom READ method invoked"
스크린샷 2021-07-21 오후 11 40 16
[root@ip-172-31-7-124 ~]$ curl --request READ $ALB
Custom READ method invoked
스크린샷 2021-07-21 오후 11 40 54

ALB 고급 라우팅: 아이폰 사용자 차단

리스너 규칙:
HTTP 헤더 → **User-Agent** 는 *iPhone*
고정 응답 반환 : 503 iPhone Access Deny
스크린샷 2021-07-21 오후 11 42 36

리스너 규칙 설정 전
1

리스너 규칙 설정 후
2

가용성 테스트

ELB-EC2-1 인스턴스 중지
스크린샷 2021-07-21 오후 11 58 31

ELB-1 으로 접속은 안 되네요
스크린샷 2021-07-21 오후 11 59 28

EC2 -> 대상 그룹 -> 모니터링 클릭
스크린샷 2021-07-22 오전 12 00 38

비정상 호스트 확인 -> 음 ... 잘못한 건가
스크린샷 2021-07-22 오전 12 01 08


참고 자료 : AFOS[2기] 노션 내용

profile
Junior Cloud Engineer

0개의 댓글