쿠버네티스 설치는 이전에 포스팅을 해놨는데요. 최근에 쿠버네티스 설치방법이 바뀌어서 많은 혼란이 있었습니다.. 마침 무찌클러스터 프로젝트 시작하려던 참이었거든요. 구글링해도 최근방법은 잘 안나올거에요. 저또한 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도 그려놨습니다~
이러한 메세지가 제 휴대폰으로 실시간으로 옵니다. 딱봐도 .env파일을 탈취하려고 하거나, 관리자권한을 탈취하기위한 해킹요청이죠..ㅠㅠ 진짜 엄청 많이옵니다.. 혹시 직접 배포하시는분들 조심하셔야합니다 하루에도 수십개가 옵니다 ㄷㄷ
security bot이 하는 역할이 여러가지 있지만 한가지로 이런 역할을 해주고있어요. 직접 코딩을 해서 만들었습니다.
최종 아키텍쳐
지금까지 설명드린 그림들을 전부 합쳐봤는데요~ 이렇게 클러스터를 운영하고 있답니다ㅎㅎㅎ
글자가 안보일까봐 클러스터 배경을 검은계열로 했는데 무찌가 먹구름이 되었네요ㅋㅋㅋ
Conclusion
온프레미스로 직접 서버를 구축하는걸 평소 항상 해보고싶었어서 재밋게 구축했네요.
현재 실제로 운영되는 클러스터이고 제 포트폴리오의 애플리케이션 대부분 무찌클러스터에서 운영되고 있습니다. 이러한 이유로 자세하게 어떤식으로 구성을 했고 보안설정을 어떻게 하였는지는 공개가 어렵네요 ㅠㅠ 아직까지도 혹시 여러 공격을 받아서 무찌 클러스터가 취직전에 터질까 조마조마합니다 ㅠㅠㅠ
사실 네트워크 국비교육과정을 들은 이유도 온프레미스로 직접 서버를 만들어보고 싶어서 들어갔던건데요. 파이널프로젝트때 솔직히 온프레미스로 만들어보고 싶었는데 aws수업이다보니 aws로 아빠또갈까 프로젝트를 만들었답니다 ㅎㅎ 이번기회에 직접 온프레미스 서버를 구축할수 있어서 좋은 경험이었어요.
그리고 추가적으로 쿠버네티스로 서버를 운영하면 보안적으로도 좋고 유지보수로써도 매우 좋습니다. 설치가 어려울뿐 저같은 코찔이도 이렇게 활용할 수 있는 기술이니 모르시는 분들은 배우시는걸 추천드립니다~!