본문 바로가기
교육

[43일 차] 21.09.17 : AWS 3

by ballena 2021. 9. 22.

엔드포인트, 엔드포인트 서비스


1교시

 

 

VPC 엔드포인트

-> 사용 목적 : VPC 내부의 인스턴스와 다른 AWS 서비스가 외부 인터넷을 통해 통신하는 것은 번거롭다. 어차피 동일한 클라우드에 있으니 보안 통신을 생각하자.

 

1. 엔드포인트 : AWS 퍼블릭 서비스 대상에 대한 프라이빗 연결

1-1. 게이트웨이 엔드포인트 : AWS 퍼블릭 서비스 중 S3와 DynamoDB에 대한 연결

1-2. 인터페이스 엔드포인트 : 위 대상 외에 나머지 AWS 퍼블릭 서비스에 대한 연결

2. 엔드포인트 서비스 : 사용자가 지정한 특정 서비스 대상에 대한 프라이빗 연결

 

엔드포인트 타입을 결정할 때 연결할 서비스의 종류에 유의할 것.

1. 인스턴스를 S3나 DynamoDB에 연결하려면 인스턴스 측에 게이트웨이 엔드포인트 생성

2. 인스턴스를 S3/DynamoDB 외에 다른 퍼블릭 서비스에 연결하려면 인스턴스 측에 인터페이스 엔드포인트 생성

3. 인스턴스를 퍼블릭 서비스가 아닌 사용자 지정 서비스에 연결하려면 해당 서비스측에 엔드포인트 서비스 생성, 사용자 지정 서비스와 엔드포인트 서비스와 연결. 인스턴스 측에는 인터페이스 엔드포인트를 생성해 엔드포인트 서비스와 연결

 

 

실습 환경 구성

1. VPC 생성(10.0.0.0/16)

2. VPC 내부에 퍼블릭(10.0.0.0/24)/프라이빗(10.0.1.0/24) 서브넷 하나씩 생성

3. 인터넷 게이트웨이 생성 + VPC에 연결

4. 퍼블릭 서브넷에 사용할 라우팅 테이블 생성. 프라이빗은 따로 추가할 필요 없음.

-> VPC를 만들면 하나가 자동으로 생기지만, 설정을 위해 따로 생성

-> 생성한 테이블을 퍼블릭 서브넷에 연결

5. 퍼블릭 서브넷 인스턴스는 가상 라우터에 연결, 프라이빗 서브넷은 따로 연결 X

-> 퍼블릭 라우팅 테이블의 라우팅 편집 : 인터넷 게이트웨이에 연결

-> 편의성을 위해 프라이빗 라우팅 테이블 생성 : 라우팅 테이블 수정 필요 없다.

6. 인스턴스 생성

-> 퍼블릭 IP 자동 할당 시 서브넷에 의해 할당 받거나, EIP에 의해 할당받거나.

-> 기본 VPC와 서브넷에는 서브넷 사용 설정(활성화) 항목이 있어 IP가 들어오지만, 우리가 만든 VPC와 서브넷을 쓰면 서브넷 사용 설정(비활성화) 항목이 된다. 이러면 공인 IP 할당 안됨. 기본값에서 '활성화'로 바꾸자.

-> 프라이빗 인스턴스는 어제와 동일


2교시

 

 

퍼블릭 인스턴스->프라이빗 인스턴스의 핑 테스트가 작동하지 않는다. 왜지?

-> 애초에 테스트하는 요소 중 인스턴스 간 핑 테스트는 없었다.

 

각 인스턴스에서 S3 기본 주소인 s3.ap-northeast-2.amazonaws.com로의 핑 테스트 후 시간 보기

-> 지금 보이는 시간은 외부 인터넷을 통해 걸리는 시간

 

VPC > 좌측의 엔드포인트 클릭 > 엔드포인트 생성 > 서비스 이름 S3 검색, 유형 Gateway(이게 게이트웨이 엔드포인트) > 생성했던 VPC 선택 > 라우팅 테이블 선택. 퍼블릭/프라이빗 모두 연결할 예정이니 둘 다 선택 > 엔드포인트 생성

 

이제 S3로의 게이트웨이 엔드포인트 부착 완료. 

선택했던 라우팅 테이블로 가서 라우팅 정보를 보면 추가되어 있다.

아까처럼 핑 테스트를 해보면 시간이 확 줄었다.

traceroute로 보면 외부 라우팅을 거쳐가지 않음을 알 수 있다.

 

이번엔 인터페이스 엔드포인트를 만들어 보자.

