Database · PostgreSQL ·
[Kubernetes] PostgreSQL SSL Mode 설정
- Kubernetes에서 PostgreSQL의
pg_hba.conf파일에서 SSL 모드를 활성화하려면 다음 단계에 따라 설정할 수 있다.
SSL 인증서 준비 #
SSL 모드를 활성화하려면 PostgreSQL 서버와 클라이언트가 인증서와 개인 키를 설정해야 한다. 보통 다음 파일들이 필요하다:
server.crt: 서버 인증서server.key: 서버의 개인 키root.crt: 클라이언트가 신뢰하는 CA 인증서 (optional, 클라이언트 검증용)인증서 파일을 Kubernetes 비밀(Secret)로 관리하는 것이 일반적이다.
PostgreSQL Docker 이미지에서 SSL 설정 #
PostgreSQL의 Docker 이미지를 사용하고 있다면,
postgresql.conf파일과pg_hba.conf파일을 수정하여 SSL을 활성화할 수 있다.postgresql.conf에서 SSL 활성화:ssl = onssl_cert_file = '/path/to/server.crt'ssl_key_file = '/path/to/server.key'ssl_ca_file = '/path/to/root.crt'(옵션)
pg_hba.conf 파일에서 SSL 모드 설정 #
pg_hba.conf파일에서 SSL 모드를 활성화하려면,hostssl키워드를 사용하여 SSL 연결만 허용하도록 설정할 수 있다.
1# TYPE DATABASE USER ADDRESS METHOD
2hostssl all all 0.0.0.0/0 md5
3hostssl all all ::/0 md5- 이 설정은 모든 IP에서 SSL 연결만 허용하고,
md5인증 방법을 사용하도록 설정한다.
Kubernetes에서 설정 적용하기 #
- Kubernetes에서 PostgreSQL Pod의 설정을 수정하려면,
ConfigMap또는Secret을 사용하여pg_hba.conf와 SSL 인증서 파일을 제공해야 한다.
ConfigMap 또는 Secret을 사용하여 pg_hba.conf 수정
#
- Kubernetes ConfigMap 또는 Secret을 생성하여
pg_hba.conf와postgresql.conf를 제공할 수 있다.
1apiVersion: v1
2kind: ConfigMap
3metadata:
4 name: postgresql-config
5data:
6 pg_hba.conf: |
7 # TYPE DATABASE USER ADDRESS METHOD
8 hostssl all all 0.0.0.0/0 md5
9 hostssl all all ::/0 md5
10 postgresql.conf: |
11 ssl = on
12 ssl_cert_file = '/etc/ssl/certs/server.crt'
13 ssl_key_file = '/etc/ssl/private/server.key'
14 ssl_ca_file = '/etc/ssl/certs/root.crt'Pod에 SSL 인증서 및 키 파일을 추가 #
server.crt,server.key,root.crt파일을 Kubernetes Secret으로 생성한다.
1apiVersion: v1
2kind: Secret
3metadata:
4 name: postgresql-ssl-secret
5data:
6 server.crt: <base64-encoded-certificate>
7 server.key: <base64-encoded-private-key>
8 root.crt: <base64-encoded-ca-certificate>- 그런 다음 PostgreSQL Pod의 볼륨으로 Secret을 마운트하여
postgresql.conf및pg_hba.conf와 함께 사용할 수 있다.
PostgreSQL Pod에 적용 #
pg_hba.conf와 SSL 관련 파일들을 수정한 후, 해당 파일들을 컨테이너 내부에 마운트해야 한다. PostgreSQL 컨테이너의postgresql.conf파일과pg_hba.conf파일을 수정한 후, 컨테이너를 재시작하여 변경 사항을 적용한다.
1apiVersion: apps/v1
2kind: Deployment
3metadata:
4 name: postgresql
5spec:
6 replicas: 1
7 template:
8 metadata:
9 labels:
10 app: postgresql
11 spec:
12 containers:
13 - name: postgresql
14 image: postgres:latest
15 volumeMounts:
16 - name: postgresql-config-volume
17 mountPath: /etc/postgresql/postgresql.conf
18 subPath: postgresql.conf
19 - name: postgresql-ssl-secret
20 mountPath: /etc/ssl/certs
21 - name: postgresql-config-volume
22 mountPath: /etc/pgsql/pg_hba.conf
23 subPath: pg_hba.conf
24 volumes:
25 - name: postgresql-config-volume
26 configMap:
27 name: postgresql-config
28 - name: postgresql-ssl-secret
29 secret:
30 secretName: postgresql-ssl-secretPod 재시작 #
- 위 설정을 완료한 후, PostgreSQL Pod를 재시작하여 SSL 및
pg_hba.conf설정이 적용되도록 한다.
1kubectl rollout restart deployment postgresql- 이 과정을 통해 Kubernetes에서 PostgreSQL에 SSL을 활성화하고,
pg_hba.conf파일에hostssl설정을 추가하여 SSL 연결을 강제할 수 있다.
Advertisement