project/selfProject

Personal Project - MuzziCluster

부엉이사장 2025. 1. 24. 08:31
Introduction
안녕하세요? Nurd Worker입니다! 반갑습니다.😊
이번에 소개해드릴 프로젝트는 Muzzi Cluster 프로젝트 입니다!

무찌 클러스터 프로젝트는 온프레미스 클러스터를 직접 구현한 프로젝트입니다.
당연히 네트워크와 쿠버네티스, 인프라가 주제입니다ㅎㅎㅎ

예전에 사용했던 오래된 노트북으로 직접 클러스터를 만들었습니다~(c타입 포트도 없는 오래된 ㅎㅎㅎ)
부모님 드린다고 했는데 안가지신다고하셔서 묵혀뒀다가 이번 기회에 활용해봤네요~
나름 관리는 열심히했어서 부품도 업그레이드해서 서버용으로는 문제없이 돌아갑니다ㅋㅋ

현재 세 가지 어플리케이션이 배포되어있는데요~
포트폴리오와 acsap, rememberme프로젝트모두 무찌클러스터에서 배포한거랍니다~
참고로 무찌클러스터는 영상이나 깃허브 자료가없어요~ 직접 배포한 어플리케이션에 접속하시면 돌아가는게 확인가능하시니까요.

그럼 재밋게 읽어주세요~

 

왜 무찌클러스터인가요?

 
제 동생이 하나 있는데요. 무찌라는 강아지입니다. 
저는 쿠버네티스를 공부할때마다 클러스터는 구름?같은 이미지로 생각을 하게되요.

 

'k8s' 카테고리의 글 목록

지극히 이기적인 개발 블로그입니다.

jacobowl.tistory.com

현재 이 블로그의 쿠버네티스 관련 포스팅들을 보면 구름이 가끔 그려져 있답니다 ㅎㅎ
근데 구름? 하면 무찌 얼굴을 닮았죠? 그래서 무찌클러스터 프로젝트라고 이름짓게 되었습니다~
 
 
 
 

기술스택

 
무찌클러스터는 당연히 쿠버네티스로 구축했습니다~ 그리고 많은 어플리케이션 리소스를 쿠버네티스 전용 iac 도구헬름으로 배포했어요.
 
모니터링을 하기위해서 grafana, prometheus를 구축했고, 로그 모니터링을 위해 loki도 겸했습니다.
 
이미지 스토리지도 따로 구축하였습니다. harbor를 사용했구요
 
데이터베이스는 몽고디비와 sql(비밀)디비를 설치해놨습니다. rememberme 프로젝트의 데이터베이스가 현재 무찌클러스터에서 데이터를 보관하구있어요.
 
또한 슬랙알람을 활용하여 클러스터의 알람을 연결했답니다 ^^
 
 
 
 

쿠버네티스 설치

 

 

VMware ubuntu 환경에서 k8s환경 구축하기.(2024 11월 기준 가능)

# 바뀌어서 설치가 안되는부분만 최상단에 적음!! 시간이없어서 정리는 못하나, 바뀐부분만 적용하면 k8s클러스터 설치가능합니다. 2024년 9월 포스팅인데 현재 2024/11월 기준 9월에 포스팅한 방법

blog.nurd.work

쿠버네티스 설치는 이전에 포스팅을 해놨는데요.
최근에 쿠버네티스 설치방법이 바뀌어서 많은 혼란이 있었습니다.. 마침 무찌클러스터 프로젝트 시작하려던 참이었거든요.
구글링해도 최근방법은 잘 안나올거에요. 저또한 k8s클러스터를 수없이 많이 구축해봤지만(컴퓨터가 들었다놓으면 전원이 나가요ㅋㅋ) 최근업데이트때문에 많은 고생을 했습니다 ㅠ
위 포스팅은 해당 업데이트된 내용을 찾아서 추가했던 포스팅입니다 ㅠㅠ 정말 이렇게 설치가 어려울줄은.. 몰랐어요
 
참고로 쿠버네티스는 많은 분들이 어렵다고 생각하시는데, 개인적으로 가장 큰이유가 설치때문이라고 생각하는 코찔이입니다..
 
 
 

앱들은 어떻게 배포가되나요?

 

일단 그림처럼 무찌클러스터에는 앱서비스 전용 인그레스를 진입점으로 잡아놨어요.
그리고 트래픽이 오면 각각의 네임스페이스에 바인딩된 external name서비스에 연결을 설정해놨습니다.
때문에 제 배포된 프로젝트들의 링크에 접속하면 인그레스가 트래픽을 구분하여 해당 리소스 네임스페이스에 전달해줍니다~
 
 
 

