9.4 Service 관리
Pod는 죽고 새로 뜨며 이름과 IP가 바뀌므로, 애플리케이션은 특정 Pod가 아니라 Kubernetes Service를 통해 PostgreSQL에 접속합니다(2.1). CloudNativePG는 Cluster마다 세 개의 기본 Service를 자동으로 만들지만, 그중 일부를 끄거나 원하는 형태의 Service를 추가할 수도 있습니다.
기본 Service 세 가지
Cluster를 만들면 다음 세 Service가 <클러스터이름>-<역할> 형태의 이름으로, 기본 ClusterIP 타입으로 생성됩니다. Cluster 이름이 pg라면 각각 pg-rw, pg-ro, pg-r가 됩니다.
| Service | 대상 | 용도 |
|---|---|---|
rw | 현재 primary | 읽기·쓰기 |
ro | replica들 | 읽기 전용 |
r | 아무 인스턴스 | 읽기 |
기본 Service 비활성화
ro와 r Service는 필요 없으면 .spec.managed.services.disabledDefaultServices로 끌 수 있습니다. 다만 rw는 복제 운영에 필수라 끌 수 없습니다.
spec:
managed:
services:
disabledDefaultServices: ["ro", "r"]
쓰지 않는 Service를 남겨 두면 불필요한 접속 통로가 열려 있는 셈입니다. 애플리케이션이 rw로만 접속한다면 ro·r을 끄는 것이 접속 표면을 줄이는 데 도움이 됩니다.
커스텀 Service 추가
기본 세 개로 부족할 때는 .spec.managed.services.additional에 Service를 추가합니다. 예를 들어 클러스터 외부에서 접속해야 해서 LoadBalancer 타입이 필요한 경우입니다.
spec:
managed:
services:
additional:
- selectorType: rw
serviceTemplate:
metadata:
name: "pg-lb"
labels:
role: external
spec:
type: LoadBalancer
각 항목의 필드는 다음과 같습니다.
selectorType— 어느 인스턴스를 대상으로 할지 지정합니다(rw,ro,r). 이 값에 따라 Operator가 selector를 채웁니다.serviceTemplate— 표준 Kubernetes Service의metadata·spec을 그대로 씁니다. 라벨·어노테이션·타입 등을 자유롭게 지정합니다.updateStrategy— 변경을 반영하는 방식으로patch(기본) 또는replace를 지정합니다.
serviceTemplate에 selector 필드를 직접 적으면 안 됩니다. selector는 selectorType을 보고 Operator가 관리합니다. 또 Service 이름은 기본 Service가 쓰는 <클러스터이름>-<역할> 패턴과 겹치지 않아야 합니다.
updateStrategy: patch와 replace
patch(기본) — 기존 Service에 변경을 덧붙입니다. 접속 중단이 없습니다.replace— Service를 지우고 다시 만듭니다. 재생성 동안 일시적인 접속 중단이 생깁니다.
특별한 이유가 없으면 patch를 씁니다. Service 생성 시점에만 지정할 수 있는 항목을 바꿔야 할 때만 replace를 고려합니다.
외부 노출 시 주의
외부 접속이 필요한 상황은 임시 테스트, DBaaS 형태의 제공, Kubernetes 밖 레거시 애플리케이션 지원 등입니다. 다만 PostgreSQL을 클러스터 외부로 노출하는 것은 접속 표면을 넓히는 일이므로, 노출을 켜기 전에 인증·네트워크 정책 같은 보안 장치를 먼저 갖춰야 합니다.
정리
Cluster마다 rw·ro·r 세 Service가 ClusterIP로 자동 생성됩니다. disabledDefaultServices로 ro·r은 끌 수 있지만 rw는 복제 운영에 필수라 끄지 못합니다.
- 커스텀 Service는
managed.services.additional에selectorType과serviceTemplate로 추가합니다.selector는 직접 적지 않고 Operator에 맡기며, 이름은 기본 패턴과 겹치지 않게 합니다. updateStrategy는 무중단patch가 기본이고,replace는 재생성이라 일시적인 접속 중단이 생깁니다.
외부 노출이 필요할 때는 인증·네트워크 정책 같은 보안 장치를 먼저 갖춘 뒤에 켭니다.