
안녕하세요. 저는 홈 클러스터를 운영하고 있는데요. 클러스터의 서비스를 공개 도메인으로 접속할 수 있도록 metallb와 ingress-nginx 설정을 하고 있습니다. 최근 도메인이 만료되어서, 갱신 과정을 포스팅하게 되었습니다. 도메인은 그냥 구매하면 끝이지만, 기존 도메인을 사용하는 서비스들을 옮기는 일은 번거로운 일입니다. 이 때 IaC로 Ingress를 설정해두었다면, 일괄변경을 통해서 도메인을 갱신할 수 있는데요. 저는 git에 저장해둔 코드와 ArgoCD 그리고 약간의 트러블 슈팅으로 깔끔하게 도메인을 전환하였습니다. 대표적인 GitOps 도구인 ArgoCD와 IaC를 이용해서 간단히 도메인을 전환하는 사례를 소개해드립니다.
1. 도메인을 옮기는 이유
이번 갱신으로 기존 도메인이 아닌 다른 도메인으로 이전하게 되었습니다. 이유는 크게 2가지 입니다.
- 가격: 갱신 비용보다 신규 도메인을 이용하는 것이 더 저렴하기 때문입니다. 물론 SEO를 생각하면, 고정 도메인을 꾸준히 사용하는 것이 좋습니다. 저는 아직 개인 브랜드가 성숙하지 않다고 판단하여, 2달러 정도의 저렴한 도메인으로 옮기게 되었습니다.
- API 제어: 기존 GoDaddy의 DNS API 정책이 바뀌어서, external-dns와 같은 자동화 도구를 쓰기 어렵게 되었습니다. 따라서 API를 잘 지원하는 Porkbun이라는 업체로 변경하였습니다. external-dns 적용하는 사례는 후속 포스팅으로 공유드리겠습니다.
이벤트 도메인을 이용하면 몇 천원 혹은 몇 달러에 저렴하게 웹 서비스를 만들 수 있는데 갱신비용은 10-20달러로 상대적으로 비쌉니다. 이번은 jyje.online 이라는 주소를 골랐습니다. 이번 도메인으로는 SEO를 잘 쌓아서, 저의 커리어와 함께 꾸준히 성장하는 도메인으로 삼고 싶습니다!
2. 일단 도메인을 삽니다
회사 업무였다면 AWS의 Route 53 같이 클라우드 서비스의 도메인 서비스를 쓰고 있습니다. 개인 도메인은 비용이 저렴한 업체들을 여기저기 옮겨다니고 있습니다. 전에는 가비아, GoDaddy 등 메이저 업체를 사용했었습니다. 이번에 결제한 Porkbun은 마이너한 해외 도메인 업체입니다. 생소했지만, 국내에서 사용하는 사례를 많이 보아서 저도 여기서 구매를 했습니다.
도메인을 구매하고 필요한 레코드를 작성합니다. 저는 iptime의 DDNS 기능을 이용해서 IP를 동적으로 관리하고 있습니다. 여러분은 고정 IP 혹은 DDNS를 이용하시면 됩니다. 그리고 기존에 사용하던 서브도메인에 대한 CNAME을 동일하게 생성해줍니다.
기존 도메인은 아직 지우지 않고 다음 단계로 넘어갑니다.
향후 이 작업은 쿠버네티스의 ingress controller와 external-dns를 결합하여 편하게 자동화할 수 있습니다.
3. 이제 도메인을 전환합니다
저는 GitHub에 홈 클러스터에 대한 IaC (Infrastructure as a Code) 리포지토리를 구성하고 있습니다. 홈 클러스터의 ArgoCD가 이 리포지토리를 보고 항상 리소스를 동기화 하고 있습니다. 심지어 자기자신까지 동기화 하고 있습니다 (참조: Self Managed Argo CD -- App of Everything). 잘못 사용하면 ArgoCD가 복구 불능으로 깨질 수 있어 숙련된 DevOps 엔지니어에게 권장하는 기법입니다. 이를 잘 다룰 수 있으면 클러스터를 생성할 때, 클러스터 환경구성을 E2E로 자동화하기 쉽습니다. 참고하세요!
Self Managed Argo CD — App Of Everything
Argo CD one of the most popular continues deployment tools used in Kubernetes. It is very simple to use and quite powerful. Personally, it is the first tool in my mind when I think of Kubernetes…
medium.com
그럼 본론으로 돌아오겠습니다. 저의 홈클러스터에는 ingress 처리된 모든 주소들을 IaC로 관리하고 있습니다. 예를 들면 OpenWebUI는 이렇게 구성하고 있습니다.
이제 코드 편집기에서 도메인을 전환하겠습니다. 저는 `jyje.live`에서 `jyje.online`로 이전합니다. 그럼 다음과 같이 전환할 수 있습니다.
이렇게 전환하면 IaC 리포지토리의 문서, CI 워크플로우, Ingress URL 모두 전환될 것으로 기대합니다. 특히 GitOps를 주관하는 ArgoCD도 `cd.app.jyje.live`에서 `cd.app.jyje.online`으로 주소가 바뀔 예정입니다. 그럼 지금 클러스터의 Ingress 목록을 조회하겠습니다.
이제 변경사항을 적용해 보겠습니다. App of Apps 패턴을 주관하는 Argo CD의 `apps` 어플리케이션을 동기화 하겠습니다 (공식 컨벤션이 아닌 제가 붙인 이름입니다).
저는 UI에서 sync+refresh를 선택했습니다. CLI를 이용해서도 가능합니다.
argocd app sync apps
동기화한 직후의 모습입니다. ArgoCD를 제외한 다른 리소스들은 빠르게 변경이 되었습니다.
동기화 하고 10초 후의 모습입니다. ArgoCD까지 주소가 변경되었습니다.
모든 리소스가 잘 변경된 것은 아니었습니다. 정상작동하던 다음 Pod들이 오류를 일으켰는데요.
이유는 함께 변경된 nodeSelector에 있었습니다. IaC로 노드 레이블까지는 관리하고 있지 않았기 때문에, 변경된 레이블 주소로 인해 PoD를 스케줄링할 수 없었던 이슈가 생겼습니다.
그럼 현재 노드의 정보를 확인해볼까요?
노드 레이블을 도메인과 같은 규칙으로 사용하고 있었기 때문에, 이번 도메인 변경으로 인해 설정 충돌이 일어났습니다. 따라서 노드 레이블을 정정해줍니다. 향후 노드 레이블도 IaC로 관리하면 좋겠네요.
그리고 아까 Pending 상태였던 Pod의 정보를 다시 확인해봅니다.
모든 Pod가 정상적으로 동직하고 있습니다. 여러 서비스가 변경된 도메인에서 잘 접속되는 지 확인해보겠습니다.
먼저 데모용 서비스인 LLM을 확인해보겠습니다. 좀 전의 Pending 된 Pod의 이슈가 해결되어서 LLM+RAG 서비스도 잘 접속됩니다.
가장 중요한 ArgoCD도 확인해볼까요? Self-managed ArgoCD도 설정 충돌없이 잘 이전 되었습니다.
이렇게 도메인 이전을 완료할 수 있었습니다. 이번 이전을 하면서 노드 레이블도 함께 GitOps+IaC로 관리하면 좋다는 팁을 얻었습니다.
읽어주셔서 감사합니다!
'Home Clusters' 카테고리의 다른 글
🍓 Raspberry Pi CM5: 2024년 최신 미니컴퓨팅 모듈을 소개합니다 (3) | 2024.11.27 |
---|
어제보다 오늘 더 공부 잘하는 코딩냥이. 어제보다 오늘 더 일 잘하는 코딩냥이.
포스팅이 좋았다면, 오류를 발견했다면, 더 좋은 아이디어가 있다면 댓글 부탁드립니다!