WireGuard · 2026-01-28

Kubernetes에서 WireGuard CNI로 클러스터 네트워킹 구성

Kubernetes 환경에서 WireGuard CNI를 활용한 클러스터 네트워킹 원리와 설치 흐름, 구성 예시 및 운영 시 고려사항을 정리한 설명서

작성일 : 2026-01-28 ㆍ 작성자 : 관리자
post
목차

개요

이 문서에서는 Kubernetes에서 WireGuard CNI를 사용해 클러스터 네트워킹을 구성하는 과정을 단계별로 정리한다. 초보자도 이해할 수 있도록 개념 설명부터 설치, 구성, 테스트, 운영 시 유의점까지 다룬다. 핵심 키워드는 Kubernetes WireGuard CNI, k8s WireGuard 설치, WireGuard 클러스터 네트워킹이다.

WireGuard와 CNI 개념

WireGuard란

WireGuard는 경량의 VPN 프로토콜로서 커널 모듈과 유저스페이스 구현을 제공한다. 빠른 연결 수립과 간단한 키 기반 인증이 장점이다.

CNI와의 관계

CNI(Container Network Interface)는 쿠버네티스에서 네트워크 플러그인을 연결하는 표준 인터페이스다. WireGuard를 CNI로 사용하면 노드 간 트래픽을 암호화된 터널로 구성할 수 있다.

왜 WireGuard CNI를 선택하는가

  • 낮은 오버헤드와 높은 성능
  • 단순한 키 관리 모델
  • 노드 간 암호화로 내부 트래픽 보호 가능

준비사항

  • 각 노드의 커널이 WireGuard를 지원하거나 모듈 설치 가능
  • 클러스터 내부 IP 계획(예: Pod CIDR)과 WireGuard 터널 IP 계획
  • 관리용 키 페어 생성 및 안전한 분배 방법
  • 클러스터에 CNI를 대체 또는 병행으로 적용할 수 있는 운영 정책

설치 흐름 개요

설치의 큰 흐름은 다음과 같다.

  • 노드별 WireGuard 실행 환경 준비
  • 키 생성 및 분배
  • CNI 구성 요소(예: DaemonSet) 배포
  • 라우팅과 IP 할당 연동
  • 연결 검증

실제 설치 예시

아래 예시는 개념 검증 수준의 간단한 DaemonSet 형태로, 각 노드에서 WireGuard 인터페이스를 생성하고 키를 적용하는 방법을 보여준다. 실제 운영 환경에서는 보다 견고한 키 관리와 IPAM 연동이 필요하다.

1) 키 생성 예시

# 노드에서 실행
wg genkey | tee privatekey | wg pubkey > publickey

2) 간단한 DaemonSet 예시

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: wireguard-cni
  namespace: kube-system
spec:
  selector:
    matchLabels:
      app: wireguard-cni
  template:
    metadata:
      labels:
        app: wireguard-cni
    spec:
      hostPID: true
      hostNetwork: true
      containers:
      - name: wg-setup
        image: alpine:3.18
        securityContext:
          privileged: true
        command: ["/bin/sh","-c"]
        args:
        - apk add --no-cache wireguard-tools iproute2; \
          WG_PRIV=$(cat /etc/wg/privatekey); \
          ip link add wg0 type wireguard || true; \
          ip addr add 10.10.0.1/24 dev wg0 || true; \
          wg setconf wg0 /etc/wg/wg0.conf || true; \
          ip link set up dev wg0; \
          sleep infinity
        volumeMounts:
        - name: wg-config
          mountPath: /etc/wg
      volumes:
      - name: wg-config
        configMap:
          name: wg-config

3) ConfigMap 예시 (간단 키/피어 설정)

apiVersion: v1
kind: ConfigMap
metadata:
  name: wg-config
  namespace: kube-system
data:
  privatekey: ""
  wg0.conf: |
    [Interface]
    PrivateKey = 
    Address = 10.10.0.1/24

    [Peer]
    PublicKey = 
    AllowedIPs = 10.10.0.2/32
    Endpoint = other.node.example:51820

위 예시는 각 노드에서 고유한 privatekey와 화이트리스트 형식의 peer 구성을 사용한다. 실제 환경에서는 자동화된 키 분배와 중앙 컨트롤 플레인이 필요하다.

IPAM과 라우팅 연동

WireGuard 인터페이스의 IP를 Pod 네트워크와 연동하려면 다음 중 하나 방식이 필요하다.

  • Pod 네트워크를 WireGuard 네트워크로 직접 할당
  • 각 노드에서 iptables나 BGP를 사용해 경로를 광고
  • IPAM 모듈을 통해 WireGuard 터널 IP를 자동 배정

운영 환경에서는 서비스 디스커버리와 라우팅 일관성 확보가 중요하다.

테스트 방법

  • 노드 간 ping 테스트: wg 인터페이스 주소로 ping
  • wg show 명령으로 handshakes 확인
  • Pod 간 통신 테스트: 네임스페이스 내에서 서비스 호출

보안 및 운영 고려사항

  • 키 관리: 키는 안전한 저장소에 보관하고 주기적 교체 계획 수립
  • 모니터링: WireGuard 상태와 패킷 경로 모니터링 체계 마련
  • 업그레이드: 커널 모듈 변경 시 호환성 확인
  • 접근 제어: 터널의 AllowedIPs를 최소 권한 원칙으로 설정

문제 해결 체크리스트

  • 인터페이스가 올라오지 않으면 커널 모듈 로드 확인
  • 핸드셰이크가 없으면 키와 엔드포인트 설정 확인
  • 라우팅 문제는 ip route 및 iptables 규칙 점검

요약

WireGuard CNI는 k8s WireGuard 설치를 통해 클러스터 간 암호화 통신을 제공한다. 성능과 단순성에서 장점이 크지만, 키 관리와 IP 할당 연동 같은 운영 요소를 충분히 설계해야 한다. 작은 규모에서는 수동 구성으로 시작해, 운영 규모가 커지면 자동화된 키/컨피그 관리 계층을 도입하는 것이 안전한 확장 방법이다.

참고사항

문서의 예시는 교육 목적이며, 운영 도입 전에는 자체 검증과 보안 심사를 권장한다.

Kubernetes WireGuard CNI k8s WireGuard 설치 WireGuard 클러스터 네트워킹 Kubernetes WireGuard CNI k8s 네트워크 보안 WireGuard 설정