한국외대 클러스터에 Spring 프로젝트 배포하기

Kychann·2025년 4월 18일
post-thumbnail

📦 Spring Boot 애플리케이션을 Kubernetes + Ingress + HTTPS(NodePort)로 배포하기

🛠️ 사용한 기술 스택

  • Spring Boot
  • Kubernetes
  • Ingress NGINX Controller
  • cert-manager + Self-signed certificate
  • NodePort (HTTPS 32710)
  • Helm
  • curl, openssl 등

🧗‍♂️ 시행착오들

❌ 1. Pod 할당 방식 (실패)

  • 처음엔 단일 Pod를 발급받아 Spring 서버를 띄우려 했지만…
  • 22번 포트만 열려 있어 SSH 외에 외부 접속이 불가능!
  • 실습용 Pod였기 때문에 서비스 목적에는 부적합했다.

✅ 2. Deployment 방식 (성공)

  • Master node 접근 권한을 활용해 직접 Kubernetes에 Deployment 생성!
  • NodePort를 통해 외부에서 접근 가능한 서비스로 변경.

🎯 프로젝트 목표

한국외대 컴퓨터공학과의 클러스터 서버를 활용해 백엔드(Spring Boot) 서비스를 직접 Kubernetes 위에서 배포하고, 외부에서 HTTPS로 접근할 수 있도록 설정하는 것!


🛠️ 실제로 구성한 구성요소들

1️⃣ Metalib으로 외부 IP 할당

apiVersion: metallb.io/v1beta1
kind: IPAddressPool
...
addresses:
  - 203.253.70.241-203.253.70.250
  • L2Advertisement도 함게 설정!

2️⃣ Spring Boot Deployment & NodePort

apiVersion: apps/v1
kind: Deployment
metadata:
  name: cpu1-std-202001444
spec:
  ...
  containers:
    - name: springboot-app
      image: yunseo0219/springboot-app:1.0
      ports:
        - containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
  name: cpu1-std-202001444
spec:
  type: NodePort
  selector:
    app: cpu1-std-202001444
  ports:
    - port: 8080
      nodePort: 30117

3️⃣ Ingress + TLS

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: hufspetition-ingress
  annotations:
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
spec:
  ingressClassName: nginx
  tls:
    - hosts:
        - api.hufspetition.hufs.ac.kr
      secretName: hufspetition-selfsigned-tls
  rules:
    - host: api.hufspetition.hufs.ac.kr
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: cpu1-std-202001444
                port:
                  number: 8080
  • 인증서는 openssl을 통해 self-signed cert 생성 후 Secret으로 등록.

    왜 Let's Encrypt를 쓸 수없었는지는 다음 포스트를 봐주세용


4️⃣ Ingress Controller 설치 (Helm)

helm uninstall nginx-ingress  # 재설치 전 제거

helm install nginx-ingress ingress-nginx/ingress-nginx \
  --set controller.nodeSelector."kubernetes\.io/hostname"=cpu-node1 \
  --set controller.service.type=NodePort \
  --set controller.service.nodePorts.http=32618 \
  --set controller.service.nodePorts.https=32710 \
  --set controller.hostPort.enabled=true \
  --set controller.publishService.enabled=true

🧪 테스트

profile
어,, 저 아닌데요?

0개의 댓글