kong | single node + db 구성

kong api gateway를 vm으로 구성해보는 내용.

Kong

Database 구성

패키지 설치

sudo apt update
sudo apt install postgresql postgresql-contrib -y
systemctl status postgresql

환경설정

네트워크 설정(외부 접근 허용 설정)

모든 대역에서 접근을 허용하도록 설정합니다.

sudo vi /etc/postgresql/14/main/postgresql.conf

계정 접근 권한 설정

sudo vi /etc/postgresql/14/main/pg_hba.conf

db와 kong이 동일서버이면 아래 설정에서 암호화 방식만 md5로 변경한다.

# "local" is for Unix domain socket connections only
local   all             all                                     peer
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5 # 여기 변경
#host    all             all             192.168.0.0/24          md5
# IPv6 local connections:
host    all             all             ::1/128                 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication     all                                     peer
host    replication     all             127.0.0.1/32            md5 # 여기 변경
#host    replication     all             192.168.0.0/24          md5
host    replication     all             ::1/128                 md5

설정 적용

sudo systemctl restart postgresql

DB 내부 설정

sudo -u postgres psql

접속후 비밀번호 저장 암호화 방식을 조회하면 db에 아직 적용되지 않은 것을 확인 할수 있습니다.
md5로 변경합니다.

SHOW password_encryption;
postgres=# ALTER SYSTEM SET password_encryption = 'md5';

postgresql 접속을 해제하고 서버 재시작을하여 설정을 적용합니다.

DB 계정생성(Kong이 사용할 계정)

계정생성 및 데이터 베이스 생성
비밀번호 생성시 @# 이 포함되면 kong연동이 잘 안될수 있습니다. !와 %를 이용해주세요.

sudo -u postgres psql
postgres=# CREATE USER kong WITH PASSWORD 'Xptmxm123!%';
postgres=# CREATE DATABASE kong OWNER kong;
postgres=# \q

접속 검증(테스트는 다른 서버에서 진행)

현재 설정은 동일 네트워크만 접근이 되므로 고려해서 테스트 할것.

sudo apt install postgresql-client -y
psql -h 192.168.0.101 -U kong -d kong

Kong

curl -1sLf 'https://packages.konghq.com/public/gateway-39/gpg.B9DCD032B1696A89.key' |  gpg --dearmor | sudo tee /usr/share/keyrings/kong-gateway-39-archive-keyring.gpg > /dev/null
curl -1sLf "https://packages.konghq.com/public/gateway-39/config.deb.txt?distro=ubuntu&codename=jammy" | sudo tee /etc/apt/sources.list.d/kong-gateway-39.list > /dev/null
apt update
apt-cache madison kong
apt update && apt install kong=3.9.1 -y

설정

vi /etc/kong/kong.conf
database = postgres
pg_host = 127.0.0.1            # Host of the Postgres server.
pg_port = 5432                   # Port of the Postgres server.
pg_user = kong                   # Postgres user.
pg_password = 비밀번호          # Postgres user's password.
pg_database = kong              # The database name to connect to.
declarative_config = off # 이것은 DB-less모드가아니므로 off로 적용
admin_listen = 192.168.0.101:8001 reuseport backlog=16384 #, 127.0.0.1:8444 http2 ssl reuseport backlog=16384
admin_gui_url = http://192.168.0.101:8002
admin_gui_path = /
# 아래 옵션을 필요에 따라 적용
#headers = off
# 아래 설정을 안하면 lb를 통해 넘어오는 client ip가 안보일수있음.
#trusted_ips = 192.168.0.73/32 # LB나 앞에 위치한 proxy의 ip를 넣습니다.
#real_ip_header = X-Forwarded-For
#real_ip_recursive = on
설정의미
headers = offKong이 응답 헤더에 Kong 관련 헤더를 추가하지 않음 → 보안 목적
trusted_ips =어떤 프록시의 X-Forwarded-For 값을 신뢰할지 목록 (현재 비어있음 → 어떤 것도 신뢰 안 함)
real_ip_header = X-Forwarded-For실제 클라이언트 IP를 X-Forwarded-For 헤더에서 읽음
real_ip_recursive = onX-Forwarded-For 헤더에서 가장 원본의 IP를 실제 IP로 인식함
sudo kong migrations bootstrap -c /etc/kong/kong.conf --vv

migration완료

kong Start

3.4.1버전은 daemon설정을 직접했어야했는데 3.9.1은 구성되어있어서 실행만하면된다.

systemctl start kong

192.168.0.101:8002로 접근하면 웹콘솔이 보인다.