homelab89 Docs Logs Legacy Files ☰ TOC 🌓
guidek8s 2026-06-29kuberneteskvmnetworkingtroubleshooting

k8s-cp1 VM 네트워크 접속 불가 트러블슈팅

작성일: 2026-03-05

증상

  • virsh domifaddr k8s-cp1 결과에 IP가 표시되지 않음
  • VM에 SSH 접속 불가

원인 분석

원인 1: 네트워크 대역 불일치

VM은 virbr0 (libvirt 기본 NAT 네트워크, 198.51.100.0/24)에 연결되어 있었지만, cloud-init network-config에서는 203.0.113.70/24를 할당하고 있었다.

# virt-install 시 사용된 네트워크
--network bridge=virbr0    ← 198.51.100.0/24 대역 (libvirt 기본 NAT)

# cloud-init network-config에 설정된 IP
addresses: 203.0.113.70/24  ← 203.0.113.0/24 대역 (호스트 LAN)

브릿지 대역과 VM IP 대역이 다르므로 통신 자체가 불가능했다.

원인 2: user-data.yaml #cloud-config 헤더 누락

# 잘못된 형식 (헤더 없음)
hostname: k8s-cp1
users:
  - name: kube
    ...

# 올바른 형식
#cloud-config          ← 이 줄이 반드시 있어야 함
hostname: k8s-cp1
users:
  - name: kube
    ...

#cloud-config 헤더가 없으면 cloud-init이 파일을 cloud-config 형식으로 인식하지 못해, 사용자 생성 및 SSH 키 주입이 수행되지 않았다. ping은 되지만 SSH 인증이 실패하는 현상의 원인이었다.

원인 3: 베이스 이미지 오염

ubuntu2404-base.qcow2는 이전에 이미 cloud-init이 한 번 실행된 이미지였다. cloud-init은 기본적으로 첫 번째 부팅에서만 실행되므로, 이 이미지를 복사해서 VM을 만들면 새로운 cloud-init ISO를 넣어도 무시된다.

이미지 용도
noble-server-cloudimg-amd64.img 원본 클라우드 이미지 (cloud-init 미실행)
ubuntu2404-base.qcow2 이전에 사용된 이미지 (cloud-init 이미 실행됨)

해결 과정

1단계: 네트워크를 virbr0 → br-host (호스트 브릿지)로 변경

호스트에 이미 br-host 브릿지가 구성되어 있었다 (eth0 → br-host, 203.0.113.2/24). VM을 br-host에 연결하면 로컬 네트워크(203.0.113.0/24) 대역을 직접 사용할 수 있다.

--network bridge=virbr0  →  --network bridge=br-host

2단계: user-data.yaml에 #cloud-config 헤더 추가

sudo vi /var/lib/libvirt/cloud-init/k8s-cp1-user-data.yaml
# 첫 줄에 #cloud-config 추가

3단계: cloud-init ISO 재생성

sudo cloud-localds /var/lib/libvirt/cloud-init/k8s-cp1-cidata.iso \
  /var/lib/libvirt/cloud-init/k8s-cp1-user-data.yaml \
  --network-config /var/lib/libvirt/cloud-init/k8s-cp1-network-config.yaml

4단계: 원본 이미지에서 디스크 새로 생성 후 VM 재생성

# 기존 VM 삭제
sudo virsh destroy k8s-cp1
sudo virsh undefine k8s-cp1

# 원본 클라우드 이미지에서 복사 (cloud-init 미실행 상태)
sudo cp /var/lib/libvirt/images/noble-server-cloudimg-amd64.img \
       /var/lib/libvirt/images/k8s-cp1.qcow2
sudo qemu-img resize /var/lib/libvirt/images/k8s-cp1.qcow2 20G

# br-host 브릿지로 VM 생성
sudo virt-install \
  --name k8s-cp1 \
  --memory 2048 \
  --vcpus 2 \
  --disk path=/var/lib/libvirt/images/k8s-cp1.qcow2,format=qcow2 \
  --disk path=/var/lib/libvirt/cloud-init/k8s-cp1-cidata.iso,device=cdrom \
  --os-variant ubuntu24.04 \
  --network bridge=br-host,model=virtio \
  --graphics none \
  --console pty,target_type=serial \
  --noautoconsole \
  --import

5단계: 접속 확인

ssh [email protected]   # 성공

교훈

  1. cloud-init network-config의 IP 대역은 연결할 브릿지 대역과 반드시 일치해야 한다
  2. user-data.yaml 첫 줄에 #cloud-config이 없으면 cloud-init이 동작하지 않는다
  3. cloud-init은 첫 부팅에서만 실행된다 — 설정 변경 시 반드시 원본(미사용) 이미지에서 디스크를 새로 복사해야 한다

Files