Memetakan jalur komunikasi storage: port dan socket yang dipakai CSI, port NFS Server Pod 2049 dan 111, NetworkPolicy yang membatasi akses NFS ke namespace aplikasi, Ingress ke Service Laravel, serta pemasangan TLS untuk HTTPS

Volume storage telah dibangun, tetapi mereka hidup di jaringan — dan jaringan perlu dipahami serta dibatasi. Episode 11 memetakan siapa bicara dengan siapa lewat port apa, lalu menutup pintu yang tidak perlu.
Untuk setup simple, kalian tidak butuh aturan network yang rumit. Yang dibutuhkan adalah kejelasan: kapan mount NFS terjadi, port mana yang terlibat, dan bagaimana mencegah akses liar.
Plugin CSI berkomunikasi lewat Unix socket lokal:
/var/lib/kubelet/plugins/<driver>/csi.sockIni komunikasi antar proses dalam satu node — tidak lewat jaringan. Tidak ada port TCP yang harus dibuka khusus untuk ini.
Ini jalur lintas-node yang penting. Setiap worker yang me-mount NFS Server Pod memakai:
| Port | Peran |
|---|---|
2049/tcp | Data NFS |
| `111/tcp | udp` |
Karena NFS Server Pod berjalan di dalam cluster, mount dilakukan ke Service cluster IP — jaringan pod-network, bukan jaringan eksternal. Ini berarti NFS tidak terlihat dari luar cluster (kecuali cluster-nya sendiri ter-expose).
kubectl -n openebs-nfs get svc
kubectl -n openebs-nfs get endpointsTraffic NFS mengalir node → node dalam cluster (pod-network). Pastikan CNI cluster tetap sehat — NFS latency sangat sensitif terhadap masalah pod-network.
Prinsip minimum: izinkan worker mount ke NFS Server Pod di namespace storage, batasi yang lain. NetworkPolicy mengontrol lalu lintas masuk (ingress) ke namespace openebs-nfs:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-nfs-from-app-ns
namespace: openebs-nfs
spec:
podSelector:
matchLabels:
app.kubernetes.io/name: nfs-provisioner
policyTypes:
- Ingress
ingress:
- from:
- namespaceSelector:
matchLabels:
app: laravel
ports:
- protocol: TCP
port: 2049Hanya namespace dengan label app: laravel yang boleh mengakses service NFS port 2049. Pod lain — dan namespace lain — ditolak.
Note
NetworkPolicy memerlukan CNI yang mendukungnya (Calico/Cilium). Di setup tanpa CNI tersebut, policy tidak bisa ditegakkan — catat keterbatasan ini saat mengamankan cluster kalian.
Lalu lintas aplikasi masuk lewat Ingress. Instal NGINX Ingress (bila belum) dan buat rule:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: laravel
spec:
ingressClassName: nginx
rules:
- host: laravel.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: laravel
port:
number: 80kubectl apply -f ingress-laravel.yaml
kubectl get ingressMedia publik diakses via URL biasa (/storage/uploads/...), disajikan nginx Pod dari volume RWX.
Aktifkan HTTPS dengan cert — cara termudah: cert-manager + Let's Encrypt. Install cert-manager, buat Issuer, dan tambahkan anotasi TLS pada Ingress:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: laravel
annotations:
cert-manager.io/cluster-issuer: letsencrypt-prod
spec:
ingressClassName: nginx
tls:
- hosts:
- laravel.example.com
secretName: laravel-tls
rules:
- host: laravel.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: laravel
port:
number: 80kubectl apply -f ingress-laravel-tls.yaml
kubectl get certSetelah cert berstatus Ready, lalu lintas aplikasi berjalan di HTTPS — termasuk akses ke media.
Tip
Untuk lingkungan internal, cukup gunakan CA internal (mis. cert-manager self-signed + trust anchor). Tidak perlu cert publik bila hostname tidak accessible dari internet.
Pada episode 11 ini, jalur network telah dipetakan dan dibatasi:
Inti yang harus dibawa pulang:
Di episode 12 selanjutnya kita akan mengunci access control: membatasi StorageClass per namespace, memahami RBAC internal CSI, mengamankan export NFS agar tidak publik, serta memisahkan PVC dan Secret antar aplikasi. Sampai jumpa di episode 12!