[파이널 프로젝트] EKS-RDS 연동 & 외부 IP에서 RDS접속

신현식·2023년 3월 21일
0

구름_Kubernetes

목록 보기
16/25
post-thumbnail

현재 상태는 eks 클러스터가 만들어져 있는 상태이다. 이에 따라 eks용 vpc와 서브넷이 생성이 되어있다.

이 글의 밑 문제정의 부분에서 하나의 프라이빗 서브넷에 인스턴스와 rds를 구축하지 않고 각기 다른 프라이빗 서브넷에 각각 구축하는 방식을 적어두었다. 밑 내용은 하나의 프라이빗 서브넷에 인스턴스와 rds를 구축하는 방법을 적어둔 것임으로 참고하면 좋을 것이다. 문제제기 부분을 진행하기 위해서 위에 내용도 일부 필요하기 때문에 필요한 부분만 읽어보면 좋을 것이다.

EKS-RDS 연동

RDS와 클러스터를 연동하는 목적은 서버 인스턴스와 DB 인스턴스를 분리하여 사용하기 위한 목적으로 AWS를 사용하는 핵심 이유이기도 할 것이다.

연동과정은 이런 방식으로 진행된다.

  • 연동할 eks 정보 파악
  • DB 보안그룹 생성
  • DB 서브넷 그룹 생성
  • 파라미터 그룹 생성
  • DB생성
  • 라우팅 테이블 수정

연동할 eks 정보 파악

우리가 사용해야할 eks, 보안그룹, 서브넷그룹, rds를 모두 같은 네트워크 안에서 사용되야 하므로 eks에서 사용하고 있는 vpc와 서브넷ID를 파악한다.가용영역별로 public, private 서브넷이 각각 생성되어 있다.

  • 또한 인스턴스에 들어가 클러스터로 사용하고 있는 인스턴스에서 어떤 보안그룹을 사용하고 있는지 확인한다. 2개의 노드가 모두 같은 보안그룹을 사용하고 있는 것을 확인 할 수 있다.

DB 보안그룹 생성

RDS DB에서 사용할 DB 보안 그룹을 생성한다. [EC2]에서 왼쪽 메뉴바의 [네트워크 및 보안]의 [보안그룹]을 선택해서 보안 그룹 생성을 클릭한다.
보안그룹의 이름과 설명이 각각 적당하게 써준 뒤, vpc는 eks와 동일한 vpc 대역으로 설정해준다.

로컬 PC에서 RDS로 접근하기 위해서 RDS의 보안 그룹에 본인 PC의 IP를 인바운드에 추가해야 한다.

인바운드 규칙에서 MYSQL을 사용할 것이니 MYSQL 선택하면 포트는 3306으로 지정된다.

  • 인바운드에 추가할 항목
    • 내 PC의 IP
    • EC2에 사용된 보안 그룹의 그룹 ID

eks에 사용된 보안 그룹을 RDS의 보안 그룹 규칙에 추가하는 이유는 이렇게 해야 eks에서 RDS로 접속도 가능하기 때문이다. 또한 개인 로컬PC에서 RDS 직접 접속 할수 있도록 내 공인 IP도 등록해준다.내 로컬 공인 IP와 개발을 담당하는 팀원의 공인 IP의 주소를 각각 인바운드에 등록해주었다.
내 공인IP 확인하는 방법

DB 서브넷 그룹 생성

[RDS]에서 [서브넷 그룹] 메뉴를 선택하고 DB서브넷 그룹 생성 버튼을 클릭한다. 서브넷 그룹 이름을 생성하고 vpc를 이번에도 마찬가지로 eks에서 사용하고 있는 vpc로 선택한다.
그런 다음 vpc에 속해있는 가용영역에 존재하는 서브넷을 추가한다.
이때 EKS Cluster 내부에 Private Subnet에 구축하기 위해 가용영역과 하단 서브넷은 Private Subnet만 선택한다.

파라미터 그룹 생성

파라미터 그룹을 생성하는 이유는 한글 사용을 가능하게 하기 위함과 DB의 시간을 한국 시간으로 설정하기 위함이다.

[RDS]에서 [파라미터 그룹] 메뉴를 선택하고 파라미터 그룹 생성 버튼을 클릭한다. 파라미터 이름을 설정하고 DB 패밀리도 지정해준 후 생성한다.

파라미터 그룹에서 korean-parameter 가 생성됨을 확인할 수 있다. 이후 방금 생성된 파라미터 그룹을 누르고 파라미터 그룹 작업의 편집을 누른다.

  • char을 검색하고 모든 값을 utf8으로 바꾼다.(boolean타입은 안바꿔도 됨)

  • collation을 검색하고 이번에는 나와 있는 모든 값을 utf8_general_ci로 바꾼다.

  • DB 시간설정을 위해 이번에는 zone 이라고 검색하고 time_zone을 Asia/Seoul로 바꾼다.

모든 편집을 완료한 이후 저장을 누르면 끝이다.

DB생성

