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