각각 앱서비스들의 리소스는 어떻게 생겼나요?

 
물론 앱마다 서로 조금씩 리소스 차이가 있지만 앱서비스들의 리소스는 대략적으로 저렇게 생겼답니다.
서비스가 일단 트래픽을 받구요. 이 서비스는 아까 각 external name 서비스들이랑 바인딩이 되었으니까 트래픽을 받게되죠.
그리고 컨트롤러가 서비스 역할을 하는 pod들을 관리해줍니다.
또한 오토스케일링을 설정해둬서 pod가 트래픽이 많으면 자동으로 오토스케일링되게 설정해놨습니다.
그리고 해당 앱 네임스페이스마다 network policy를 설정해둬서 보안을 신경썼어요.
 
그럼 위에 ingress 트래픽과 각 앱 서비스는 이렇게 되겠죠?

 
각 앱서비스에 맞는 네임스페이스에 인그레스 트래픽이 전달이되어 세가지 앱을 운영할 수 있게 된거랍니다 ㅎㅎ
 
 
 
 
 

기타 인프라

 
저는 모니터링이미지 스토리지, 그리고 데이터베이스를  모두 헬름으로 깔았어요~
 
 

모니터링
grafana, prometheus, loki

 
저는 모니터링 도구grafana, prometheus, loki를 활용했는데요~
 
 

grafana 대시보드

 

예를들어 node쪽 리소스를 보여드리자면, 저렇게 리소스를 한눈에 볼 수 있게 대시보드를 만들었습니다.
쿼리짜는게 생각보다 너무 어렵더라구요 ㅠㅠ 아직도 잘못짜겠네요..
 

이렇게 pod별 리소스 사용량도 모니터링중인데 현재 가장 많이 잡아먹고 있는 리소스는 프로메테우스입니다. 하긴 계속 클러스터를 감시해야하니 바쁠수밖에 없죠.
리소스들을 모두 보여드리고싶지만 보안적으로 위험할것같아서 전부 올려드리지는 못하겠네요 ㅠ
저랑 친하신분들은 저희집에 초대해서 직접 보여드릴게요~(무찌가 엄청 짖을텐데 무서워마세요..)
 

loki

 

그라파나는 원래 리소스 모니터링 전용 도구입니다. 전 로그모니터링을 하고싶었어요.

이전 rememberme 프로젝트 팀원분은 인프라로 취직하셨는데 kibana를 쓰시더라구요.
전 그라파나에 loki를 연동하여서 로그 모니터링을 구성했습니다.
예시로 사진처럼 로그가 찍히는데요. 저렇게 나쁜 요청들도 많이 온답니다..
 
참고로 로키는 한국에서는 많이들 사용을 안하셔서 영문으로 구글링해서 정보를 얻느라 좀 애먹었습니다 ㅠㅠ
 
 

slack

또한 프로메테우스랑 슬랙을 연결하여 클러스터에 이상이 있을시 알람설정을 해놨습니다.

사실 설정하는게 너무어렵기도하고 전 슬랙을 별로 안좋아해요.
항상 알람이 늦게오더라구요.. 제가 잘 못만져서 그런걸수도 있지만요.
 
 
 

이미지 스토리지 - harbor

하버이미지 스토리지입니다. 레지스트리라고도 합니다.
이미지 저장용으로 사용하고있는데요~
도커허브가 유료로 되었다는 소식을 들었어서 한번 해볼까? 하고 따로 만들었습니다.
하버가 보안을 많이 신경써야하니, 이것저것 설정할게 많더라구요.. 

 



사진은 일부분만 보여드렸습니다 ㅠㅠㅠ 보안상 위험할것같아서요.
이미지 저장이 주 목적이지만 전 헬름차트를 보관용으로 쓰고있습니다.
나중에 또다시 클러스터를 구축한다면 구축해놓은 하버를 사설레지스트리로 사용할 수 있겠죠~
 
 
 
 

데이터베이스들~

 
데이터베이스 또한 무찌클러스터에 배포했습니다.
데이터베이스를 클라우드에서 사용해보신 분들은 다들 아시겠지만, 매우매우 가격이 비쌉니다 ㅠㅠ
물론 데이터를 안전하게 보관해주니 장점이 크지만 저같은 코찔이들은 포트폴리오로 쓰려고 데이터베이스를 하나 이용하려해도 최소 월 5만원이상이나 하니 배보다 배꼽이 크죠 ㄷㄷ
 
