HomeLAB 구성하기 - 3

김명주·2025년 5월 21일

Home PC 환경 구성

준비사항

네트워크는 VPN을 이용해 추상화 하므로, 아래의 조건에 맞는 환경이 준비되어야 한다.

  • 인터넷 연결
  • Linux
  • Kubernetes

리눅스 머신 준비

  • 리눅스 환경을 2개 이상 만들 수 있는 경우에는 control-planeworker 용도로 생성
  • 1개의 환경만 준비 가능한 경우에는 control-plane 환경만 생성

로컬 VM 환경 구성

  • multipass를 이용해서 환경을 구성할 수 있다.
  • 아래 내용으로 main.tf를 작성하고 terraform init terraform apply를 수행하면 된다.
provider "multipass" {}

terraform {
  required_providers {
    multipass = {
      source  = "larstobi/multipass"
      version = "1.4.2"
    }
  }
}

variable "image_name" {
  description = "Ubuntu image name, default noble LTS"
  type        = string
  default     = "noble"
}

variable "cpus" {
  description = "Virtual CPU count"
  type        = number
  default     = 2
}

variable "memory" {
  description = "Virtual VM memory allocation"
  type        = string
  default     = "2G"
}

variable "disks" {
  description = "Thin provisioned disk size"
  type        = string
  default     = "30G"
}

variable "instance_count" {
  description = "Number of instances to create"
  type        = number
  default     = 3
}

# 로컬의 ~/.ssh/id_rsa.pub 파일을 읽어 변수로 저장
data "local_file" "ssh_pubkey" {
  filename = pathexpand("~/.ssh/id_rsa.pub")
}

# 사용자 정의 user_data.cfg 파일을 생성하는 리소스
resource "local_file" "user_data" {
  content = <<-EOF
    package_update: true
    package_upgrade: true

    users:
    - name: 'ubuntu'
      groups: users,adm,dialout,audio,netdev,video,plugdev,cdrom,games,input,gpio,spi,i2c,render,sudo
      shell: /bin/bash
      lock_passwd: true
      ssh_authorized_keys:
        - '${data.local_file.ssh_pubkey.content}'  # 로컬 공개 키 삽입

    ssh_deletekeys: false
    packages:
    - vim
    - curl
    - wget
  EOF

  filename = "${path.module}/user_data.cfg"
}

# Multipass 인스턴스 생성
resource "multipass_instance" "instances" {
  count = var.instance_count

  cloudinit_file = local_file.user_data.filename  # 생성된 user_data.cfg 파일  참조

  name   = [
    "control-plane-1",
    "worker-1",
    "worker-2"
  ][count.index]

  cpus   = var.cpus
  image  = var.image_name
  memory = var.memory
  disk   = var.disks
}

Wireguard VPN Client 설정

  1. 설치
  • 위에서 multipass를 이용해 만든 각각의 노드에 wireguard를 설치해주면 된다.
sudo apt update
sudo apt install wireguard -y
  1. 설정
  • 이전에 만든 Wireguard client config 파일을 아래 경로에 복사한다.
sudo vim /etc/wireguard/wg0.conf
# 내용 붙여넣기 후 저장
  1. 확인
sudo systemctl enable wg-quick@wg0
sudo systemctl start wg-quick@wg0

ping 10.200.1.1
## 아래처럼 핑이 잘 날아가면 연결 성공 
# PING 10.200.1.1 (10.200.1.1) 56(84) bytes of data.
# 64 bytes from 10.200.1.1: icmp_seq=1 ttl=64 time=9.22 ms
# 64 bytes from 10.200.1.1: icmp_seq=2 ttl=64 time=9.79 ms
# 64 bytes from 10.200.1.1: icmp_seq=3 ttl=64 time=10.7 ms
# 64 bytes from 10.200.1.1: icmp_seq=4 ttl=64 time=13.4 ms

모든 노드에 위 과정을 수행한다면 아래 사진처럼 wireguard ui에서 실행중인 걸 확인할 수 있다.

profile
개발자를 향해 달리는 사람

0개의 댓글