지난 글에 이어, 예고한 대로 VPN을 이용한 서버 접근까지 구성을 해보려고 합니다.
먼저 우분투에 설정이 온전히 끝이 난 것이 아니라서, 이어서 진행해 보도록 할게요
Ubuntu 추가 설정
Qemu Guest Agent 설치 및 활성화
sudo apt install qemu-guest-agent -y
sudo systemctl enable --now qemu-guest-agent
방화벽 임시 비활성화 (추후 ufw 상세 설정)
sudo ufw disable
IP 포워딩 활성화 및 브릿지 네트워크 설정 (컨테이너 네트워킹에 필요)
echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf
echo "net.bridge.bridge-nf-call-iptables=1" | sudo tee -a /etc/sysctl.conf
echo "net.bridge.bridge-nf-call-ip6tables=1" | sudo tee -a /etc/sysctl.conf # IPv6도 사용한다면
sudo modprobe br_netfilter
echo "br_netfilter" | sudo tee /etc/modules-load.d/k8s.conf
sudo sysctl -p
재부팅
sudo reboot
Tailscale 네트워크 설정
https://tailscale.com/download
해당 페이지를 통해 먼저 Tailscale에 가입하고, Download 한 후 해당 Desktop과 tailscale을 연동합니다.
Download | Tailscale
Tailscale is the zero configuration VPN that doesn't go through the public internet.
tailscale.com
제가 목표하는 바는 아래와 같습니다.
제 PC와 k3s의 VM노드 2개를 Tailscale VPN 네트워크에 연결하고, 외부 환경의 개발자 또한 Tailscale VPN을 통해 VM 노드에 접근하도록 하는 것을 목표로 합니다.
이때, 같은 Tailscale안에 들어가 있기 때문에, 제 PC와 외부 환경의 개발자 PC도 같은 망으로 연결이 되는데 직접적인 통신을 차단하기 위해 Access Control를 통해 권한을 부여하여 서로의 PC에는 접근하지 못하도록 제한하려 합니다.
k3s VM 노드에 Tailscale 설치
curl -fsSL https://tailscale.com/install.sh | sh
위 명령어를 사용하여 설치하고, sudo tailscale up
명령어를 사용하여 Tailscale을 활성화합니다.
sudo tailscale up
명령어를 사용하면, 화면에 authenticate를 진행하기 위한 url이 나타나는데, 해당 url을 브라우저에 입력해서 본인 계정과 연동합니다.
Access controls 설정
기본적으로 입력되어 있는 Access Controls가 있는데, 이걸 참고해서 수정해도 좋을 것 같습니다.
일단 저는 group을 admin과 developer로 설정했습니다.
{
"groups": {
"group:admins": ["chordpli@tistory.com"],
"group:developers": ["developer_a_tailscale_login_email@example.com"],
},
// tag를 설정할 수 있는 권한입니다. node를 묶기 위해 Tag명을 k3s-cluster-node로 지었습니다. 해당 설정은 machine에서 노드의 오른쪽 ...을 클릭하여 edit acl tag에서 설정할 수 있습니다.
"tagOwners": {
"tag:k3s-cluster-node": ["group:admins"],
},
"acls": [
// 1. 관리자는 k3s 노드에 모든 프로토콜/포트로 접근 가능
{
"action": "accept",
"src": ["group:admins"],
// 모든 포트 허용
"dst": ["tag:k3s-cluster-node:*"],
},
// 2. 개발자는 k3s 노드의 특정 서비스 포트(NodePort 대역) 및 SSH(필요시)에만 접근 가능
{
"action": "accept",
"src": ["group:developers"],
"dst": [
// Kubernetes NodePort 기본 대역 (TCP/UDP)
"tag:k3s-cluster-node:30000-32767",
// 개발자에게 K3s 노드 SSH 접근을 허용할 경우 이 줄의 주석 해제
"tag:k3s-cluster-node:22",
],
},
// 3. K3s 클러스터 노드들은 서로 모든 통신을 허용 (클러스터 내부 동작에 필수)
{
"action": "accept",
"src": ["tag:k3s-cluster-node"],
"dst": ["tag:k3s-cluster-node:*"],
},
"ssh": [
{
// "check"로 하면 OS 레벨 인증도 필요, "accept"는 Tailscale 인증만으로 접속
"action": "check",
// 본인이 속한 그룹
"src": ["group:admins"],
// k3s 노드 태그
"dst": ["tag:k3s-cluster-node"],
// 허용할 OS 사용자 이름 목록
"users": ["tistory", "root"],
},
// A 개발자가 k3s 노드에 pli 계정으로 Tailscale SSH 접속 허용
{
"action": "accept",
// 개발자가 속한 그룹
"src": ["group:developers"],
"dst": ["tag:k3s-cluster-node"],
// 허용할 OS 사용자 이름
"users": ["tistory"],
},
],
}
완료!
공유 방법
먼저 함께 공유할 유저를 초대합니다.
이후 공유할 기기를 hover 하면 share 버튼이 뜨는데, 해당 링크를 사용자에게 공유하면 됩니다.
그럼 address를 통해 접속할 수 있어요! ACL 설정은 위를 참고해주세요!
접속 방법
ssh로 접근(ACL에서 tag:k3s-cluster-node:22 허용)
ssh tistory@<k3s-node1_tailscale_ip_또는_MagicDNS_이름>
# 또는
ssh tistory@<k3s-node2_tailscale_ip_또는_MagicDNS_이름>
Tailscale SSH 기능을 사용하여 접근!
ACL ssh 섹션에 tistory 사용자를 허용했다면
tailscale ssh pli@<k3s-node1_tailscale_ip_또는_MagicDNS_이름>
위 명령어를 통해 접근할 수 있다.
Kafka, Redis 등 서비스 접속 (추후)
(ACL에서 tag:k3s-cluster-node:30000-32767 NodePort 대역을 허용했을 경우)
- 개발자 A는 본인의 개발 도구나 클라이언트에서 접속 주소를 <k3s-node_tailscale_ip>:<해당서비스_NodePort>로 설정하여 서비스에 접근할 수 있습니다.
- 예를 들어 Redis가 k3s-node1의 Tailscale IP 100.x.y.z에 NodePort 30379로 노출되었다면, 개발자는 100.x.y.z:30379로 Redis에 접속할 수 있습니다.
이후에는 k3s를 설치하고 설정하는 단계로 넘어가겠습니다.
'Server > Infra' 카테고리의 다른 글
N100 미니PC를 이용한 나만의 서버 구축기 - 3 / K3s 설치 (0) | 2025.05.29 |
---|---|
N100 미니PC를 이용한 나만의 서버 구축기 - 1 / Proxmox 설정 (1) | 2025.05.27 |
SQS 메시지를 한 번만 처리하기 위한 고민 (FIFO, DB 멱등성, 그리고 현실적 고려사항) (0) | 2025.05.13 |
SQS 메시지 256KB 한도 해결하기: Extended Client + S3로 Oversize 대응하는 법 (0) | 2025.05.12 |
Provisioned와 Reserved Concurrency를 활용한 AWS Lambda 최적화 (2) | 2024.10.27 |