[Kubernetes] Kubernetes 미니홈서버 구축해 보기 - 7 - Proxmox에서 프라이빗 네트워크 만들고 VM 연결하기
```
[Kubernetes] Kubernetes 미니홈서버 구축해 보기 - 7 - Proxmox에서 프라이빗 네트워크 만들고 VM 연결하기
```
이번 글을 통해 배워갈 내용
- 개요
- 설계
- Proxmox 세팅
- Master node 세팅
1. 개요
k8s 클러스터를 구축해서 작업을 하다 보니
홈네트워크의 경우 IP 주소가 바뀌는 경우가 있었습니다.
아이피타임에 DDNS 혹은 Cloudflare에 방법들을 이용했으나
클러스터를 온전히 보호하지 못한다는 생각이 들었고
Node VPN을 사용해서 고정 IP를 사용하고 보호하려 생각했으나
추후 노드를 여러 지점에서 사용할 것이 아니면
보안을 위해 더 좋은 다른 방안을 찾아냈습니다.
일단 설계변경 작업 전
위에 문제들로 인해서 만약 아이피가 변경된다면
아래와 같은 문제가 발생합니다.
"Unhandled Error" err="couldn't get current server API group list: Get \"http://localhost:8080/api?timeout=32s\": dial tcp 127.0.0.1:8080: connect: connection refused"
kubelet이 ruuning 인지 확인
sudo systemctl status kubelet
# 아니라면 sudo systemctl start kubelet
container가 running인지 확인
sudo crictl ps
kubeconfig 확인
kubectl config view
cluster 가 null로 나온다면
기존 kubeconfig를 확인해서
sudo ls -l /etc/kubernetes/admin.conf
restore 하기
mkdir -p $HOME/.kube
sudo cp /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
그다음 kubectl config 확인
kubectl config view
정상 확인
kubectl get nodes
명령어
crictl ps
에러문구
FATA[0000] validate service connection: validate CRI v1 runtime API for endpoint "unix:///run/containerd/containerd.sock": rpc error: code = Unavailable desc = connection error: desc = "transport: Error while dialing: dial unix /run/containerd/containerd.sock: connect: permission denied"
containerd.sock 권한 확인
ls -l /run/containerd/containerd.sock
결괏값
srw-rw---- 1 root root 0 Mar 1 12:34 /run/containerd/containerd.sock
위의 문제들을 해결한 다음
Proxmox에서 프라이빗 네트워크를 만들고 그 안에 k8s cluster를 구축하는 방 안으로 가겠습니다.
Proxmox에서 프라이빗 네트워크는 VM들이 서로 통신할 수 있는 가상의 스위치 같은 역할을 합니다. 이를 위해 Linux 브리지(vmbrX)를 설정하겠습니다.
Kubernetes 클러스터를 위한 프라이빗 네트워크를 설정해 보겠습니다. 이 설정에서는 마스터 노드가 인터넷에 접근할 수 있도록 하되, 공용 IP를 직접 노출하지 않도록 NAT을 통해 연결하고, 워커 노드와 로드 밸런서를 연결합니다.
2. 설계
그동안 Cloud 회사들을 이용하면서 편하게 Load balancer 세팅을 하였습니다.
(AWS ELB, GCP Load Balancer, Azure Load Balancer 등)
하지만 이번 시리즈에서는 집에 혼자 구축하기 때문에 MetalLB를 사용할 계획입니다.

