chevron_right 목차
서론
쿠버네티스(K8s) 클러스터를 구성하려면 네트워크 설정이 중요하다. 특히 VPN 위에 클러스터를 구축할 때는 몇 가지 주의할 점이 있다. 이번 글에서는 Tailscale을 사용해 쿠버네티스 클러스터를 구축하는 방법과 주의할 점들을 공유한다.
왜 Tailscale을 사용했는가
Tailscale은 개인 사용 수준으로는 무료로 사용할 수 있고, 보안과 방화벽 설정 등에 유리하다. 나는 K8s 구축에 “월 유지비 1$ 미만으로 마참내 안죽는 on-premise 인프라를 만들었다.”라는 글을 참고해 구성했는데, 여기서 Tailscale을 사용했기에 선택했다.
주의할 점
기기 이름 말고 IP 주소를 사용하자
Tailscale을 사용하면 DNS를 통해 기기 이름으로 접근할 수 있으나, DNS 설정이 복잡해질 수 있기 때문에 IP 주소를 사용하자.
node-ip를 고정하자
노드 IP를 지정하지 않으면 Tailscale이 아닌 다른 네트워크 인터페이스를 사용할 수 있어 연결이 실패할 수 있다. 따라서 kubelet에 --node-ip
argument를 주어 Tailscale 내의 IP 주소를 지정하자. 나는 /etc/default/kubelet
파일에 KUBELET_EXTRA_ARGS=--node-ip=[tailscale ip]
를 추가했다.
기기 성능에 주의하자
cilium connectivity test
를 실행할 때, RPI4에서 실패하는 경우를 보았다. 이때 top
명령어로 확인해보니 tailscaled 프로세스가 대부분의 CPU를 사용했다. 노드 성능을 고려하자.
Tailscale 포트를 열어두자
Tailscale은 굳이 포트를 열어두지 않아도 동작하지만, 좋은 성능을 위해 41641
포트를 열어두거나 포워딩해두자. tailscale status
명령어를 사용하면 직접 연결되었는지, 또는 relay를 사용하고 있는지 확인할 수 있다. 좋은 네트워크 성능을 위해서는 직접 연결이 필요하다. 포트만 열어두면 알아서 인식하므로 별도의 설정은 필요하지 않다. K8s를 위한 포트는 포워딩해둘 필요가 없는 것이, VPN을 통해 연결되기 때문이다. Tailscale만 구성해 두면, SSH 포트조차 닫아두어도 되고, 보안 상으로도 좋다.
인용하기
@misc{devngho202520250816k8sheadache,
author = {Yu, Dongho},
title = {Tailscale 위에 쿠버네티스 클러스터 구축하기},
howpublished = {\url{https://ngho.dev/posts/20250816-k8s-headache}},
year = {2025},
month = {aug},
note = {Accessed: 2025-08-16}
}
APA 유동호. (2025년 8월 16일). Tailscale 위에 쿠버네티스 클러스터 구축하기. devngho 블로그. https://ngho.dev/posts/20250816-k8s-headache
Chicago 유동호. “Tailscale 위에 쿠버네티스 클러스터 구축하기.” devngho 블로그 (blog). 2025년 8월 16일. https://ngho.dev/posts/20250816-k8s-headache.
MLA 유동호. “Tailscale 위에 쿠버네티스 클러스터 구축하기.” devngho 블로그, 2025년 8월 16일, https://ngho.dev/posts/20250816-k8s-headache.