Mengamankan jalur network menuju NFS server: memastikan worker bisa reach server, memakai NetworkPolicy Calico/Cilium untuk membatasi egress Pod Laravel, membuka port yang tepat di firewall, dan opsi VPN untuk cluster terdistribusi

Sejauh ini kita fokus pada fungsi: NFS bisa di-mount, file bisa dibaca. Episode 14 mengalihkan fokus ke keamanan jalur data. NFS adalah protokol yang usianya setengah abad — ia tidak dirancang dengan pemikiran zero-trust. Data di jaringan harus dilindungi dari akses yang tidak dikehendaki, baik di level Kubernetes maupun di level jaringan.
Pendekatan kita berlapis: jaringan (worker → server), kubernetes (NetworkPolicy membatasi Pod), dan server (firewall).
Langkah pertama adalah memastikan konektivitas dasar. Worker node harus bisa reach NFS server piksel penuh:
ping -c 3 192.168.10.20
nc -zvw3 192.168.10.20 2049Jika port 2049 tidak terbuka dari worker, mount tidak akan pernah berhasil — tidak peduli sehebat apa konfigurasi Kubernetes.
Dari sisi NFS server, catat bahwa beberapa port digunakan (lihat bagian Firewall). Jangan sampai port yang dibuka hanya 2049 sementara rpcbind tidak.
Jika cluster memakai CNI yang mendukung NetworkPolicy (Calico, Cilium, Weave, dsb.), kita bisa membatasi Pod mana yang boleh berbicara ke NFS. Contoh: hanya Pod app=laravel yang boleh egress ke IP NFS server pada port 2049:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-egress-nfs
namespace: default
spec:
podSelector:
matchLabels:
app: laravel
policyTypes:
- Egress
egress:
- to:
- ipBlock:
cidr: 192.168.10.20/32
ports:
- protocol: TCP
port: 2049kubectl apply -f networkpolicy-allow-egress-nfs.yaml
kubectl get networkpolicy allow-egress-nfsSetelah policy ini ada, Pod lain (mis. app=other) TIDAK bisa melakukan egress ke NFS server. Ini isolasi lateral: sekalipun attacker masuk ke sebuah Pod, ia tidak bisa menjangkau storage unless Pod itu memang laravel.
Important
NetworkPolicy bersifat default-deny untuk arah yang dideklarasikan. Begitu kalian menulis policy Egress, semua egress lain dari Pod tersebut ikut dibatasi — pastikan daftar egress lengkap (DNS, registry, DB, dsb.) bila sudah ada policy eksplisit.
NFS memakai beberapa port. Dalam konfigurasi modern (NFSv4), yang wajib:
| Port | Layanan |
|---|---|
2049/tcp | NFS data |
111/tcp + 111/udp | rpcbind/portmapper |
20048/tcp | mountd (jika dipakai; di NFSv4 kernel biasanya tidak) |
Kunci: hanya izinkan worker nodes, bukan seluruh network:
sudo ufw allow from 192.168.10.21 to any port 2049 proto tcp
sudo ufw allow from 192.168.10.22 to any port 2049 proto tcp
sudo ufw allow from 192.168.10.21 to any port 111 proto tcp
sudo ufw allow from 192.168.10.22 to any port 111 proto tcp
sudo ufw allow from 192.168.10.21 to any port 111 proto udp
sudo ufw allow from 192.168.10.22 to any port 111 proto udp
sudo ufw enableSalin pola yang sama ke firewalld/iptables bila memakai RHEL.
Warning
Jika di masa depan kalian memindahkan CNI, IP Pod ikut berubah dan ekspor/firewall harus diperbarui. Catat bahwa NFS menyasar IP sumber worker, bukan IP Pod — firewall tidak perlu tahu IP Pod, cukup arah mount dari node.
Pada episode 14 ini, jalur data storage kini terkunci dari tiga lapis:
Inti yang harus dibawa pulang:
ping + nc -zv port 2049 dari worker.allow-egress-nfs membatasi Pod mana yang boleh menyentuh server.Di episode 15 selanjutnya kita akan mengamankan data itu sendiri: encryption at rest dengan LUKS, encryption in transit via sec=krb5p, enkripsi di level aplikasi, serta strategi backup dan key rotation. Sampai jumpa di episode 15!