Spring MSA Demo 설치 가이드
1. 개요
본 문서는 gitops 저장소의 /msa-demo 디렉터리 구조를 기반으로 MSA-Demo 애플리케이션을 Kubernetes 클러스터에 설치하는 전체 과정을 안내합니다. Spring MSA Demo는 Project API와 Orchestrator API로 구성된 마이크로서비스 데모 애플리케이션입니다. Kustomize와 Makefile을 활용한 배포 자동화, 환경별 설정, 주요 커스텀 옵션, 운영 팁을 포함합니다.
2. 사전 요구사항
- Kubernetes 클러스터: v1.30 이상
- 로컬 도구: kubectl, kustomize 설치 완료
- 인증서:
cert-manager를 통한 TLS 인증서 발급 및 네임스페이스 간 복제 구성 준비 - DNS 등록: msa-demo.cnapcloud.com
- Keycloak Client 설정: msa client 생성
3. 디렉터리 구조 및 역할
msa-demo/
├── Makefile # 배포 자동화 스크립트
├── kustomize/
│ ├── base/ # 공통 리소스(Deployment, Service 등)
│ │ ├── kustomization.yaml # Base Kustomize 구성
│ │ └── resources/ # 리소스 파일들
│ └── overlays/
│ └── dev/ # dev 환경 설정
│ ├── kustomization.yaml # Kustomize 구성
│ ├── patch/ # 패치 파일들
│ └── resources/ # 추가 리소스 (없음)
- Makefile:
apply,delete,preview등 배포 자동화 명령어 - kustomize/base/: 모든 환경에 공통 적용될 리소스(Deployment, Service 등)
- kustomize/overlays/dev/: dev 환경 특화 설정 (이미지 태그, 패치 등)
4. 설치 단계
4.1. Kustomize 구성
4.1.1. kustomization.yaml 구성
kustomize/overlays/dev/kustomization.yaml에서 namespace, resources, patches 등 지정
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
namespace: msa
resources:
- ../../base
replicas:
- count: 1
name: orchestrator-api
- count: 1
name: project-api
images:
- name: harbor.cnapcloud.com/library/spring-msa-demo
newName: harbor.cnapcloud.com/library/spring-msa-demo
newTag: 2f96287
patches:
- path: ./patch/project-env-patch.yaml
target:
kind: Deployment
name: project-api
- path: ./patch/orchestrator-env-patch.yaml
target:
kind: Deployment
name: orchestrator-api
secretGenerator:
- name: keycloak-secret
literals:
- realm-url=https://keycloak.cnapcloud.com/realms/cnap
- client-id=msa
- client-secret=UVxHOjG05rMLe4CLwkjrlPM9czCjKT4f
4.1.2. 패치 파일 설정
환경별 설정을 위한 패치 파일들:
patch/project-env-patch.yaml: Project API 환경 변수 설정patch/orchestrator-env-patch.yaml: Orchestrator API 환경 변수 설정
4.2. 배포 프로세스 (Makefile 활용)
Step 1: Namespace 생성
make namespace DEPLOY_ENV=dev
Step 2: 배포 미리보기
make preview DEPLOY_ENV=dev
Step 3: 배포 실행
make apply DEPLOY_ENV=dev
Step 4: 배포 상태 확인
kubectl get pods -n msa -w
5. 설치 후 검증
5.1. 리소스 상태 확인
kubectl get pods,svc,ingress -n msa
확인 사항:
- Pod 상태:
orchestrator-api-*: Running (Orchestrator API)project-api-*: Running (Project API)
- Service 상태:
orchestrator-api: ClusterIPproject-api: ClusterIP
- Ingress 상태:
msa-demo-ingress: Ingress 리소스 확인
5.2. API 상태 확인
브라우저에서 project, orchestrator 서비스에 대해 swagger-ui에 조회합니다.
- http://msa-demo.cnapcloud.com/project/swagger-ui/index.html
- http://msa-demo.cnapcloud.com/orchestrator/swagger-ui/index.html
이 애플리케이션에 대한 자세한 구성 내역은 다음 블로그를 참고합니다.
6. 운영 및 Troubleshooting
6.1. Pod가 Running 상태가 아닌 경우
kubectl get pods -n msa
kubectl describe pod <pod명> -n msa
kubectl logs <pod명> -n msa
주요 원인:
- 이미지 풀 실패 → Harbor 레지스트리 접근 권한 확인
- 환경 변수 설정 오류 → 패치 파일 확인
- 리소스 부족 → 노드 리소스 확인
6.2. API 호출 실패
- Service 확인:
kubectl get svc -n msa - Endpoint 확인:
kubectl get endpoints -n msa - 로그 확인:
kubectl logs deployment/project-api -n msa
6.3. Istio 관련 문제
- Sidecar injection 확인:
kubectl get pods -n msa -o jsonpath='{.items[*].spec.containers[*].name}' - Istio proxy 로그:
kubectl logs <pod명> -c istio-proxy -n msa
7. 배포 제거
7.1. MSA-Demo 삭제
make delete DEPLOY_ENV=dev
7.2. Namespace 삭제 (선택사항)
kubectl delete namespace msa
주의: Namespace를 삭제하면 모든 데이터가 영구 삭제됩니다.
8. 부록: 최종 체크리스트
설치 전:
- Kubernetes 클러스터 준비 (v1.30+)
- kubectl, kustomize 설치
- Keycloak msa client 설정 완료
- DNS 설정 완료
설치:
- kustomization.yaml 구성 완료
- 패치 파일 설정 완료
- make namespace 실행
- make preview 실행 및 확인
- make apply 실행
검증:
- 모든 Pod이 Running 상태
- Service 생성 확인
- API 응답 확인