[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 = on

  • ssl_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.confpostgresql.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.confpg_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-secret

Pod 재시작 #

  • 위 설정을 완료한 후, PostgreSQL Pod를 재시작하여 SSL 및 pg_hba.conf 설정이 적용되도록 한다.
1kubectl rollout restart deployment postgresql
  • 이 과정을 통해 Kubernetes에서 PostgreSQL에 SSL을 활성화하고, pg_hba.conf 파일에 hostssl 설정을 추가하여 SSL 연결을 강제할 수 있다.
Advertisement