그래서 전 따로 무찌클러스터에 데이터베이스를 만들었어요.
어떤 데이터베이스들인지는 하나하나 자세히 설명 못드리지만, 공개한 몽고디비는 현재 rememberme 서비스에서 데이터베이스로 사용하고 있습니다~
 

그라파나에서 이렇게 체크를 하고있습니다 ㅎㅎ
 
 
 
 
 

앱과 기타 인프라 아키텍쳐

 
이제 그래도 좀 인프라 같죠?ㅋㅋ
글자가 작아서 잘 안보이시곘네요ㅠㅠ
암튼 공개가능한 인프라들에 대해서 이렇게 아키텍쳐가 그려진답니다~

참고로 모든 인프라들이 저장공간도 사용하기떄문에 우측상단에 persistent volume도 그려놨습니다~
 
 
 
 

Security Bot

 
클러스터에서 보안역할을 하는 봇을 만들어뒀습니다.
 
모든 기능을 말씀드리기는 어렵지만, 한가지만 예시를 드려드리자면, 

Time: 2025. 1. 23. 오후 5:42:59
IP: 142.93.32.68
User-Agent: Mozilla/5.0 Keydrop
Host: 123.456.123.456
Path: /.env
Status: 400

Time: 2025. 1. 23. 오후 7:49:47
IP: 147.185.133.122
User-Agent: -
Host: _
Path: -
Status: 400

Time: 2025. 1. 23. 오후 8:23:25
IP: 20.118.69.178
User-Agent: Mozilla/5.0 zgrab/0.x
Host: 123.456.123.456
Path: /manager/html
Status: 400

Time: 2025. 1. 24. 오전 1:12:40
IP: 162.158.170.136
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36
Host: nurd.work
Path: /wordpress/wp-admin/setup-config.php
Status: 200

이러한 메세지가 제 휴대폰으로 실시간으로 옵니다.
딱봐도 .env파일을 탈취하려고 하거나, 관리자권한을 탈취하기위한 해킹요청이죠..ㅠㅠ
진짜 엄청 많이옵니다.. 혹시 직접 배포하시는분들 조심하셔야합니다 하루에도 수십개가 옵니다 ㄷㄷ
 
security bot이 하는 역할이 여러가지 있지만 한가지로 이런 역할을 해주고있어요.
직접 코딩을 해서 만들었습니다.
 
 
 

최종 아키텍쳐

 
지금까지 설명드린 그림들을 전부 합쳐봤는데요~ 
이렇게 클러스터를 운영하고 있답니다ㅎㅎㅎ
 
글자가 안보일까봐 클러스터 배경을 검은계열로 했는데 무찌가 먹구름이 되었네요ㅋㅋㅋ
 
 
 
 


Conclusion
온프레미스로 직접 서버를 구축하는걸 평소 항상 해보고싶었어서 재밋게 구축했네요.

현재 실제로 운영되는 클러스터이고 제 포트폴리오의 애플리케이션 대부분 무찌클러스터에서 운영되고 있습니다.
이러한 이유로 자세하게 어떤식으로 구성을 했고 보안설정을 어떻게 하였는지는 공개가 어렵네요 ㅠㅠ 
아직까지도 혹시 여러 공격을 받아서 무찌 클러스터가 취직전에 터질까 조마조마합니다 ㅠㅠㅠ

사실 네트워크 국비교육과정을 들은 이유도 온프레미스로 직접 서버를 만들어보고 싶어서 들어갔던건데요.
파이널프로젝트때 솔직히 온프레미스로 만들어보고 싶었는데 aws수업이다보니 aws로 아빠또갈까 프로젝트를 만들었답니다 ㅎㅎ 이번기회에 직접 온프레미스 서버를 구축할수 있어서 좋은 경험이었어요.

그리고 추가적으로 쿠버네티스로 서버를 운영하면 보안적으로도 좋고 유지보수로써도 매우 좋습니다. 설치가 어려울뿐 저같은 코찔이도 이렇게 활용할 수 있는 기술이니 모르시는 분들은 배우시는걸 추천드립니다~!

이상 무찌클러스터 프로젝트였습니다 ^^

 

'project > selfProject' 카테고리의 다른 글

Personal Project - NurdreamDek  (0) 2025.01.21
Personal Project - ACSAP  (0) 2025.01.20
Personal Toy Project - mumu tv  (0) 2023.11.14