Episode ini membahas WireGuard dalam ekosistem container: kapabilitas NET_ADMIN dan device /dev/net/tun yang dibutuhkan, pola sidecar di Kubernetes, WireGuard sebagai overlay network antar host, serta kombinasi dengan CNI seperti Calico dan Cilium.

Setelah serangkaian deployment di mesin fisik, saatnya membawa WireGuard ke dunia container. Di sini aturannya berubah: container tidak punya akses penuh ke kernel, sehingga menjalankan interface wg0 membutuhkan kapabilitas khusus yang tidak diberikan secara default.
Episode 17 membahas cara menjalankan WireGuard di Docker, pola sidecar untuk menghubungkan pod ke jaringan eksternal, serta peran WireGuard sebagai overlay network antar host di lingkungan container yang tersebar.
Untuk membuat interface WireGuard, container membutuhkan hak untuk mengelola network namespace dan akses ke device TUN:
docker run -d \
--cap-add=NET_ADMIN \
--cap-add=SYS_MODULE \
--device=/dev/net/tun \
-v /etc/wireguard:/etc/wireguard \
-p 51820:51820/udp \
linuxserver/wireguard--cap-add=NET_ADMIN memberi hak mengelola interface, --device=/dev/net/tun memberikan akses device TUN, dan volume -v /etc/wireguard:/etc/wireguard memasok konfigurasi dari host.
Terkadang lebih sederhana menjalankan WireGuard dengan network_mode: host, sehingga container berbagi network namespace dengan host dan tidak perlu mapping port:
services:
wireguard:
image: linuxserver/wireguard
container_name: wireguard
cap_add:
- NET_ADMIN
- SYS_MODULE
volumes:
- /etc/wireguard:/config
environment:
- PUID=1000
- PGID=1000
- SERVERPORT=51820
network_mode: host
sysctls:
- net.ipv4.conf.all.src_valid_mark=1Dengan network_mode: host, interface wg0 yang dibuat container muncul langsung di host, dan forwarding antar interface berjalan secara native.
Dalam Kubernetes, WireGuard sering dijalankan sebagai sidecar: container pendamping di dalam pod yang sama dengan aplikasi utama. Sidecar membuka tunnel, dan aplikasi utama memakai network namespace pod yang sama:
apiVersion: apps/v1
kind: Deployment
metadata:
name: app-dengan-wireguard
spec:
selector:
matchLabels:
app: app-dengan-wireguard
template:
metadata:
labels:
app: app-dengan-wireguard
spec:
containers:
- name: wireguard-sidecar
image: linuxserver/wireguard
securityContext:
capabilities:
add: ["NET_ADMIN"]
volumeMounts:
- name: wg-config
mountPath: /config
- name: aplikasi
image: nginx
volumes:
- name: wg-config
configMap:
name: wg-client-configContainer wireguard-sidecar membawa tunnel naik, dan container aplikasi memakai tunnel tersebut karena mereka berbagi network namespace pod. Sidecar juga bisa menerima trafik yang di-forward ke aplikasi.
Di luar Kubernetes, WireGuard bisa menjadi overlay network yang menghubungkan host Docker yang tersebar. Setiap host menjalankan satu container WireGuard yang bertindak sebagai gateway, dan jaringan Docker antar host berkomunikasi lewat tunnel ini.
Keunggulan pendekatan ini: enkripsi berlaku untuk seluruh trafik antar host tanpa mengubah aplikasi, dan subnet yang sama bisa dipakai di semua host karena diisolasi tunnel.
Di Kubernetes, WireGuard bisa dipadukan dengan CNI untuk enkripsi antar node. Beberapa CNI bahkan memakai WireGuard sebagai backend enkripsi asli — topik ini akan kita bedah di episode 18 bersama Flannel, Calico, dan Cilium.
Episode 17 menuntaskan WireGuard di dunia container: kapabilitas dan device yang dibutuhkan, cara menjalankan di Docker dengan host network, pola sidecar di Kubernetes, dan peran WireGuard sebagai overlay antar host.
Inti yang harus dibawa pulang:
--cap-add=NET_ADMIN dan --device=/dev/net/tun.network_mode: host membuat interface wg0 tampil langsung di host.Di episode 18 selanjutnya kita membahas integrasi Kubernetes — backend WireGuard di Flannel, enkripsi WireGuard di Calico dan Cilium, enkripsi pod-to-pod yang transparan, serta manajemen kunci per node di cluster.