Skip to content

Kind 기반 Kubernetes 클러스터 구성

1단계. 시스템 준비

sudo ufw disable
sudo hostnamectl set-hostname dam-a
sudo apt update && sudo apt upgrade -y
sudo apt install -y curl wget gnupg lsb-release git
#OpenText DAM을 Kubernetes 위에 설치하는 경우에도 스왑을 끄는 것이 권장됩니다.
#swapon --show
#sudo swapoff -a
#sudo nano /etc/fstab     # swap 관련 주석처리

2단계. Docker 설치

sudo apt install -y docker.io
sudo systemctl enable --now docker
sudo usermod -aG docker ecmadmin

로그아웃 후 다시 로그인 (docker 권한 적용)


3단계. Helm 설치

curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash


3단계. Kind 기반 Kubernetes 클러스터 구성


# 기존 클러스터 삭제
kind delete cluster --name ecm-cluster  


# kind-config.yaml
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
name: ecm-cluster
nodes:
  - role: control-plane
    extraPortMappings:
      - containerPort: 30996  # Ingress HTTPS NodePort
        hostPort: 443         # 외부 443과 연결
        protocol: TCP
      - containerPort: 32472  # Ingress HTTP NodePort
        hostPort: 80
        protocol: TCP

[참고] Kubernetes 클러스터 명령어

kind create cluster --config kind-config.yaml
# 클러스터 정보 확인
kubectl cluster-info --context kind-ecm-cluster

# 노드 확인
kubectl get nodes

# 파드 상태 확인 (kube-system 네임스페이스)
kubectl get pods -n kube-system

4단계. Ingress Controller 설치 (Helm)

ingress-nginx repo를 Helm에 등록

helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update

values-ingress.yaml

controller:
  admissionWebhooks:
    enabled: true
  service:
    type: NodePort
    nodePorts:
      http: 32472
      https: 30996
  config:
    allow-snippet-annotations: "true"

Ingress Controller 설치

helm uninstall ingress-nginx -n ingress-nginx
kubectl delete ns ingress-nginx
helm install ingress-nginx ingress-nginx/ingress-nginx -n ingress-nginx --create-namespace -f values-ingress.yaml

kubectl -n ingress-nginx get deployment ingress-nginx-controller -o yaml | grep allow-snippet 결과:

- --allow-snippet-annotations=true

→ Ingress Controller 자체를 설치하는 명령입니다.
→ 이 단계에서는 Ingress Controller Pod, Service 등만 생성되고, 어떤 TLS secret이나 실제 Ingress 리소스는 아직 관여하지 않습니다. →

cert-manager 설치

kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.13.2/cert-manager.yaml

[참고] Ingress Controller 명령어

# Ingress Controller 수정
helm upgrade --install ingress-nginx ingress-nginx \
  --repo https://kubernetes.github.io/ingress-nginx \
  --namespace ingress-nginx \
  --set controller.service.type=NodePort \
  --set controller.service.nodePorts.http=32472 \
  --set controller.service.nodePorts.https=30996 \
  --set controller.config.allow-snippet-annotations=true

# Ingress Controller 삭제  
helm uninstall ingress-nginx -n ingress-nginx
kubectl delete ns ingress-nginx --wait

[참고] 포트상태 조회 및 수정

조회
kubectl get svc -n ingress-nginx                      NAME                                 TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)                      AGE
ingress-nginx-controller             NodePort    10.96.107.89   <none>        80:32472/TCP,443:30996/TCP   7s
ingress-nginx-controller-admission   ClusterIP   10.96.147.98   <none>        443/TCP                      7s

helm upgrade --install ingress-nginx ingress-nginx \
  --repo https://kubernetes.github.io/ingress-nginx \
  --namespace ingress-nginx \
  --set controller.service.type=NodePort \
  --set controller.service.nodePorts.http=32472 \
  --set controller.service.nodePorts.https=30996 \
  --set controller.config.allow-snippet-annotations=true


# Ingress Controller 설정에서 `configuration-snippet` 사용이 **보안 이유로 비활성화**된 상태

5단계. 네임스페이스 생성

kubectl create namespace ecm

[참고] 네임스페이스 확인 방법

현재 클러스터에 어떤 네임스페이스가 있는지 확인하려면:

kubectl get namespaces


출력 예시:

NAME              STATUS   AGE
default           Active   10d
kube-system       Active   10d
kube-public       Active   10d
ingress-nginx     Active   1d
ecm              Active   1d
dam               Active   1d

[참고] 네임스페이스 안 리소스 확인

특정 네임스페이스(ecm) 안에 뭐가 있는지 보려면:

# 모든 리소스 보기
kubectl get all -n ecm

# Secret만 보기
kubectl get secret -n ecm

# ConfigMap만 보기
kubectl get configmap -n ecm

6단계. Ingress 리소스 생성/업데이트

# ecm-ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ecm-ingress
  namespace: ecm
spec:
  ingressClassName: nginx      # deprecated annotation 대신 사용
  tls:
    - hosts:
        - ecmsvr25.pentasystem.kr
      secretName: tls-secret
  rules:
    - host: ecmsvr25.pentasystem.kr
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: ecm-service
                port:
                  number: 80



kubectl apply -f ecm-ingress.yaml

7단계. DB 설치

sudo apt install -y postgresql
sudo -u postgres psql
CREATE USER otdsuser WITH PASSWORD 'SystemAdmin@1234';
CREATE DATABASE otdsdb OWNER otdsuser;
GRANT ALL PRIVILEGES ON DATABASE otdsdb TO otdsuser;

\q
psql -h localhost -U otdsuser -d otcsdb

sudo -u postgres psql
drop DATABASE otdsdb ;
drop user otdsuser;
drop DATABASE otiv ;
drop user otiv;
drop DATABASE ac ;
drop user ac;

1) 접속 중인 세션 확인
SQL
SELECT pid, usename, application_name, client_addr
FROM pg_stat_activity
WHERE datname = 'otdsdb';
2) 모든 세션 강제 종료
SQL
SELECT pg_terminate_backend(pid)
FROM pg_stat_activity
WHERE datname = 'otdsdb';

\q


[참고] 2_PostgreSQL 설치 .md