videoNetwork Policies Demo

Ortamımız: Cluster'ımızda frontend, backend ve database adında 3 farklı Pod çalışıyor.

Amacımız: Sistemi tamamen dış dünyaya ve izinsiz iç erişimlere kapatıp, SADECE frontend'in backend'e (80 portundan) ulaşabilmesini sağlamak.

Aşama 1: Mevcut Durumu (Tehlikeyi) Görmek

Kubernetes'te varsayılan olarak tüm Pod'lar birbiriyle ve dış dünyayla özgürce konuşabilir. Önce bu durumu test edelim.

# 1. Frontend'den Backend'e ping at (Başarılı olur)
kubectl exec -it frontend -- curl -m 3 http://backend

# 2. Frontend'den internete ping at (Başarılı olur)
kubectl exec -it frontend -- ping -c 1 google.com

Sonuç: Şu an sistemimiz tamamen korumasız, herkes her yere gidebiliyor.

Aşama 2: Tüm Kapıları Kilitlemek (Default Deny)

Önce her şeyi yasaklayan iki temel kural yazıyoruz: Hem gelen (Ingress) hem giden (Egress) trafiği tamamen kesiyoruz.

1. Default Deny Ingress (Gelişleri Yasakla) YAML:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default-deny-ingress
spec:
  podSelector: {}    # Süslü parantez boş, yani "Tüm Pod'ları seç"
  policyTypes:
  - Ingress

2. Default Deny Egress (Çıkışları Yasakla) YAML:

Bu iki dosyayı (kubectl apply -f ... ile) sisteme yükledikten sonra Aşama 1'deki testleri tekrar yaparsan, tüm ping isteklerinin "Timeout" (Zaman Aşımı) yediğini göreceksin. Sistem artık %100 kapalı bir kutu.

Aşama 3: Sadece İhtiyaç Olan İletişime İzin Vermek (Specific Allow)

Şimdi kapalı kutumuzda sadece tek bir delik açacağız: frontend, backend'in 80 (HTTP) portuna gidebilsin. Bunun için iki tarafın da güvenlik görevlisine emir vermeliyiz.

1. Backend'in Kapısındaki Görevliye Emir (Allow Ingress):

"Eğer sana gelen kişi 'frontend' ise ve 80 portuna girmek istiyorsa, onu içeri al."

2. Frontend'in Kapısındaki Görevliye Emir (Allow Egress):

"Eğer dışarı çıkıp 'backend' isimli hedefin 80 portuna gideceksen, çıkışına izin veriyorum."

Aşama 4: Sonuçları Doğrulama

Kuralları yükledikten sonra testlerimizi yapıyoruz:

Önemli Teknik Not: Bu aşamadan sonra frontend'den backend'e ping atmaya çalışırsan başarısız olur. Neden mi? Çünkü biz kurallarda sadece TCP Port 80'e izin verdik. Ping komutu ise portları kullanmaz, ICMP adında farklı bir protokol kullanır ve biz ICMP'ye izin vermedik. Bu, Network Policy'nin ne kadar nokta atışı çalıştığının en güzel kanıtıdır!

Last updated