PostgreSQL Container 구성
2024. 4. 10. 14:17ㆍData/PostgreSQL
tcp 통신으로 proxy와 연동해야 함
# stream proxy 설정
stream {
server {
listen {외부 port};
proxy_connect_timeout 60s;
proxy_socket_keepalive on;
proxy_pass {node IP}:{service port};
}
}
Service에서 nodePort 사용: ingress 사용 안함
apiVersion: v1
kind: Service
metadata:
name: {service}
namespace: {namespace}
spec:
type: NodePort
selector:
app: {pod}
ports:
- protocol: TCP
# minikube에서는 30000에서부터 시작함
nodePort: {node port}
# 없으면 에러남
port: {service port}
targetPort: {pod port}
ConfigMap을 마운트 할수 있도록 권한을 설정해줘야 함
# uid와 gid를 host 서버와 일치시켜줘서 권한 문제를 해결함
initContainers:
- name: init
image: busybox:latest
command:
- sh
- "-c"
- |
addgroup -g {gid} postgres
adduser -u {uid} postgres -G postgres -D
mkdir -p /var/lib/postgresql/data
chown -R postgres:postgres /var/lib/postgresql/data
chmod -R 775 /var/lib/postgresql/data
volumeMounts:
- name: data
mountPath: /var/lib/postgresql/data
volumes:
- name: data
hostPath:
path: /home/barisein/postgresql
환경설정을 통해서 Pod가 작동할 수 있는 IP 대역을 열어 줘야 함
apiVersion: v1
kind: ConfigMap
metadata:
name: {configmap}
namespace: {namespace}
data:
pg_hba.conf: |
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all trust
# IPv4 local connections:
host all all 127.0.0.1/32 trust
# IPv6 local connections:
host all all ::1/128 trust
# Allow replication connections from localhost, by a user with the
# replication privilege.
local replication all trust
host replication all 127.0.0.1/32 trust
host replication all ::1/128 trust
# pod ip가 할당되는 대역으로 설정
host all all x.x.x.x/x scram-sha-256
TS
- Database is uninitialized and superuser password is not specified.
# Pod 상태 확인
# CrashLoopBackOff
kubectl get pods -A
# 에러 확인
kubectl logs -f pod/{POD} -n {namespace}
# 조치: 환경변수에 비밀번호를 추가
spec:
containers:
- name: {app}
image: {postgres 이미지 pull 정보}
env:
- name: POSTGRES_PASSWORD
value: {비밀번호}
ports:
- containerPort: {port}
imagePullSecrets:
- name: {app}
# 기존 pod 제거(필요한 경우만)
kubectl delete pod/{POD} -n {namespace}
# 실행
kubectl apply -f {yml파일}
- initdb: error: could not change permissions of directory "/var/lib/postgresql/data": Operation not permitted
hostPath로 mount한 경우, Pod의 postgresql이 작동하고 있는, uid와 mount되는 disk의 uid가 일치하지 않기 때문에 발생
alpine에서 uid, gid를 변경하는 방법을 모르기 때문에 host서버의 gid를 생성하고 거기에 postgres 계정을 추가하는 방법으로 권한 문제 해결
# uid와 gid를 host 서버와 일치시켜줘서 권한 문제를 해결함
initContainers:
- name: init
image: busybox:latest
command:
- sh
- "-c"
- |
addgroup -g {gid} postgres
adduser -u {uid} postgres -G postgres -D
mkdir -p /var/lib/postgresql/data
chown -R postgres:postgres /var/lib/postgresql/data
chmod -R 775 /var/lib/postgresql/data
volumeMounts:
- name: data
mountPath: /var/lib/postgresql/data
volumes:
- name: data
hostPath:
path: /home/barisein/postgresql
- An error occurred while setting up the SSL connection.
https://iamgideon.medium.com/configure-a-reverse-proxy-for-postgresql-with-nginx-63c18cefe09
중간 네트웍 설정이 잘못되어 pod까지 명령이 전달되지 못함: 문구 자체만 가지고 ssl 문제라고 생각하면 안됨
Nginx에서 stream proxy로 구성해야 하는데, http proxy로 구성해서 생긴 문제
Ingress 제거하고 Service를 NodePort로 설정해야 함
# stream proxy 설정
stream {
server {
listen {외부 port};
proxy_connect_timeout 60s;
proxy_socket_keepalive on;
proxy_pass {node IP}:{service port};
}
}
- FATAL: no pg_hba.conf entry for host "10.244.0.1", user "xxxxx", database "xxxxxx", no encryption
pg_hba.conf에 접속할 수 있는 IP 대역을 열어 줘야 접속이 가능함
# pod의 IP 확인
kubectl describe pod/{pod} -n {namespace}
# configMap 설정
pg_hba.conf: |
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all trust
# IPv4 local connections:
host all all 127.0.0.1/32 trust
# IPv6 local connections:
host all all ::1/128 trust
# Allow replication connections from localhost, by a user with the
# replication privilege.
local replication all trust
host replication all 127.0.0.1/32 trust
host replication all ::1/128 trust
# 허용 가능한 Pod IP 대역 추가
host all all {POD가 허용되는 IP 대역} scram-sha-256
'Data > PostgreSQL' 카테고리의 다른 글
PostgreSQL merge 구문 (0) | 2024.12.21 |
---|---|
PostgreSQL 시퀀스 만들기 (0) | 2024.12.01 |
PostgreSQL 암호화 확장 모듈 추가 (0) | 2024.08.13 |
PostgreSQL 명령 (0) | 2024.05.04 |
pgAdmin 설정 (0) | 2024.05.04 |