3. Proxmox 세팅
인터페이스 설정
nano /etc/network/interfaces
auto lo
iface lo inet loopback
iface enp1s0 inet manual
auto umbr0
iface umbr0 inet dhcp # Or static if you set it earlier
bridge-ports enp1s0
bridge-stp off
bridge-fd 0
iface wlp2s0 inet manual
auto vmbr1
iface vmbr1 inet static
address 192.168.10.1/24
bridge-ports none
bridge-stp off
bridge-fd 0
source /etc/network/interfaces.d/*
vmbr1 이 올라간 것 확인
ip a
masternode 가 Ipforwarding이 가능하게 변경
nano /etc/sysctl.conf
아래 내용 Uncomment 하고 추가하기
net.ipv4.ip_forward=1
반영하기
sysctl -p
iptables를 사용하여 NAT 설정: vmbr1에서 나가는 트래픽을 vmbr0를 통해 마스커레이드 하도록 규칙 추가
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o vmbr0 -j MASQUERADE
-s 192.168.10.0/24: 소스 네트워크 (private subnet).
-o vmbr0: Output interface (public-facing bridge).
4. Master node IP 세팅
Proxmox내에 사설망에 노드 접근 시
접근 시 VPN, Jump Host, Port forwarding 등의 방법이 있습니다
Proxmox as SSH Jump Host를 사용해서 접근했습니다.
https://codemasterkimc.tistory.com/737
Putty 에 Pageant로 proxmox 내에 사설망 접근해보기
배워갈 내용개요실습참조 개요Pageagent는 Putty의 인증 에이전트로, 개인 키를 메모리에 저장하여 서버에 연결할 때 자동으로 사용할 수 있도록 해줍니다. 이를 통해서서버에 여러 사용자가 있
codemasterkimc.tistory.com
VM에 로그인해서 세팅합니다
저는 예시 정적 주소를 192.168.10.100으로 세팅했습니다
sudo nano /etc/netplan/01-netcfg.yaml
network:
version: 2
ethernets:
enp6s18:
addresses:
- 192.168.10.10/24
routes:
- to: default
via: 192.168.10.1
nameservers:
addresses:
- 8.8.8.8
적용
sudo chmod 600 /etc/netplan/01-netcfg.yaml
sudo netplan apply --debug
# 주소확인
ip a
# Proxmox host
# 작동안함 필요시 Firewall 열고 확인
# https://codemasterkimc.tistory.com/736
ping 192.168.10.1
# Internet
ping 8.8.8.8
4. Master node Cluster IP 세팅
기존에 설정한 클러스터 아이피를 찾아보고 수정해 주거나
클러스터를 다시 설치합니다
https://codemasterkimc.tistory.com/735
쿠버네티스 미니홈서버 구축해보기 - 5 - Master Node Control Plane설정해보기
[Kubernetes] 쿠버네티스 미니홈서버 구축해보기 - 5 - Master Node Control Plane설정해보기```[k8s] 쿠버네티스 미니홈서버 구축해보기 - 5 - Master Node Control Plane설정해보기```이번 글을 통해 배
codemasterkimc.tistory.com
주소변경
sudo nano /etc/kubernetes/manifests/kube-apiserver.yaml
- --advertise-address= 192.168.10.100 # 현재주소값 예시
파일 위치 변경 으로 pod 재시작 트리거
sudo mv /etc/kubernetes/manifests/kube-apiserver.yaml /tmp/
sleep 10
sudo mv /tmp/kube-apiserver.yaml /etc/kubernetes/manifests/
수정
nano ~/.kube/config
server: https://192.168.10.10:6443
수정
sudo nano /etc/kubernetes/admin.conf
server: https://192.168.10.10:6443
cp /etc/kubernetes/admin.conf ~/.kube/config
저는 Private IP에서는 기존 VKE 이에서 익숙해서 사용하던 Calico 대신 Cilium으로 교체했습니다
Calico 지우고
kubectl delete -f https://raw.githubusercontent.com/projectcalico/calico/v3.27.0/manifests/tigera-operator.yaml
kubectl delete -f custom-resources.yaml
sudo rm -rf /etc/cni/net.d/*
kubectl get pods -A
sudo systemctl restart kubelet
Cilium 설치
curl -L --remote-name-all https://github.com/cilium/cilium-cli/releases/latest/download/cilium-linux-amd64.tar.gz
sudo tar -C /usr/local/bin -xzf cilium-linux-amd64.tar.gz
cilium install
cilium status
cilium hubble enable
cilium status
cilium hubble ui
cilium hubble observe

그리고
Node 도 붙여줘서
사설망에 쿠버네티스 클러스터 구축을 완료했습니다.
kubeadm join 컨트롤플레인주소:6443 --token 토큰 \
--discovery-token-ca-cert-hash 토큰

읽어주셔서 감사합니다
무엇인가 얻어가셨기를 바라며
오늘도 즐거운 코딩 하시길 바랍니다 ~ :)
참조 및 인용
https://cast.ai/blog/kubernetes-control-plane-10-tips-for-airtight-k8s-security/
Kubernetes Control Plane: 10 Tips for Airtight K8s Security
The Kubernetes control plane is at attractive target for cybercriminals? Here are 10 tips to help you secure it and sleep well at night.
cast.ai
'DevOps > Kubernetes' 카테고리의 다른 글
쿠버네티스 미니홈서버 구축해보기 - 9 - 기존 HAProxy 와 NodePort로 연결된 NGINX Ingress를MetalLB로 교체 (0) | 2025.03.09 |
---|---|
쿠버네티스 미니홈서버 구축해보기 - 8 - HAPROXY 외부 네트워크 사설망에 연결 그리고 DDNS 설정 (0) | 2025.03.04 |
쿠버네티스 미니홈서버 구축해보기 - 6 - Proxmox 방화벽 점검해보기 (0) | 2025.03.02 |
쿠버네티스 미니홈서버 구축해보기 - 5 - Master Node Control Plane설정해보기 (0) | 2025.03.01 |
쿠버네티스 미니홈서버 구축해보기 - 4 - PROXMOX Ubuntu VM 세팅하기 (2) | 2025.02.26 |
[Kubernetes] Kubernetes 미니홈서버 구축해 보기 - 7 - Proxmox에서 프라이빗 네트워크 만들고 VM 연결하기
```
[Kubernetes] Kubernetes 미니홈서버 구축해 보기 - 7 - Proxmox에서 프라이빗 네트워크 만들고 VM 연결하기
```

이번 글을 통해 배워갈 내용
- 개요
- 설계
- Proxmox 세팅
- Master node 세팅
1. 개요
k8s 클러스터를 구축해서 작업을 하다 보니
홈네트워크의 경우 IP 주소가 바뀌는 경우가 있었습니다.
아이피타임에 DDNS 혹은 Cloudflare에 방법들을 이용했으나
클러스터를 온전히 보호하지 못한다는 생각이 들었고
Node VPN을 사용해서 고정 IP를 사용하고 보호하려 생각했으나
추후 노드를 여러 지점에서 사용할 것이 아니면
보안을 위해 더 좋은 다른 방안을 찾아냈습니다.
일단 설계변경 작업 전
위에 문제들로 인해서 만약 아이피가 변경된다면
아래와 같은 문제가 발생합니다.
"Unhandled Error" err="couldn't get current server API group list: Get \"http://localhost:8080/api?timeout=32s\": dial tcp 127.0.0.1:8080: connect: connection refused"
kubelet이 ruuning 인지 확인
sudo systemctl status kubelet
# 아니라면 sudo systemctl start kubelet
container가 running인지 확인
sudo crictl ps
kubeconfig 확인
kubectl config view
cluster 가 null로 나온다면
기존 kubeconfig를 확인해서
sudo ls -l /etc/kubernetes/admin.conf
restore 하기
mkdir -p $HOME/.kube
sudo cp /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
그다음 kubectl config 확인
kubectl config view
정상 확인
kubectl get nodes
명령어
crictl ps
에러문구
FATA[0000] validate service connection: validate CRI v1 runtime API for endpoint "unix:///run/containerd/containerd.sock": rpc error: code = Unavailable desc = connection error: desc = "transport: Error while dialing: dial unix /run/containerd/containerd.sock: connect: permission denied"
containerd.sock 권한 확인
ls -l /run/containerd/containerd.sock
결괏값
srw-rw---- 1 root root 0 Mar 1 12:34 /run/containerd/containerd.sock
위의 문제들을 해결한 다음
Proxmox에서 프라이빗 네트워크를 만들고 그 안에 k8s cluster를 구축하는 방 안으로 가겠습니다.
Proxmox에서 프라이빗 네트워크는 VM들이 서로 통신할 수 있는 가상의 스위치 같은 역할을 합니다. 이를 위해 Linux 브리지(vmbrX)를 설정하겠습니다.
Kubernetes 클러스터를 위한 프라이빗 네트워크를 설정해 보겠습니다. 이 설정에서는 마스터 노드가 인터넷에 접근할 수 있도록 하되, 공용 IP를 직접 노출하지 않도록 NAT을 통해 연결하고, 워커 노드와 로드 밸런서를 연결합니다.
2. 설계
그동안 Cloud 회사들을 이용하면서 편하게 Load balancer 세팅을 하였습니다.
(AWS ELB, GCP Load Balancer, Azure Load Balancer 등)
하지만 이번 시리즈에서는 집에 혼자 구축하기 때문에 MetalLB를 사용할 계획입니다.

3. Proxmox 세팅
인터페이스 설정
nano /etc/network/interfaces
auto lo
iface lo inet loopback
iface enp1s0 inet manual
auto umbr0
iface umbr0 inet dhcp # Or static if you set it earlier
bridge-ports enp1s0
bridge-stp off
bridge-fd 0
iface wlp2s0 inet manual
auto vmbr1
iface vmbr1 inet static
address 192.168.10.1/24
bridge-ports none
bridge-stp off
bridge-fd 0
source /etc/network/interfaces.d/*
vmbr1 이 올라간 것 확인
ip a
masternode 가 Ipforwarding이 가능하게 변경
nano /etc/sysctl.conf
아래 내용 Uncomment 하고 추가하기
net.ipv4.ip_forward=1
반영하기
sysctl -p
iptables를 사용하여 NAT 설정: vmbr1에서 나가는 트래픽을 vmbr0를 통해 마스커레이드 하도록 규칙 추가
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o vmbr0 -j MASQUERADE
-s 192.168.10.0/24: 소스 네트워크 (private subnet).
-o vmbr0: Output interface (public-facing bridge).
4. Master node IP 세팅
Proxmox내에 사설망에 노드 접근 시
접근 시 VPN, Jump Host, Port forwarding 등의 방법이 있습니다
Proxmox as SSH Jump Host를 사용해서 접근했습니다.
https://codemasterkimc.tistory.com/737
Putty 에 Pageant로 proxmox 내에 사설망 접근해보기
배워갈 내용개요실습참조 개요Pageagent는 Putty의 인증 에이전트로, 개인 키를 메모리에 저장하여 서버에 연결할 때 자동으로 사용할 수 있도록 해줍니다. 이를 통해서서버에 여러 사용자가 있
codemasterkimc.tistory.com
VM에 로그인해서 세팅합니다
저는 예시 정적 주소를 192.168.10.100으로 세팅했습니다
sudo nano /etc/netplan/01-netcfg.yaml
network:
version: 2
ethernets:
enp6s18:
addresses:
- 192.168.10.10/24
routes:
- to: default
via: 192.168.10.1
nameservers:
addresses:
- 8.8.8.8
적용
sudo chmod 600 /etc/netplan/01-netcfg.yaml
sudo netplan apply --debug
# 주소확인
ip a
# Proxmox host
# 작동안함 필요시 Firewall 열고 확인
# https://codemasterkimc.tistory.com/736
ping 192.168.10.1
# Internet
ping 8.8.8.8
4. Master node Cluster IP 세팅
기존에 설정한 클러스터 아이피를 찾아보고 수정해 주거나
클러스터를 다시 설치합니다
https://codemasterkimc.tistory.com/735
쿠버네티스 미니홈서버 구축해보기 - 5 - Master Node Control Plane설정해보기
[Kubernetes] 쿠버네티스 미니홈서버 구축해보기 - 5 - Master Node Control Plane설정해보기```[k8s] 쿠버네티스 미니홈서버 구축해보기 - 5 - Master Node Control Plane설정해보기```이번 글을 통해 배
codemasterkimc.tistory.com
주소변경
sudo nano /etc/kubernetes/manifests/kube-apiserver.yaml
- --advertise-address= 192.168.10.100 # 현재주소값 예시
파일 위치 변경 으로 pod 재시작 트리거
sudo mv /etc/kubernetes/manifests/kube-apiserver.yaml /tmp/
sleep 10
sudo mv /tmp/kube-apiserver.yaml /etc/kubernetes/manifests/
수정
nano ~/.kube/config
server: https://192.168.10.10:6443
수정
sudo nano /etc/kubernetes/admin.conf
server: https://192.168.10.10:6443
cp /etc/kubernetes/admin.conf ~/.kube/config
저는 Private IP에서는 기존 VKE 이에서 익숙해서 사용하던 Calico 대신 Cilium으로 교체했습니다
Calico 지우고
kubectl delete -f https://raw.githubusercontent.com/projectcalico/calico/v3.27.0/manifests/tigera-operator.yaml
kubectl delete -f custom-resources.yaml
sudo rm -rf /etc/cni/net.d/*
kubectl get pods -A
sudo systemctl restart kubelet
Cilium 설치
curl -L --remote-name-all https://github.com/cilium/cilium-cli/releases/latest/download/cilium-linux-amd64.tar.gz
sudo tar -C /usr/local/bin -xzf cilium-linux-amd64.tar.gz
cilium install
cilium status
cilium hubble enable
cilium status
cilium hubble ui
cilium hubble observe

그리고
Node 도 붙여줘서
사설망에 쿠버네티스 클러스터 구축을 완료했습니다.
kubeadm join 컨트롤플레인주소:6443 --token 토큰 \
--discovery-token-ca-cert-hash 토큰

읽어주셔서 감사합니다
무엇인가 얻어가셨기를 바라며
오늘도 즐거운 코딩 하시길 바랍니다 ~ :)
참조 및 인용
https://cast.ai/blog/kubernetes-control-plane-10-tips-for-airtight-k8s-security/
Kubernetes Control Plane: 10 Tips for Airtight K8s Security
The Kubernetes control plane is at attractive target for cybercriminals? Here are 10 tips to help you secure it and sleep well at night.
cast.ai
'DevOps > Kubernetes' 카테고리의 다른 글
쿠버네티스 미니홈서버 구축해보기 - 9 - 기존 HAProxy 와 NodePort로 연결된 NGINX Ingress를MetalLB로 교체 (0) | 2025.03.09 |
---|---|
쿠버네티스 미니홈서버 구축해보기 - 8 - HAPROXY 외부 네트워크 사설망에 연결 그리고 DDNS 설정 (0) | 2025.03.04 |
쿠버네티스 미니홈서버 구축해보기 - 6 - Proxmox 방화벽 점검해보기 (0) | 2025.03.02 |
쿠버네티스 미니홈서버 구축해보기 - 5 - Master Node Control Plane설정해보기 (0) | 2025.03.01 |
쿠버네티스 미니홈서버 구축해보기 - 4 - PROXMOX Ubuntu VM 세팅하기 (2) | 2025.02.26 |