CloudFormation 기본 주소

-> cloudformation.ap-northeast-2.amazonaws.com로 테스트

 

 

기본적으로 AWS 서비스는 리전별로 기본 DNS 호스트 주소를 가지고 있다. 여기에 VPC 인터페이스 엔드포인트를 생성하면, 엔드포인트 전용의 DNS 호스트 주소가 생성된다.

-> 원래 동일한 서비스일지라도 리전이 다르면 DNS 호스트 정보가 바뀐다.

 

AWS 서비스에 VPC 인터페이스 엔드포인트를 연결하면, 해당 서비스에 DNS 주소 2개 생성

1. 기본 DNS 호스트

2. 엔드포인트용 전용 DNS 호스트

-> 엔드포인트 설정값 중에 '프라이빗 DNS 활성화' 설정 여부에 따라 통신 흐름이 달라진다.

비활성화 : 1번은 인터넷 구간을 통한 퍼블릭 통신, 2번은 인터페이스 엔드포인트를 통한 프라이빗 통신

활성화 : 1, 2번 모두 인터페이스 엔드포인트를 통한 프라이빗 통신

 

인터페이스 엔드포인트 생성 전에 VPC 설정 필요

VPC > 작업 > DNS 호스트 이름 편집 > DNS 호스트 이름 활성화 체크 후 저장

이제 인터페이스 엔드포인트 생성

엔드포인트 생성 > cloudformation 검색, 유형 interface 하나밖에 없으니 이거 체크 > VPC 선택, 서브넷 선택 > 프라이빗 DNS 이름 활성화, 는 체크되어 있을 것 > 생성

-> 가용영역 하나 당 서브넷 하나만 체크할 수 있으므로 서브넷 생성 시 가용영역을 다르게 하는 것이 좋겠다.

-> 하나의 가용영역에 인터페이스 엔드포인트를 2개 만드는 것은 에러 발생.

-> 하나의 가용영역에 인터페이스 엔드포인트가 갈 인스턴스가 2개

같은 DNS 정보로 다른 곳을 찍고 있으니 에러가 발생 : 해당 도메인은 다른 엔드포인트에서 쓰고 있습니다!

 

아무튼 만들고 정보를 보면 DNS 이름이 3개 있다.

 

 

연결 안되서 다시

 


3교시

 

 

1. 엔드포인트 삭제

2. 프라이빗 인스턴스 삭제

3. 프라이빗 서브넷 삭제

 

cloudformation은 핑으로 응답하는 서비스가 아니다. 

인터페이스 엔드포인드 생성 > 프라이빗 DNS 이름 활성화 체크 해제 후 생성

cloudformation.ap-northeast-2.amazonaws.com

vpce-0e134bd4dcabb4569-95x91fal.cloudformation.ap-northeast-2.vpce.amazonaws.com

ping 말고 dig +short로 테스트 

-> 첫 주소(기본 DNS)로 해보면 cloudforamtion이 외부에 공개된 IPv4 주소가 출력된다. 그냥 이 주소로 접속하면 외부 인터넷을 통한 퍼블릭 통신

-> 두번째 주소(엔드포인트 전용 DNS)로 해보면 내부 주소가 나온다. 이 주소로 접속하면 AWS 내부망을 통한 프라이빗 통신

-> 프라이빗 EC2로 테스트해봐도 동일하다.

 

이제는 프라이빗 DNS 활성화, 로 인터페이스 엔드포인트를 생성해 보자

-> 기본 DNS로도 내부망 통신이 될 것이다

-> dig +short로 2가지 주소를 모두 테스트 하면 같은 결과가 나온다(내부 정보를 알려준다)

 

다시 처음부터 다시 하기 전에

1. 엔드포인트 삭제

2. EC2 인스턴스들 삭제

3. VPC 삭제


4교시

 

 

위에서 한 내용 재실습

-> 성공.

cloudformation은 ping을 받지 않으니 dig +short 명령어로 2개 주소(기본 DNS + 엔드포인트 전용 DNS)에서 같은 IPv4 주소를 반환하는지 확인

S3는 프라이빗 인스턴스에서 작동하지 않던 ping이 게이트웨이 엔드포인트 설정 후 작동하는지 확인


5~8교시

 

 

AWS 퍼블릭 서비스 외에 다른 서비스를 프라이빗 링크로 연결하기

일단 기본 구성

1. VPC 2개 생성

2. 각 VPC에 퍼블릭 서브넷 1개씩 생성, IGW 하나씩 생성

