본문 바로가기

AWS 교육/Docker-AWS (월)

241223_AWS Network, VPC(게이트웨이, 서브넷, 라우팅 테이블)

728x90

◆ AWS Network

먼저 AWS( https://jinlabs.signin.aws.amazon.com/console )로 접속하여 EC2 로 들어간다

 - AWS는 VPC와 VPC Gateway를 통해 On-Premise의 VPN장비와 AWS간의 VPN을 연결할 수 있으며, 이를 통해 보안성이 높은 하이브리드 클라우드 환경을 구현할 수 있다

AWS Network.pdf
1.80MB

 

 ◇ VPC (Virtual Private Cloud)

  - AWS 클라우드에서 논리적으로 격리된 네트워크 공간을 할당하여 가상 네트워크에서 AWS리소스를 이용할 수 있는 서비스를 제공한다.

 

  - 외부에서 접속할 때 라우터의 게이트웨이를 통해 클라이언트가 WAS서버에 접속하는 데 접속하기 위한 곳을 AP라고함

  ㄴ내부에서는 따로 접속이 필요하기에 로드밸런스로 연결함

  ㄴ왼쪽의 네트워크는 박완호강사님  //  오른쪽을 성진현강사님께서 하는 것

  ㄴVPN연결은 장비가 필요하여 불가

 

  - Private Cloud의 대표적 요소 : Open Stack 등 (클라우드 전체 다 만들 수 있음)

  - Public Cloud는 따로 전체를 만들지는 않으나 클라우드 구축 및 관리 위주

 

  - IPv4 CIDR 블록  :  VPC에서 사용하는 프라이빗 네트워크용 IP주소

     24비트 블록 : 10.0.0.0 ~ 10.255.255.255
     20비트 블록 : 172.16.0.0 ~ 172.16.255.255
     16비트 블록 : 192.168.0.0 ~ 192.168.255.255

    ㄴ여기서 비트는 이전까지 쓰던 네트워크의 서브넷 비트가 아닌 IP의 사용가능 비트이다

 

  이제 AWS에 접속하여 VPC를 확인하여 보면

  ㄴ등 으로 제작 시 한번에 만들어 주는 기능도 있다

  우리는 하나씩 만들면서 배워가야 하기에 이번에 사용해보지는 않는다

  ㄴ여기서 2번 옥텟을 유저번호로 하고, 3번 옥텟으로 서브넷팅한다

  이렇게 완료한 후 생성

 

  생성이 완료되면 자동으로 vpc ID와 각각의 기본옵션들이 세팅되며 기본vpc가 아니요라는 것은 세부설정을 직접해야 하기에 설정한 것

  

  이렇게 만들었을 때 3번째 옥텟으로 서브넷을 쪼개는 데 그 이유로 두가지가 있다

  ㄴ역할분리 : 외부에 공개하는 리소스 여부를 구별

  ㄴ기기분리 : AWS 안에서의 물리적인 이중화 (다중화)를 수행

  우리는 서브넷을 16개를 만들 수 있으나 이 중 4개만 사용

  public1a : 10.9.0.0/20  //  public2c : 10.9.16.0/20  //  private1a : 10.9.64.0/20  //  private2c : 10.9.80.0/20

  ㄴ윗내용과 거의 동일하며, 이름 끝부분과 서브넷 3옥텟부분을 주의하며 제작한다

 

  - 만들어진 IP가 두종류가 존재하는 데 외부에서 접속이 가능한 것은 Public IP이며, 접속불가능 한 것이 Private IP 이다.

 

  이후 인터넷 게이트웨이를 생성한 후 만들어 둔 vpc에 연결한다

  그후 NAT 게이트웨이를 따로 제작하는 데

  ㄴ주의사항 : IP 할당되어 연결되지 않으면 금액 발생

  ㄴ생성 이후 할당된 IP ID 삭제 가능

 

  라우팅 테이블을 3개 만들어준다 (-는 vpc생성되면 자동생성되는 기본값)

  이제 만든 Public 라우팅 테이블을 특정대상 제외 전부 게이트웨이에 붙여준다

  그 후 Private 라우팅 테이블에는 특정대상 제외 전부 NAT로 연결하여 준다

  이렇게 완료한 후 이번에는 서브넷 연결을 할 건데 Public에는 Public서브넷 2종, Private는 각각의 Private를 연결하면

  연결된 구성상태를 바로 확인할 수 있다

 

  이제 보안설정을 해볼텐데 먼저 보안그룹으로 가서 SSH와 Web을 허용하는 보안그룹을 생성하여 준다

 

  이렇게 완료한 후 EC2로 가서 새 인스턴스를 시작하여 준다

  먼저 Public 인스턴스로 베스션 인스턴스를 만들어 주고

   ㄴ퍼블릭 IP 할당이 되지 않으면 외부접속이 불가능하다

  그후 Private 인스턴스로 젠킨스 인스턴스를 만들어 준다

 

  이제 모바텀에서 접속을 하여본다 (SSH 키 연결)

 

  ★ Bastion Host :

 

  접속이 정상적인 것을 확인 후 VirtualBox에서 Docker를 시작한 후 모바텀으로 접속하고 ubuntu계정의 홈디렉토리에 .ssh 디렉토리가 있는 지 확인하며, 없으면 700으로 제작한다

 

                                Public                 Private

                 SSH 접속

  Windows ━━━> Bastion ━━━> Jenkins

   (개인키)               (공개키)

                               (개인키)              (공개키)

      ↓

  Windows ━━━> Bastion ━━━> Jenkins

   (개인키)               (공개키)              (공개키)

 

  이전에 AWS에서 받은 키 파일을 Docker 서버로 전송한다

  해당 키 파일의 권한을 400으로 한 후 Bastion IP로 SSH 접속을 시도한다

   ㄴ권한을 수정하는 이유는 AWS가 key 권한에 다른 사용자나 그룹이 사용할 수 있으면 보안요소로 접속차단되기 때문

  그러나 매번 이 긴 명령어를 쓰기 어렵기 때문에 먼저 config 파일을 만들어서 내용을 입력하여 준 후 600으로 권한 수정

  이렇게 완료하면 짧은 명령어로 바로 접속이 가능하다

  이러면 Bastion 까지 정상적으로 접속이 되는 것이 확인되었고 이제 Jenkins를 접속하기 위해

  먼저 config 파일을 수정하여 주는 데 해당 내용을 추가하여 준다

  ㄴ jenkins는 Public IP가 없기에 Private IP를 가져와주고 

   ㄴProxyJump라는 것은 jenkins로 가기위해서는 먼저 bastion에 접속한 후 bastion에서 넘어간다는 것

  ㄴWindows 에서는 점프가 아닌 ProxyCommand 로 사용된다

  이후 동일하게 $ ssh jenkins 를 하면 정상적으로 접속되는 것을 볼 수 있다

 

  이제 삭제를 할건데 먼저 인스턴스를 삭제한 후 NAT 게이트웨이를 지우고 탄력적 IP를 지울땐 연결 ID가 없는 것을 확인하고 삭제를 하고 인터넷 게이트웨이를 vpc를 분리한 후 삭제를 한다

  마지막으로 vpc를 삭제를 하면 서브넷과 보안그룹도 자동 삭제된다

 

 

  Jenkins에 이미지를 넣기 위해서   도커 등을 설치 하기 위해서 Docker 서버에 설정파일인 Dockerfile, docker-compose.yml과 jenkins_home 디렉토리를 제작하여 준다

728x90