1. 상황
Ubuntu 인스턴스에 CentOS 도커 컨테이너를 띄우고, 그 안에 PostgreSQL를 설치한 상태
그림으로 나타내보자면 아래와 같다.
내가 하고 싶은 것은
우분투에서 "CentOS에 설치된 PostgreSQL"에 접속해서 데이터를 추출해 MySQL(개발 DB)로 보내는 것!
그냥 접속하려고 했더니 계속 connection 에러가 나서 찾아보니..
이런 경우는 PostgreSQL에서 외부 접속을 허용해주어야 하고,
그러려면 바꿔야 할 설정과 설치해야 할 패키지들이 있어서 과정을 정리해보고자 한다 :)
2. 과정
0. 필요 패키지 설치
# Ubuntu에
sudo apt-get install -y postgresql-client
sudo apt-get install -y postgresql-client-common
# CentOS에
yum install -y firewalld net-tools
1. PostgreSQL이 CentOS 컨테이너의 네트워크 인터페이스에서 수신 대기 중인지 확인 - CentOS 컨테이너에서 실행
netstat -nlt | grep 5432
PostgreSQL이 0.0.0.0:5432에서 수신 대기 중이면 모든 IP 주소에서 연결을 수락할 준비가 되었음을 의미한다.
127.0.0.1:5432에서 수신하는 경우 외부 연결을 허용하도록 PostgreSQL 구성 파일을 수정해야 한다.
2. CentOS 컨테이너의 방화벽에서 PostgreSQL 포트(5432) 열기 - CentOS 컨테이너에서 실행
firewall-cmd --zone=public --add-port=5432/tcp --permanent
firewall-cmd --reload
3. /var/lib/pgsql/{version}/data/pg_hba.conf 수정 - CentOS 컨테이너에서 실행
host all all {인스턴스 퍼블릭 IP}/22 md5
우분투에서 CentOS에 있는 PostgreSQL로 접속하려는 것이기 때문에 우분투 IP를 허용해주어야 한다.
pg_hba.conf 가장 하단에 있는 허용 목록에 우분투 IP를 host로 추가해준다.
4. /var/lib/pgsql/{version}/data/postgresql.conf 수정 - CentOS 컨테이너에서 실행
#listen_addresses = 'localhost' 를 아래로 변경
listen_addresses = '*'
5. PostgreSQL 재시작 - CentOS 컨테이너에서 실행
sudo systemctl restart postgresql-{version}
6. 접속 - Ubuntu 인스턴스에서 실행
psql -h {인스턴스 퍼블릭 IP} -U postgres
접속에 성공한 것을 확인할 수 있다~!!