[RDS]에서 [데이터베이스] 메뉴를 선택하고 데이터베이스 생성을 시작한다.

  • mysql를 사용할 것임으로 mysql 선택

  • 고 가용성을 위해서 다중 AZ DB인스턴스를 이용할 것이기에 개발/테스트 템플릿을 선택

  • mysql에 접속할때 사용할 마스터의 이름과 비밀번호를 입력

  • VPC : EKS Cluster VPC 선택, 서브넷 그룹 : 기존에 만들었던 그룹 선택, 퍼블릭 액세스 : '예', VPC 보안 그룹 : 기존에 만들었던 eks-rds-sg 선택

  • 나머진 그대로, 추가구성에서 DB 파라미터 그룹만 만들었던 korea-parameter로 변경

이후 데이터베이스 생성을 진행해주면 된다.

  • 생성된 DB 확인

라우팅 테이블 수정

생성된 데이터베이스에서 가용영역을 확인한다. 현재 2c 영역에서 생성된 것을 확인할 수 있는데 이를 통해 2c의 프라이빗 서브넷에서 작동하고 있는 것을 알 수 있다.
따라서 외부 IP에서 프라이빗 서브넷에 접근하기 위해 라우팅 테이블를 수정을 해줘야한다.
[VPC]에서 내 EKS VPC를 선택한 이후, [라우팅 테이블] 메뉴를 선택하고 위에서 확인한 가용역역c의 프라이빗 라우팅 테이블 정보를 클릭한다.

  • 이후 라우팅에 들어가서 라우팅 편집을 진행한다. 처음에 RDS 인바운드에서 등록했었던 공인 IP들을 대상으로 인터넷 게이트웨이로 갈수 있도록 라우팅을 추가해준다. 인터넷 게이트웨이는 eks를 만들때 생성되었던 것을 선택한다.

내 로컬 PC(외부)에서 mysql 접속

MySQL의 대표적인 클라이언트로 Workbench에서 접속을 시도해볼 것이다.
우선 AWS RDS 정보 페이지에서 엔드 포인트를 확인한다. 이 엔드 포인트가 접근 가능한 URL이므로 복사해둔다.

  • Hostname에 복사해두었던 RDS 엔드포인트를 입력하고 데이터베이스를 생성했을 때 설정했던 마스터의 이름과 비밀번호를 입력한다.
  • Test Connetion을 클릭하면 성공적으로 mysql에 접속하는 것을 볼 수 있다.

문제정의

지금까지 진행한 것은 모두 eks가 만들어지면서 생긴 가용영역별 프라이빗 서브넷을 이용하여 서브넷 그룹을 생성하였다. 그리고 이를 이용하여 RDS를 구현하였기 때문에 현재 상태를 확인해보면 다음과 같다.

지금 방식으로 진행한다면 ec2 인스턴스가 존재하는 서브넷이 고장이 생겼을 때 데이터베이스 또한 같이 문제가 생기기 때문에 좋지 않은 방식이다. 따라서 ec2 인스턴스가 있는 서브넷과 rds가 존재할 서브넷을 분리해서 연결해주는 작업이 필요할 것으로 보인다. 이 구조가 우리가 처음 설계한 구조이기 때문에 방식을 바꾸어서 rds를 다시 만들었다.

RDS용 서브넷 생성

기존에 존재하는 서브넷 6개는 생성된 vpc의 IP인 192.168.0.0/16 을 서브넷 마스크를 /19로 서브넷팅하여 대역을 분리하였다.
따라서 현재 사용할 수 있는 서브넷의 범위가 2^3 - 6 인 2개가 남아있기 때문에 이를 이용해서 RDS용 프라이빗 서브넷 2개를 생성할 것이다.

  • 가용영역은 어디에 해도 상관없다. 대신 2개의 서브넷의 가용영역만 다르게 해주면 된다.

RDS 서브넷 그룹 생성

생성한 서브넷을 이용하여 RDS -> 서브넷 그룹에 들어가 새로운 서브넷 그룹을 생성한다. 서브넷을 추가할때 정했던 가용영역을 선택한 후 만들었던 서브넷을 선택하고 만들어 주면 된다.

라우팅 테이블 작성

새로 만든 서브넷들의 라우팅 테이블을 설정해줄 것이다. rds용으로 만든 서브넷 2개에 대한 라우팅 테이블을 각각 만들어준다.

  • 그 후 생성한 라우팅 테이블을 클릭한 후 라우팅에 들어간다. 기본적으로 vpc에서 로컬로 가는 라우팅 테이블이 존재할 것이다.

  • 라우팅 편집으로 들어가 라우팅 경로를 몇개 추가해준다. 추가할 항목은 프라이빗 서브넷이기 때문에 nat 게이트웨이로 가는 것, 그리고 개발자와 내 공인 IP을 대상으로 인터넷 게이트 웨이로 연결해주는 것을 추가하고 저장해주면 된다.

  • 같은 라우팅 테이블에서 서브넷 연결로 이동하면 명시적 연결이 없는 서브넷으로 생성한 프라이빗서브넷이 존재할 것이다. 라우팅 설정을 마친 서브넷을 이름에 맞게 각각 명시적 서브넷 연결에 등록해주면 된다.

RDS 생성

이후 RDS 생성은 위에서와 동일하게 진행해주면 되고 서브넷 그룹만 새롭게 생성한 서브넷 그룹으로 변경하여 RDS를 생성해주면 된다. 테스트 방법 또한 생성한 RDS의 엔드포인트를 가지고 접속해보면 된다.

profile
전공 소개

0개의 댓글