3. 라우팅 테이블 설정

4. VPC 1에는 인스턴스 1개를 두고 클라이언트로 구성, VPC 2에는 인스턴스 2개를 두고 웹 서버로 구성

-> IP, 도메인을 클라이언트에게 알려주지 않을 것 : 부하 분산 처리

-> 클라이언트는 NLB 정보만 알고 있다.

-> 이 NLB를 서비스로 볼 것이다. 이것은 퍼블릭 서비스가 아니다.

-> NLB를 엔드포인트 서비스로 만들고, 반대편에서 NLB를 퍼블릭 서비스처럼 인식하게 한다. 인터페이스 엔드포인트를 생성해 연결

 

NLB 구성 전까지 복습 겸 구성해보기.

-> VPC, 서브넷, 라우팅 테이블, 인터넷 게이트웨이 구성

-> 인스턴스 구성 및 외부 접속

-> 인스턴스에 웹 페이지 설치

 

주의점

1. 외부에서 인스턴스로 접속할 예정이니 라우팅 테이블에 0.0.0.0/0에 대한 인터넷 게이트웨이 연결을 라우팅 테이블에 작성

2. 인스턴스에 접속 후 패키지(웹) 설치, 서비스 가동 시 sudo를 앞에 붙일 것.

 

 

NLB(Network Load Balancer) 구성

외부에서는 NLB를 웹 서버로 인식하고 접속할 것이고, NLB는 내부의 웹 서버들에게 나눠줄 것이다.

 

타겟 그룹 만들기 > 타겟 타입은 인스턴스, 이름 작성, 프로토콜은 TCP > Health Check : 그룹의 구성원의 상태를 확인. 해당 체크 경로의 코드를 받아 정상 작동 중인지 확인한다. > 다음 > 인스턴스 2개 체크 후 타겟 그룹 생성 완료 > Targets 탭에 Register targets > 사용 가능한 인스턴스 체크 후 Include~ 클릭 후 생성

-> 생성 후 선택 가능 목록에 뜨기까지 시간이 좀 걸린다.

 

EC2 > 좌측 목록의 로드 밸런싱 > 로드밸런서 > Load Balancer 생성 > ALB, NLB, GLB 중 보통 앞의 2개를 로드밸런서라고 한다. ELB라고도 한다. > NLB 선택 > 이름 작성, VPC 선택, 매핑할 서브넷 선택(가용영역 체크) > 부하 분산시킬 타겟 서비스의 포트 설정(리스너). 그대로 둔다(80) > 아까 만든 타겟 그룹 선택 후 생성

 

생성 후 좀 기다리면 타겟 그룹의 인스턴스들 상태가 Healthy로 바뀐다.

NLB는 TCP, TLS, UDP만 사용 가능 : 타겟 그룹을 HTTP로 하니 선택지에 아예 뜨질 않는다.

 

이제 외부에서는 NLB의 DNS 이름으로 접속하게 될 것.

-> NLB의 DNS 주소로 접속해 보면 웹 서버가 보인다.

 

 

VPC > 좌측 목록의 엔드포인트 서비스 클릭, 생성 클릭 > 이름 입력, NLB 선택 후 생성 > 엔드포인트 서비스 이름 복사해두고

엔드포인트 생성 > 이름별 서비스 찾기 > 복사해둔 이름 붙여서 검색, 확인 > VPC는 My-VPC로 선택. 이건 서버측에 있는 엔드포인트가 아니니까. > 생성

엔드포인스 서비스 > 엔드포인트 연결 탭 > 요청이 들어온 엔드포인트 클릭 후 작업 > 요청 수락

이제 엔드포인트의 DNS 이름 하나 복사 > 해당 주소로 dig +short 해보면 내부망의 주소가 나온다.

-> 엔드포인트로 요청을 넣으면 엔드포인트 서비스로 넘기고, 엔드포인트 서비스는 NLB로 넘겨서 웹 접속

 

엔드포인트 보안 그룹 탭 > 해당 보안 그룹 인바운드 규칙 편집 > http에 대한 0.0.0.0/0 추가

-> 이제 외부에서 curl로 엔드포인트 DNS를 실행해보면 해당 페이지의 코드를 긁어온다.


3교시 다시 듣기. 오류로 뒤죽박죽이라 헷갈린다.

그냥 오늘 수업은 전부 다시 들어야 한다. 오후 수업은 백신 맞으러 가느라 조퇴.

주말에 올라오는 녹화 영상을 보고 다시 작성하자.

댓글