Files
service-catalog/manifests/helm/cnpg-cluster/1.0.0/values.yaml
T
wbsong111 6878b61efa 자체 빌드 이미지 3종(cloudnative-pg/cnpg-postgresql/etcd) + 대응 헬름 차트 도입
security-catalog 프로젝트에서 첫 실사용 자체 빌드 이미지 3종을 포팅한다 — 전부
상위 태그·베이스 OS 교체로 해소 안 되는 CVE(Go 모듈 정적 링크 또는 미수정 CRITICAL/
HIGH)를 자체 빌드(소스 컴파일 또는 SUSE BCI 재설치)로 대응한다:

- images/cloudnative-pg: CNPG operator, release-1.30 소스 컴파일 + bci-micro
- images/cnpg-postgresql: PostgreSQL 18.4, bci-base + zypper 재설치
- images/etcd: etcd v3.7.1, 소스 컴파일(x/text 강제 업그레이드) + bci-micro

함께 추가:
- manifests/helm/{cloudnative-pg,cnpg-cluster,etcd} — 위 이미지를 참조하는 카탈로그 차트
- scripts/deploy-test/*.sh, .claude/deploy-test-procedure.md — CVE 0건과 별개로
  "실제로 뜨는가"를 검증하는 배포 스모크 테스트
- .claude/pitfalls.md — 자체 빌드/배포 테스트 중 실측한 함정 모음

검토 중 발견해 반영한 수정:
- cloudnative-pg 차트의 image 블록을 etcd와 동일한 registry/repository/tag 3필드+
  따옴표 포맷으로 통일 — 기존 포맷(repository에 registry+repo 결합, 따옴표 없음)은
  patch-catalog-tag.py 의 split 패처가 tag만 갱신하고 repository는 그대로 남기는
  조용한 부분 치환을 일으켜, 향후 레지스트리 마이그레이션 시 깨진 참조를 만들 수 있었다
- cnpg-cluster 차트의 SLES 커버리지 코멘트를 최신 실측(trivy가 SLES 15.7을 정상
  커버함, 2026-07-29 재측정)에 맞게 정정 — 폐기된 "측정 불가/OVAL 우회 필요" 결론이
  남아있었다
- CLAUDE.md/MEMORY.md 의 "images/ 디렉토리 없음" 서술을 갱신하고, 레지스트리
  마이그레이션(docker.io/wbsong111 → docker.io/paasup)·decisions/analysis 문서 이관·
  리소스 프로파일 추가를 다음 작업으로 기록

이 3개 이미지는 아직 dip-catalog 자체 CI(build-image.yml)로 빌드·게이트·push 를
실행해본 적이 없다 — 현재 참조 태그는 security-catalog 쪽에서 이미 검증된 것이다.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-03 12:03:37 +09:00

168 lines
5.6 KiB
YAML

# Default values for cnpg-cluster
# CloudNativePG operator(cloudnative-pg 차트)가 먼저 설치되어 있어야 한다.
nameOverride: ""
namespaceOverride: ""
# PostgreSQL 인스턴스 수. 1 = 단독, 3 이상 = primary 1 + replica N-1
instances: 3
postgresql:
image:
repository: ghcr.io/cloudnative-pg/postgresql
# 반드시 베이스 OS 를 포함한 태그를 쓴다.
# 금지: "18" — Debian 11(bullseye) 기반이며 2026-08-31 지원 종료
# 권장: "18.4-system-trixie" — Debian 13, 2030-06-30 까지 지원
# (operator 1.30.0 이 imageName 미지정 시 선택하는 기본값과 동일)
# 포함 확장: pgaudit 18.0, pg_stat_statements 1.12, pgcrypto 1.4, pg_trgm 1.6, vector 0.8.5
tag: "18.4-system-trixie"
# 전체 이미지 경로를 직접 지정할 때 사용 (오프라인 미러 등). 지정 시 image.* 는 무시된다.
imageName: ""
# postgresql.conf 파라미터
parameters:
max_connections: "100"
shared_buffers: 128MB
# 감사 로깅용. pgaudit 는 CNPG 기본 이미지에 포함되어 있다.
# shared_preload_libraries 는 CNPG 가 자동 관리하므로 직접 넣지 않는다.
# 확장 기능 (pgaudit 등). shared_preload_libraries 는 operator 가 계산한다.
sharedPreloadLibraries: []
# pg_hba.conf 추가 규칙. CNPG 기본값은 TLS 강제 + scram-sha-256 이다.
pg_hba: []
# - hostssl appdb appuser 10.42.0.0/16 scram-sha-256
# 동기 복제 설정. 미설정 시 비동기(async) 복제다.
# synchronous:
# method: any
# number: 1
# primary 업데이트 전략
# unsupervised = operator 가 자동으로 switchover 후 업데이트 (기본)
# supervised = 운영자가 수동 승격해야 진행
primaryUpdateStrategy: unsupervised
primaryUpdateMethod: switchover
storage:
size: 10Gi
storageClass: longhorn
# WAL 을 별도 볼륨으로 분리한다. I/O 경합을 줄이고 WAL 폭증이 데이터 볼륨을 채우는 것을 막는다.
walStorage:
enabled: true
size: 5Gi
storageClass: longhorn
resources:
requests:
cpu: 500m
memory: 1Gi
limits:
cpu: "2"
memory: 2Gi
# 초기 DB/사용자 생성
bootstrap:
initdb:
database: appdb
owner: appuser
# 비밀번호를 담은 기존 시크릿 이름. 미지정 시 operator 가 무작위 생성해
# <release>-app 시크릿에 저장한다.
secretName: ""
encoding: UTF8
localeCollate: ""
localeCType: ""
# 초기화 SQL. 최초 bootstrap 시 1회만 superuser 로 실행된다.
# 주의: CREATE EXTENSION 은 여기에 넣으면 안 된다. CNPG 1.30.0 에서 오류 없이
# 무시된다(검증 기록: doc/deploy-test-cnpg.md). 확장은 아래 databases 로 선언한다.
postInitApplicationSQL: []
# - ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO readonly;
# 선언적 데이터베이스·확장·스키마 관리 (CNPG 1.26+ Database CRD).
# 확장 설치의 정식 경로다. bootstrap 으로 만든 DB 도 여기서 관리 대상으로 선언할 수 있다.
databases: []
# - name: appdb # bootstrap.initdb.database 와 같은 이름을 쓰면 그 DB 를 관리한다
# owner: appuser # 생략 시 bootstrap.initdb.owner
# ensure: present # present | absent
# reclaimPolicy: retain # retain = Database 리소스를 지워도 실제 DB 는 보존
# extensions:
# - name: pg_stat_statements
# - name: pgaudit
# schemas:
# - name: app
# owner: appuser
# postgres(superuser) 계정으로의 직접 접속 허용 여부.
# false 면 superuser 시크릿이 아예 생성되지 않는다. 보안상 false 를 권장한다.
enableSuperuserAccess: false
# Pod 분산 배치
affinity:
enablePodAntiAffinity: true
# preferred = 노드가 부족해도 스케줄됨 (단일 노드 dev 환경 필수)
# required = 노드당 1개 강제 (운영 권장, 노드 수 >= instances 필요)
podAntiAffinityType: preferred
topologyKey: kubernetes.io/hostname
nodeSelector: {}
tolerations: []
# 참고: 컨테이너 보안 컨텍스트는 operator 가 관리한다. CNPG 는 항상 non-root(uid 26)
# runAsNonRoot / readOnlyRootFilesystem 로 Pod 를 만들며, 차트에서 재정의할 값이 없다.
monitoring:
# Prometheus Operator CRD 필요
enablePodMonitor: false
# 커스텀 메트릭 쿼리 ConfigMap
customQueriesConfigMap: []
# 백업 — S3 호환 오브젝트 스토리지 (Barman Cloud)
backup:
enabled: false
# 보존 기간
retentionPolicy: 30d
barmanObjectStore:
destinationPath: "" # 예: s3://pg-backup/cnpg
endpointURL: "" # 예: http://rustfs.defense-llm.svc:9000
s3Credentials:
accessKeyId:
name: "" # 시크릿 이름
key: ACCESS_KEY_ID
secretAccessKey:
name: ""
key: ACCESS_SECRET_KEY
wal:
compression: gzip
maxParallel: 2
data:
compression: gzip
jobs: 2
# 정기 백업 스케줄 (backup.enabled: true 일 때만 생성)
scheduledBackup:
enabled: false
# CNPG 의 cron 은 6필드다 (초 분 시 일 월 요일)
schedule: "0 0 2 * * *"
backupOwnerReference: self
immediate: false
# PgBouncer 커넥션 풀러
pooler:
enabled: false
instances: 2
type: rw # rw | ro
poolMode: transaction # session | transaction | statement
parameters:
max_client_conn: "1000"
default_pool_size: "25"
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: 500m
memory: 256Mi
# 추가 라벨/어노테이션
extraLabels: {}
extraAnnotations: {}