DevOps/Kubernetes

쿠버네티스 미니홈서버 구축해보기 - 7 - Proxmox에서 프라이빗 네트워크 만들고 VM 연결하기

kimc 2025. 3. 3. 21:38

[Kubernetes] Kubernetes 미니홈서버 구축해 보기 - 7 - Proxmox에서 프라이빗 네트워크 만들고 VM 연결하기


```

[Kubernetes] Kubernetes 미니홈서버 구축해 보기 - 7 - Proxmox에서 프라이빗 네트워크 만들고 VM 연결하기

```

이번 글을 통해 배워갈 내용

  1. 개요
  2. 설계
  3. Proxmox 세팅
  4. 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

 

728x90