Files
platform-core/services/platform-postgres/README.md
T

3.3 KiB

플랫폼 PostgreSQL — Phase 1 빌드 루트

이 Kustomization은 platform-data namespace에 Phase 1 CloudNativePG 기반 구성을 선언한다.

  • platform-postgres라는 Cluster 하나
  • Gitea용 DatabaseRoleDatabase
  • CloudNativePG, 동일 Cluster 트래픽 및 Gitea만 허용하는 기본 ingress NetworkPolicy

PostgreSQL 17.9 인스턴스 하나로 시작하며 20 GiB Claim을 홈 서버의 정적 ssd-local-postgres-retain StorageClass에 바인딩한다. CloudNativePG에서는 필수 read/write Service만 유지한다.

platform-postgres-rw.platform-data.svc.cluster.local:5432

이미지 ghcr.io/cloudnative-pg/postgresql:17.9-standard-trixie는 공식 PostgreSQL 17 멀티 아키텍처 이미지로 고정되어 있다. 백업 및 복원 시험 후 의도적으로 태그를 업그레이드한다.

Cluster의 사용자 정의 pg_hba 규칙은 giteagitea Database에만, keycloakkeycloak Database에만 인증하도록 허용한 뒤 각 Role의 다른 모든 Database 접근을 거부한다. 이 규칙들은 CloudNativePG의 기본 fallback 인증 규칙보다 앞에 배치된다.

Phase 1 Secret 계약

Cluster를 생성하기 전에 platform-datagitea-db-credentials를 생성한다.

  • 유형: kubernetes.io/basic-auth
  • label: cnpg.io/reload: "true"
  • username: 정확히 gitea
  • password: Git 외부에서 제공하는 생성된 비밀번호

동일한 credential 값을 gitea namespace에 복사한다. initdb bootstrap은 최초 소유자와 Database를 만들 때 이 Secret을 사용하고 data checksum을 활성화한다. Gitea Role과 Database는 모두 retain 조정 정책을 사용한다.

Keycloak DatabaseRole, Database, Secret 참조 및 namespace 전용 ingress 허용은 이 Phase 1 빌드 루트에 의도적으로 포함하지 않았다. 공통 Cluster의 Keycloak HBA 허용·거부 규칙 쌍은 이곳에 유지하고, 독립적인 형제 빌드 루트 services/platform-postgres-keycloak이 Keycloak login Role, Database 및 namespace 전용 ingress를 추가한다. 2026-07-23 기준 이 Keycloak 확장은 실제 클러스터에 적용됐다. 두 빌드 루트가 분리돼 있으므로 platform-data/keycloak-db-credentials가 없어도 신규 Phase 1 baseline만은 배포할 수 있다.

의존성과 렌더링

  1. Phase 1 namespace를 생성한다.
  2. PostgreSQL SSD Local PV 기반 구성을 준비하고 적용한다.
  3. CloudNativePG Operator를 설치하고 준비될 때까지 기다린다.
  4. Gitea credential Secret 계약을 생성한다.
  5. 이 디렉터리를 렌더링하고 적용한다.
kubectl kustomize services/platform-postgres

렌더링 결과에는 Cluster 하나와 Gitea의 DatabaseRole 및 Database만 있어야 한다. Keycloak DatabaseRole, Database, Secret 참조 또는 Keycloak namespace ingress 허용은 없어야 하며, Keycloak용 HBA 정책만 존재해야 한다.

공식 참고 문서