본문 바로가기

KOSA 클라우드 솔루션즈 아키텍트 양성과정

[5.26] 퍼블릭 클라우드 2일차

WEB01(AL2)

 

# EC2 인스턴스 만들고 사용자 정의 스크립트 수정이 어려워서 mobaXterm에서 수정

퍼블릭IP로 세션 생성

* 세션 생성 시 ec2-user라는 초기 사용자는 변경 불가능

 

 

접속 완료

* 호스트 이름을 IP로 설정하겠다고 EC2 인스턴스 생성할 때 체크했으므로 IP가 호스트 이름으로 표시됨

 

 

 

lsblk

* 블록 스토리지 확인 명령어

 

 

* free 명령어는 메모리 확인 명령어

 

 

hostnamectl

* 하이퍼바이저 타입1인 Xen서버를 이용


# WEB02

 

 

인스턴스 이름 WEB02로 설정

 

 

우분투 18.04버전 선택

* bionic이 나오면 18.04 버전이라는 의미

* 프리티어 사용 가능인지 잘 확인하기

 

 

t2.micro

* 윈도우의 경우 라이선스 비용 때문에 더 비싼 것

 

 

키 페어

* 기존에 생성했던 프라이빗 키 사용

 

 

네트워크 설정

* 2a 가용영역에 WEB01을 생성했기 때문에, 가용성을 높이기 위해 WEB02는 2c에 만드는 것

 

 

기존 보안 그룹괃 동일하게 선택

* WEB 서버가 동일한 용도이기 때문에 기존 보안 그룹으로 선택

 

 

스토리지 구성

* 콜드HDD는 느리다는 의미

* HDD는 데이터를 백업, 저장하는 경우에 사용

 

 

스토리지 볼륨

 

 

사용자 데이터

* 고급 세부 정보에서 사용자 데이터

* 우분투는 systemctl enable 명령어 필요 없음 


# ELB(Elastic Load Balancer) : ALB, NLB, GALB

ELB(Elastic Load Balancer)

# backend : aws에서는 target group(대상 그룹)

# frontend : aws에서는 listener

# High Availability(HA) : 고가용성(무중단 서비스)

 

 

로드 밸런서 생성 클릭

 

 

ELB의 종류

* ALB는 L7 스위치의 기능 : L7스위치는 포트로도 부하 분산 + 컨텐츠(URL, HTTP헤더) 이용해 부하 분산(컨텐츠의 헤더를 분석해서 분산)

* NLB는 L4 스위치의 기능 : L4는 IP, 포트만으로 부하 분산


# NLB(Network Load Balancer)

 

 

기본 구성

* 체계 : 접속해오는 방식을 의미

  - 인터넷 경계 : 외부의 불특정 사용자들이 인터넷을 통해 접속할 때

  - 내부 : 내부 네트워크에서 로드 밸런서를 이용해 접근할 때

 

 

네트워크 매핑

* 로드 밸런서가 웹 서버와 같은 VPC 내에 존재해야 함 -> 웹 서버를 2a와 2c 가용영역에 위치시켰기에 같은 곳을 체크 

* 172.31.0.0/16은 기본 VPC (어떤 리전이든 공통)

* 가용영역마다 subnet을 하나씩만 두었기 때문에 서브넷 드롭다운 메뉴 내려도 하나뿐

 

 

리스너 및 라우팅

* 대상 그룹 선택이 백엔드(타겟그룹)

* 프로토콜과 포트가 프론트엔드(리스너)(IP와 포트 번호가 있음) -> 사용자가 해당 IP와 포트번호를 통해 접근

* 대상그룹 안 만들었으니 대상 그룹 생성 클릭

 

 

타겟 그룹 설정

 

 

헬스체크

  - NLB가 타겟그룹에 접속 시도했는데 타겟그룹이 응답하지 않으면 비정상

  - 임계 값(3번)만큼 간격(30초)마다 신호를 보냄

  - 제한시간(10초) 내에 정상적인 응답이 없으면 실패 

  - 상태검사(health check)에서 fail이 되면  NLB가 응답하지 않는 서버로는 신호를 보내지 않음

    -> 서킷 브레이커(회로 차단) -> 불필요한 트래픽 낭비와 사용자의 불편을 최소화하기 위함

  - 서버가 fail이라도 NLB는 계속해서 신호를 보내서 헬스체크 진행

  - 임계 값(3번)만큼 연속으로 정상적인 응답이 오면 해당 서버가 정상이 되었다고 판단하고 타겟그룹의 멤버로서 포워      드 재개

  - 헬스체크 간격을 너무 촘촘히 하면 서버에 부담을 줄 수 있고, 너무 늘리면 느슨해져서 실습에서는 임계 값 수정X

  - 로드 밸런서의 특징에 따라 임계 값이나 제한시간이 달라질 수 있음

 

 

대상 등록

* ELB에서 트래픽을 라우팅할 인스턴스 선택

* 아래에 보류중인 것으로 포함 클릭

* 대상 그룹에 포함 클릭

 

 

다시 NLB 생성화면으로 돌아오기

* 새로 만든 대상 그룹을 추가

* 로드 밸런서 생성 버튼 클릭

 

 

대상그룹

* 상태확인에 initial은 아직 헬스체크가 되지 않은 상태 -> healthy로 바뀌어야 정상적이라는 의미

 

 

로드밸런서 유형 확인

* 로드밸런서의 DNS이름 주소창에 입력하고 들어가도 NLB는 라운드로빈 알고리즘이 아니기에 새로고침 할 때마다 페이지가 바뀌지는 않음 -> NLB는 lesat connection방식(최소 연결 방식)

  - 최소 연결 방식 : 한 쪽 서버에 세션이 많이 연결되어 있으면, 다른 쪽 서버로 트래픽 전송하는 방식

