AWS - 퍼블릭 클라우드

CHEESE·2023년 2월 20일
post-thumbnail

AWS 상에서 네트워크를 구성
컨테이너를 학습하고 3 tier로 운영 환경 구성
개발 환경 구성 및 지속적 통합 경험

💡 클라우드

인터넷을 은유적으로 표현하는 말
어떤 형태로든 어디에든 있기 때문에
인터넷을 통해 원격으로 접근할 수 있는 모든 것
서버, 데이터베이스, 네트워크등 컴퓨팅 리소스를 인터넷을 통해 관리하는 것

  • 왜 사용하는지
  • 사용하면 뭐가 달라지는지

public cloud에 대해서 알아본다.

왜 쓰나?

관심사의 분리

  • 파일, 데이터베이스 등 저장소에 있는 데이터를
  • 서버에서 원하는 형태로 가공해
  • 네트워크를 통해 사용자에게 전달

=> 사용자는 관심 없음

1) 개인 PC에서 서비스하는 경우

  • 데이터 백업/보안 이슈
  • 장비를 끌 수 없다
  • 다른 프로그램을 사용해도 문제 없나?
  • 장비가 망가지면?
  • 외부에서 어떻게 접근하지?
  • 한 번에 몇 명이 접속할 수 있나?

2) 사무실 서버로 서비스하는 경우

  • 사무실에 정전이 나면?
  • 관리인이 필요하다
  • 서버실에 에어컨을 둬야 한다
  • 사무실 서버가 공격받으면?
  • 다른 팀과 데이터를 어떻게 공유하지?
  • 유휴장비는 어디에?

3) 데이터센터(IDC)를 활용하는 경우

  • 이중화 구성은?
  • 데이터센터도 이중화해야 하나?
  • 장기 백업은?
  • 상주 인력을 두어야 하나?
  • 배포 구성은?
  • DDoS 대응 장비는?
  • 보안 구성은 누가하고 보안 관제를 따로 두어야 하나?

서비스 제공자가 집중해야 할 일은 서비스의 Core Value
기존의 고민들은 cloud 제공 업체가 한다.
여러가지 면에서 클라우드를 사용하는 것이 합리적이다.

💡 통신망

노드들과 이 노드들을 연결하는 링크들로 구성된 하나의 시스템

망 구성

노드 : IP로 식별할 수 있는 대상
링크 : 물리적 회선
하나의 서브넷을 하나의 망이라고 칭할 수 있다.

AWS에서의 망

region : 국가/지역
availability zone : 데이터 센터(ap-northeast-2a, ...)
VPC : 하나의 region에 종속, 다수의 AZ 설정 가능, VPC IP 대역 내에서 망 구성

L2 Switch

  • ec2를 생성하면 가상의 스위치와 연결된다고 보면 된다.
  • multiple access를 위한 장비
  • 서버에는 네트워크 인터페이스 카드가 있다.

통신 방식

  • mac 테이블에 정보가 있을 때 : Forwarding
  • mac 테이블에 정보가 없을 때 : Flooding (응답하는 장비가 있으면 그 포트에 장비가 있다고 인지하고 mac 테이블에 등록)

Router

  • 서로 다른 네트워크 간 통신을 중계

통신 방식

  • 라우팅 테이블에 정보가 있을 때 : Forwarding
  • 라우팅 테이블에 정보가 없을 때 : Drop
    라우팅 프로토콜을 활용하여, 어떤 대역으로 패킷을 보내는 것이 최적 경로인지 학습

인터넷 통신

  • 외부 네트워크와 통신하기 위해서는 public IP가 있어야 함
  • 라우터는 private IP가 목적지일 경우 인터넷 구간으로 보내지 않음

정리

  • 자신이 속한 subnet의 서버는 가상 스위치를 통해 직접 통신
  • 자신이 속하지 않은 subnet의 서버는 가상 라우터를 통해 직접 통신
  • 그 외의 전체 대역은 Internet Gateway로 통신을 보내도록 학습

💡 서브네팅


https://www.ipaddressguide.com/cidr

💡 접근 제어

  • 많은 부분 보안성을 보장해준다
  • SYN Flooding, LAND, Smulf Attack, SQL Injection, ...
  • AWS를 사용한다면 크게 신경쓰지 않아도 된다.
  • 서버 보안 패치는 AWS에 일임하고 우리는 네트워크 보안과 계정 보안(IAM)에 집중하면 된다.
  • AWS에서는 Security Group을 통해 IP, Port에 대한 접근 제어가 가능하다.

💡 컨테이너

xxx의 라이프 사이클을 관리
생성 -> 운영 -> 제거까지 생애주기를 관리
외부와 명확하게 격리되어있음

프로세스

실행중인 프로그램
프로그램의 명령과 실행시 필요한 정보 조합의 오브젝트
OS에 의해 실행되는 프로그램의 단위
저장장치에 있는 프로그램을 실행하면 실행 명령과 실행하는 데 필요한 정보를 메모리에 적재한다.

  • 컨테이너는 프로세스를 추상화한다.

컨테이너와 VM의 차이

왜 쓰나?

컨테이너 단위로 사고하고 각 프로세스의 라이프 사이클을 관리할 수 있어서 컨테이너를 사용한다.

컨테이너 네트워크

컨테이너의 본질은 격리인데 어떻게 통신하나?

독자적인 네트워크 인터페이스가 생성됨
컨테이너 내 라우팅 테이블은 모르는 대역에 대해 docker0이라는 브릿지(스위치를 소프트웨어적으로 구현)를 통해 요청을 보냄

  1. 컨테이너 생성하면 veth가 생성되고 컨테이너 내의 eth0과 연결
  2. 컨테이너 내의 veth들은 docker0을 통해 컨테이너들 간 통신 가능
  3. 컨테이너는 gateway인 docker0을 거쳐 외부와 통신

포트포워딩

docker run -d -p 80:80 nginx
Host OS 포트 번호 : 컨테이너 내의 포트 번호

컨테이너를 제거하면?

컨테이너 이미지는 읽기전용
컨테이너를 제거하면 메모리에서 사라짐
== 영속적인 데이터를 다룰 수 없음

0개의 댓글