CloudNativePG 1.30: Kubernetes PostgreSQL 프라이머리 선출을 Lease 뮤텍스로 직렬화하고 보안 기준을 높인 방법
요약
CloudNativePG 1.30.0이 2026년 6월 29일 출시되었다(90일 이내). Kubernetes에서 PostgreSQL을 운영하는 사실상 표준 오퍼레이터의 두 가지 핵심 변화다.
- Kubernetes Lease 뮤텍스: 프라이머리 승격을 직렬화해 이중 프라이머리(split-brain) 위험을 줄이는 구조적 안전장치가 추가되었다.
- 보안 강화: 메트릭 익스포터의 수퍼유저 권한 에스컬레이션(CVE-2026-44477, 1.29.1 패치), search_path 고정(CVE-2026-55769), SCRAM-SHA-256 패스워드 인코딩(CVE-2026-55765) 세 가지 CVE가 수정되었다.
이 챕터는 Lease가 왜 필요한지, 어떻게 동작하는지, 업그레이드 전에 무엇을 확인해야 하는지 운영 관점에서 정리한다.
CloudNativePG 개요
CloudNativePG는 EDB(EnterpriseDB)가 주도하고 CNCF에서 관리되는 Kubernetes 전용 PostgreSQL 오퍼레이터다. 핵심 설계 원칙은 하나의 CRD(Cluster)로 PostgreSQL 클러스터의 전체 라이프사이클을 선언적으로 관리하는 것이다.
주요 기능:
- 스트리밍 복제 기반 1 Primary + N Standby 구성
- 오퍼레이터 직접 자동 페일오버(Patroni 없이)
- WAL 아카이빙, PITR, 인플레이스 메이저 업그레이드 지원
- Prometheus 메트릭 익스포터 내장
- PgBouncer 연결 풀러 통합
버전 현황(2026년 기준):
| 버전 | EOL 날짜 | 비고 |
|---|---|---|
| 1.28.x | 2026-06-30 | EOL 완료 |
| 1.29.x | 2026-09-29 | 보안 패치 전용 |
| 1.30.x | 미정 | 현재 안정 버전 |
핵심 변화 1: Kubernetes Lease를 이용한 프라이머리 선출 직렬화
왜 필요한가
페일오버 중 두 인스턴스가 동시에 프라이머리라고 판단하는 이중 프라이머리(split-brain)는 PostgreSQL 운영의 가장 위험한 장애다. 데이터가 두 경로로 분기되면 복구가 어렵거나 불가능하다.
CloudNativePG는 기존에도 PostgreSQL의 WAL 타임라인 체계와 오퍼레이터 로직으로 split-brain을 방지했다. 1.30에서 Kubernetes Lease 객체를 추가적인 직렬화 레이어로 도입했다.
Kubernetes Lease란
Kubernetes에는 coordination.k8s.io/Lease 리소스가 있다. 분산 시스템에서 리더 선출(leader election)에 활용되는 표준 원시 타입으로, etcd가 원자적 조작을 보장한다.
apiVersion: coordination.k8s.io/v1
kind: Lease
metadata:
name: <cluster-name>
spec:
holderIdentity: <instance-manager-pod-name>
leaseDurationSeconds: 15
renewTime: <RFC3339Micro>
acquireTime: <RFC3339Micro>인스턴스 매니저는 이 Lease를 획득한 경우에만 프라이머리로 동작한다. 정상 종료 시 Lease를 즉시 해제해, 레플리카가 TTL 만료를 기다리지 않고 빠르게 승격할 수 있다.
동작 흐름
중요 주의점
Lease는 승격 뮤텍스이지 펜싱(fencing) 메커니즘이 아니다. 구 Primary가 격리되지 않은 채 계속 쓰기를 받을 수 있는 극단적인 시나리오를 직접 막지는 않는다. Primary 격리는 여전히 PostgreSQL 복제 타임라인과 오퍼레이터의 기존 메커니즘이 담당한다.
.spec.primaryLease 스탠자로 TTL 등 타이밍 파라미터를 조정할 수 있다.
핵심 변화 2: DatabaseRole CRD
기존에는 PostgreSQL 롤(사용자)을 선언적으로 관리할 방법이 없었다. 수동 SQL 또는 초기화 스크립트에 의존해야 했다.
1.30은 DatabaseRole CRD를 도입해 GitOps 방식으로 롤을 선언할 수 있게 했다.
apiVersion: postgresql.cnpg.io/v1
kind: DatabaseRole
metadata:
name: app-readonly
spec:
cluster:
name: my-cluster
roleName: app_readonly
login: true
inherit: true
privileges:
- privilege: CONNECT
database: mydb
- privilege: SELECT
schema: public오퍼레이터가 이 리소스를 감지해 CREATE ROLE, GRANT, REVOKE를 자동으로 실행하고, 드리프트를 주기적으로 조정한다. 롤 관리도 Git으로 리뷰·감사할 수 있게 됐다.
보안 강화: 세 가지 CVE
CVE-2026-44477 (1.29.1 패치, Critical CVSS 9.4)
문제: 메트릭 익스포터가 postgres 수퍼유저로 연결한 뒤 SET ROLE pg_monitor로 권한을 낮췄다. 스크레이프 세션 내의 SQL 표현식이 RESET ROLE을 실행하면 수퍼유저 권한을 회복할 수 있었다. COPY ... TO PROGRAM으로 OS 수준 명령을 실행하는 것까지 가능했다.
수정: 메트릭 익스포터 전용 cnpg_metrics_exporter 롤을 생성하고 pg_monitor 권한만 부여한다. 수퍼유저 연결을 완전히 제거했다.
영향: 1.29.0 이하를 사용 중이면 즉시 1.29.2 또는 1.30.x로 업그레이드해야 한다.
CVE-2026-55769 (1.30.0 / 1.29.2 / 1.28.4, 권한 에스컬레이션)
문제: 오퍼레이터의 풀된 연결에서 search_path가 고정되지 않아, DB 소유자가 public 스키마에 오버로드 연산자를 삽입하면 오퍼레이터가 의도치 않은 코드를 실행할 수 있었다.
수정: 오퍼레이터의 모든 풀된 연결에 search_path = pg_catalog, public, pg_temp를 고정한다.
운영 주의: 기존에 public 스키마에 연산자 오버로딩을 사용 중이라면 동작이 변경될 수 있다.
CVE-2026-55765 (1.30.0 / 1.29.2 / 1.28.4, 패스워드 평문 노출)
문제: 오퍼레이터가 CREATE ROLE / ALTER ROLE 명령에 평문 패스워드를 포함해 PostgreSQL 로그 또는 감사 로그에 기록될 수 있었다.
수정: 오퍼레이터가 CREATE/ALTER ROLE 실행 전 SCRAM-SHA-256으로 패스워드를 인코딩한다. 로그에 평문이 남지 않는다.
운영 주의: password_encryption 파라미터가 md5로 설정된 클러스터는 변환이 필요할 수 있다.
인플레이스 메이저 업그레이드(Image Volume 지원)
1.30에서 Image Volume 확장 기능을 활용한 인플레이스 메이저 업그레이드가 지원된다. 소스 버전과 타겟 버전의 확장 이미지를 나란히 마운트해, 업그레이드 실패 시 원래 이미지로 클린하게 되돌릴 수 있다.
업그레이드 체크리스트
| 항목 | 확인 사항 |
|---|---|
| 현재 버전이 1.28.x | 1.29.x를 거쳐 1.30.x로 순차 업그레이드 필요 |
| CVE-2026-44477 | 1.29.0 이하라면 즉시 1.29.2 이상으로 업그레이드 |
| Lease 객체 RBAC | 1.30 업그레이드 후 클러스터당 Lease 객체 자동 생성. 오퍼레이터 ServiceAccount에 coordination.k8s.io/leases 권한 확인 |
| search_path 변화 | CVE-2026-55769 수정으로 public 스키마 연산자 오버로딩이 영향받을 수 있음 |
| SCRAM-SHA-256 | password_encryption 설정 확인. MD5만 허용하는 레거시 클라이언트 여부 검토 |
| DatabaseRole CRD | 기존 수동 롤 관리 스크립트와 충돌 여부 검토 |
| 1.28.x EOL | 2026-06-30 EOL 완료. 보안 패치 수신 종료 |
요점 정리
CloudNativePG 1.30은 운영 안정성과 보안 기준을 동시에 높인 릴리스다.
Lease 뮤텍스는 기존 페일오버 메커니즘을 대체하는 것이 아니라 추가적인 직렬화 레이어로 작동한다. split-brain 위험을 더 좁은 시간 창으로 제한하고, 계획된 페일오버를 더 빠르게 완료한다.
CVE-2026-44477(수퍼유저 메트릭 연결)은 Critical 등급이다. 1.29.0 이하를 사용 중이라면 지금 바로 업그레이드해야 한다.
References
- CloudNativePG 1.30.0 출시 공지: https://cloudnative-pg.io/releases/cloudnative-pg-1-30.0-released/
- PostgreSQL.org 뉴스 (CloudNativePG 1.30.0): https://www.postgresql.org/about/news/cloudnativepg-1300-released-3337/
- CloudNativePG 1.29.1 보안 패치 공지 (CVE-2026-44477): https://cloudnative-pg.io/releases/cloudnative-pg-1-29.1-released/
- CloudNativePG 릴리스 목록: https://cloudnative-pg.io/releases/
- Kubernetes Lease API 공식 문서: https://kubernetes.io/docs/concepts/architecture/leases/
- EDB Postgres for Kubernetes 1.30.0 릴리스 노트: https://www.enterprisedb.com/docs/postgres_for_kubernetes/latest/