Episode ini menjalankan Keepalived di lingkungan container dan VM: Docker dengan host networking, pola DaemonSet Kubernetes dengan hostNetwork, perhatian pada network namespace dan alokasi VIP, serta contoh stack HAProxy plus Keepalived berbasis container.

Containerisasi mengubah cara kita menjalankan layanan, dan Keepalived tidak kebal terhadapnya. Tapi ada satu kenyataan yang tidak bisa dinegosiasikan: VRRP dan virtual IP bekerja di network namespace host. Episode 17 menjelaskan cara menjalankan Keepalived dengan benar di Docker dan Kubernetes, serta jebakan yang membuat konfigurasi containerized gagal diam-diam.
Kalian akan memahami mengapa --network host wajib di Docker, bagaimana pola DaemonSet dengan hostNetwork membuat Keepalived tersedia di setiap node Kubernetes, dan bagaimana menyusun stack HAProxy plus Keepalived yang sepenuhnya berjalan di container.
Container default memakai network namespace sendiri yang terisolasi. Di dalamnya, Keepalived tidak bisa memasang VIP di interface host, tidak bisa mengirim multicast VRRP ke jaringan sebenarnya, dan node lain tidak akan pernah mendengarnya. Konsekuensinya: setiap node menganggap dirinya MASTER dan VIP tidak pernah benar-benar tersedia.
Jalankan container Keepalived dengan mode host agar berbagi network stack dengan host:
docker run -d \
--name keepalived \
--network host \
--cap-add NET_ADMIN \
--cap-add NET_RAW \
-v /etc/keepalived/keepalived.conf:/etc/keepalived/keepalived.conf:ro \
osixia/keepalived:2.2.7Opsi --network host membuat container memakai network namespace host, sementara --cap-add NET_ADMIN memberi izin memasang VIP di interface. Tanpa keduanya, Keepalived di container tidak akan berfungsi.
Keepalived butuh akses ke soket raw untuk VRRP dan operasi interface untuk memasang VIP. NET_ADMIN dan NET_RAW adalah capability minimal yang diperlukan. Jangan gunakan --privileged tanpa alasan; capability yang spesifik lebih aman.
Di Kubernetes, satu Pod Keepalived harus ada di setiap node yang ingin ikut HA. Pola yang tepat adalah DaemonSet dengan hostNetwork: true:
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: keepalived
namespace: network
spec:
selector:
matchLabels:
app: keepalived
template:
metadata:
labels:
app: keepalived
spec:
hostNetwork: true
tolerations:
- operator: Exists
containers:
- name: keepalived
image: osixia/keepalived:2.2.7
securityContext:
capabilities:
add: ["NET_ADMIN", "NET_RAW"]
volumeMounts:
- name: config
mountPath: /etc/keepalived/keepalived.conf
subPath: keepalived.conf
volumes:
- name: config
configMap:
name: keepalived-confighostNetwork: true membuat Pod berbagi network namespace host, sehingga VIP bisa dipasang di interface node. tolerations memastikan Pod juga dijadwalkan di node control-plane jika diperlukan, dan ConfigMap menyimpan keepalived.conf.
DaemonSet default menjadwalkan di semua node. Jika HA hanya diinginkan pada kelompok node tertentu, batasi dengan nodeSelector atau affinity sehingga hanya node yang memang menjadi bagian virtual router yang menerima Pod.
VIP adalah sumber daya host-level. Pastikan tidak ada dua controller yang mencoba memasang VIP yang sama di satu node. Di Kubernetes, patikan DaemonSet hanya berjalan di node yang diizinkan, dan gunakan priority serta virtual_router_id yang konsisten di seluruh node.
Jika kalian menjalankan LVS di dalam container Keepalived, perhatikan bahwa kube-proxy di host juga memakai IPVS. Tabel IPVS yang saling tumpang tindih bisa mengganggu. Untuk menghindari konflik, jalankan LVS hanya di satu controller, atau pisahkan use case antara Kubernetes service dan Keepalived LVS.
Arsitektur yang umum: satu container HAProxy sebagai load balancer, satu container Keepalived yang menjaga VIP dan memantau HAProxy. Keduanya dijalankan dengan --network host di setiap node:
docker run -d --name haproxy --network host -v /etc/haproxy:/usr/local/etc/haproxy:ro haproxy:3.0
docker run -d --name keepalived --network host \
--cap-add NET_ADMIN --cap-add NET_RAW \
-v /etc/keepalived/keepalived.conf:/etc/keepalived/keepalived.conf:ro \
osixia/keepalived:2.2.7Container haproxy menerima traffic, dan container keepalived menjaga VIP tetap di node yang HAProxy-nya sehat. Health check vrrp_script di dalam Keepalived memastikan VIP tidak bertahan di node dengan HAProxy mati.
Karena container berbagi network namespace, verifikasi dilakukan persis seperti bare metal:
ip -brief addr show
sudo journalctl -u docker | grep -i keepalivedOutput ip -brief addr show menampilkan VIP di interface host, dan log container bisa dilihat lewat docker log. Perilaku failover tetap terlihat di jaringan, tidak peduli layanan berjalan di dalam container.
Episode 17 membawa Keepalived ke dunia modern: Docker dengan --network host dan capability yang tepat, pola DaemonSet dengan hostNetwork di Kubernetes, serta stack HAProxy plus Keepalived yang sepenuhnya berjalan di container tanpa kehilangan perilaku VRRP aslinya.
Inti yang harus dibawa pulang:
--network host dan NET_ADMIN plus NET_RAW di Docker.hostNetwork: true menjalankan Keepalived di tiap node.Di episode 18 selanjutnya kita membahas disaster recovery dan backup strategies — mencadangkan konfigurasi dan memulihkan state, kebijakan failback dan timing-nya, serta menangani split-brain dan skenario jaringan yang terbelah.