* ALB는 라운드로빈(순차적 접근 방식) 방식임


# ALB

 

기본 구성

* 네트워크 매핑에서는 가용영역 2a, 2c 체크

 

 

ALB 보안그룹

* NLB는 보안그룹이 없었음

  -> WEB01, WEB02 각각 퍼블릭IP를 가짐

  -> 각각의 IP로 브라우저에서 접속 가능

  -> ALB 장치를 거치지 않고 직접 접속할 수 있다는 것은 문제

  -> 코로나 백신 접종 예약에서 우회해서 바로 예약 사이트로 접속이 되었던  문제와 유사

  -> 그래서 WEB01,WEB02에 퍼블릭IP 주면 안 됨

  -> 무조건 ALB를 통해 들어오게 해야 하는 게 맞음

  -> ALB의 보안 그룹에서 ALB를 거치지 않고 들어가는 트래픽 차단 가능

* default 보안그룹은 빼주기

* 새 보안 그룹 생성 클릭

 

 

보안 그룹 생성

* 각각의 VPC 안에 보안그룹이 위치해야 하기 때문에, 보안 그룹 생성 시 VPC 선택하는 것

 

 

아웃바운드 규칙

* 아웃바운드는 보통 전부 허용

 

 

인바운드 규칙

* ALB를 위한 보안 그룹이기에 ICMP, SSH를 오픈해도 해당 기능들을 사용할 수 없음

* ALB는 서버, 인스턴스가 아니고 서비스일 뿐이기 때문에 SSH로 접속을 하거나 Ping을 칠 수 있는 대상X

* HTTP만 열어주면 됨

* ALB의 80번 포트가 오픈되어 있는데 보안 그룹이 ALB를 감싸고 있어서 80포트를 오픈하지 않으면 트래픽이 전달X

 

 

다시 ALB생성 화면으로 와서

* 새로고침 표시 누르고 SG-ALB만든 것 선택

* default  지우기

 

 

대상 그룹 생성

* 아까 만든 대상 그룹은 NLB와 연결해줘서 새로 만들어줘야 함

* 대상 그룹에는 한 개의 서비스만 연결

 

 

대상 그룹(target group)

 

 

프로토콜 버전

 

 

 

상태 검사

* 상태 검사 프로토콜이 NLB는 TCP였는데 ALB는 HTTP 사용

* 임계값도 NLB와 다름

* 상태 검사 경로의 / 의 의미 : /var/www/html/index.html(너무 기니까 /로 표현)

* 성공 코드 : 200을 성공 코드로 정하는데, 200-299입력하면 해당 범위는 정상적인 응답으로 보겠다는 의미

 

 

TG-ALB 연결

* 새로 생성한 대상 그룹 TG-ALB로 전달


# 보안 그룹

 

인바운드 규칙 편집

* 방화벽은 특정 네트워크나 IP를 차단X

* 방화벽은 특정 네트워크나 IP만 허용O

* 여기서는 HTTP의 해당 IP 외에는 접속 불가능

 

 

* SG-WEB에서 ALB를 거치지 않고 들어오는 것 차단 설정

* SG-WEB 보안그룹이 ALB의 트래픽만 받을 수 있도록 설정하면 됨

* SG-WEB에 들어갈 수 있는 src를 SG-ALB로 정해야 함

 

 

* SG-WEB에 들어갈 수 있는 src를 SG-ALB로 정함

* 우회해서 바로 웹 서버들로 접속 못하게 막음


* 경로 기반 라우팅

  - L7 스위칭 기능

  - 아래와 같이 URL(경로)기반으로 서버들을 라우팅해주는 것

    - abc.com/food -> WEB01

    - abc.com/sale -> WEB02

 


# WEB02 세션 생성해서 경로 기반 라우팅 준비

 

우분투 세션 생성

 

 

 

 

AL2에서 아카이브 추출

* xvf : x = extract, v = view, f : file명

* -C : 어디에 아카이브 풀고 싶은지

* /var/www/html/food/ 에 풀 것

 

 

Ubuntu에서 아카이브 추출

* 이제 경로 기반 라우팅을 위한 대상 그룹 생성해야 함

 

 

 

FOOD와 SALE 대상 그룹 생성

* aws 콘솔에서 TG-FOOD 대상 그룹 생성

* FOOD 홈페이지 담고 있는 것이 WEB01이므로 WEB01을 대상 그룹에 등록

* aws 콘솔에서 TG_SALE 대상 그룹 생성

* SALE 홈페이지 담고 있는 것이 WEB02이므로 WEB02를 대상 그룹에 등록

 

 

현재 TG-ALB가 default target group

* 로드 밸런서 -> 리스너 -> 규칙 보기/편집 -> 좌측 상단 + 아이콘 클릭

 

 

 

* IF /food* 경로로 들어 온다면 THEN 전달대상 TG-FOOD로 전달

 

 

* IF /sale* 경로로 들어 온다면 THEN 전달대상 TG-SALE로 전달

 

 

도메인네임/food

* food 사업부 홈페이지로 연결

 

 

 

도메인네임/sale/

* SALE 홈페이지로 연결

 

 

도메인 네임만 입력했을 때

* url을 주지 않고 도메인만 주게 되면 default target group가 출력


# TG-FIREFOX, TG-MOBILE 이라는 이름으로 대상 그룹 생성

 

 

규칙 추가

* 이전에 HAproxy 설정했던 메모장 참고

 

 

규칙 추가 완료