İçeriğe Atla
Mustafa Erbay
Teknoloji kubernetes-uretim-guvenlik · 8 dk okuma · görüntülenme Read in English
100%

Kubernetes Network Policies: Podlar Arası İletişimde Görünmez Duvarlar

Kubernetes Network Policies ile podlar arasındaki ağ trafiğini nasıl güvenli hale getirebileceğinizi öğrenin. Detaylı rehber ve örneklerle A'dan Z'ye Network…

Kubernetes Network Policies: Podlar Arası İletişimde Görünmez Duvarlar — kapak görseli

Kubernetes Network Policies: Podlar Arası İletişimde Görünmez Duvarlar

Kubernetes ekosisteminde, uygulamalarımızın güvenliği ve izolasyonu en kritik konulardan biridir. Uygulamalarınızın farklı bileşenleri olan podlar arasındaki iletişim, varsayılan olarak herhangi bir kısıtlama olmaksızın gerçekleşir. Bu durum, özellikle karmaşık ve mikroservis tabanlı mimarilerde ciddi güvenlik açıkları yaratabilir. İşte tam bu noktada Kubernetes Network Policies devreye girer. Network Policies, podlarınız arasında görünmez duvarlar örerek ağ trafiğini kontrol etmenizi ve güvenliği artırmanızı sağlar.

Bu yazıda, Kubernetes Network Policies’in ne olduğunu, neden önemli olduğunu, nasıl çalıştığını ve pratik uygulamalarını detaylı bir şekilde inceleyeceğiz. Amacımız, bu güçlü aracı kullanarak Kubernetes ortamınızda ağ güvenliğini en üst düzeye çıkarmanıza yardımcı olmaktır. Hazırsanız, podlarınız arasındaki iletişimi daha güvenli hale getirme yolculuğumuza başlayalım!

Kubernetes Network Policies Nedir ve Neden Önemlidir?

Kubernetes Network Policies, kümenizdeki podlar arasındaki ağ trafiğini segmentlere ayırmak ve kontrol etmek için kullanılan bir API nesnesidir. Temel olarak, hangi podların birbirleriyle ve hangi portlar üzerinden iletişim kurabileceğini belirleyen kurallar tanımlamanıza olanak tanır. Bu, “least privilege” (en az ayrıcalık) prensibini ağ katmanında uygulamanın etkili bir yoludur.

Varsayılan olarak Kubernetes, podlar arasında herhangi bir ağ kısıtlaması getirmez. Bu, bir podun kümedeki başka herhangi bir poda veya servise erişebileceği anlamına gelir. Güvenlik açısından bakıldığında bu durum, bir pod ele geçirildiğinde saldırganın diğer podlara kolayca yayılabilmesi gibi ciddi riskler taşır. Kubernetes Network Policies, bu “açık kapıyı” kapatarak güvenlik duruşunuzu önemli ölçüde güçlendirir.

Network Policies’in önemi, özellikle aşağıdaki senaryolarda daha belirgin hale gelir:

  • Güvenlik İzolasyonu: Hassas verilerle çalışan podları, diğer podlardan izole etmek.
  • Saldırı Yüzeyini Azaltma: Bir pod ele geçirildiğinde, saldırganın küme içinde yayılmasını zorlaştırmak.
  • Uyumluluk Gereksinimleri: PCI DSS gibi bazı uyumluluk standartları, ağ segmentasyonu ve erişim kontrolü gerektirir.
  • Servis Bağımlılıklarını Yönetme: Servislerin yalnızca izin verilen diğer servislere erişebildiğinden emin olmak.

Kubernetes Network Policies Nasıl Çalışır?

Kubernetes Network Policies, varsayılan olarak tüm trafiğe izin veren bir “allow-all” kuralı ile başlar. Ancak, bir Network Policy tanımladığınızda, bu varsayılan kural üzerine eklemeler yapılır. Network Policy, seçtiği podlara gelen (ingress) ve giden (egress) trafiği tanımlanan kurallara göre filtreler.

Bir Network Policy’nin temel bileşenleri şunlardır:

  1. podSelector: Hangi podlara uygulanacağını belirler. Boş bir podSelector tüm podları kapsar.
  2. policyTypes: Bu politikanın Ingress, Egress veya her ikisini mi kontrol edeceğini belirtir.
  3. ingress Kuralları: Pod’a gelen trafiği kontrol eder. Hangi kaynak IP’lerden, hangi portlara izin verileceğini tanımlar.
  4. egress Kuralları: Pod’dan giden trafiği kontrol eder. Hangi hedef IP’lere, hangi portlara izin verileceğini tanımlar.

Trafik filtreleme işlemi, tanımlanan kurallara göre yapılır. Eğer bir trafik kurala uymuyorsa, varsayılan olarak reddedilir. Bu, “deny-all” mantığına dayanır; yani, açıkça izin verilmeyen her şey engellenir. Bu nedenle, Network Policies tasarlarken dikkatli olmak ve gerekli tüm trafiğe izin verdiğinizden emin olmak önemlidir.

Temel Network Policy Senaryoları ve Örnekler

Şimdi Kubernetes Network Policies kullanarak bazı yaygın senaryoları nasıl uygulayabileceğimize dair örneklere göz atalım. Bu örnekler, politikanın temel yapı taşlarını anlamanıza yardımcı olacaktır.

Senaryo 1: Tüm Gelen Trafiği Reddetme (Varsayılan Güvenlik)

Genellikle, bir namespace’deki tüm podlara dışarıdan veya kümenin başka yerlerinden gelen trafiği varsayılan olarak engellemek istersiniz. Bunu yapmak için, hiçbir ingress kuralı belirtmeyen ve tüm podları hedefleyen bir Network Policy oluşturabilirsiniz.

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: deny-all-ingress
  namespace: default
spec:
  podSelector: {} # Tüm podları seçer
  policyTypes:
  - Ingress
  # Ingress kuralları boş bırakıldığında, gelen tüm trafik reddedilir.

Bu politika, default namespace’indeki tüm podlara gelen hiçbir trafiğe izin vermeyecektir. Yalnızca bu podlara özel olarak izin veren diğer Network Policies oluşturarak kontrollü bir erişim sağlayabilirsiniz.

Senaryo 2: Belirli Bir Pod Grubuna Gelen Trafiğe İzin Verme

Şimdi, app=backend label’ına sahip podlarımıza, role=frontend label’ına sahip podlardan gelen trafiğe izin veren bir politika oluşturalım.

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-frontend-to-backend
  namespace: default
spec:
  podSelector:
    matchLabels:
      app: backend # Bu politika 'app: backend' etiketli podlara uygulanır
  policyTypes:
  - Ingress
  ingress:
  - from:
    - podSelector:
        matchLabels:
          role: frontend # 'role: frontend' etiketli podlardan gelen trafiğe izin ver
    ports:
    - protocol: TCP
      port: 8080 # Sadece 8080 portuna izin ver

Bu politika, default namespace’indeki app: backend etiketine sahip podlara yalnızca role: frontend etiketine sahip podlardan TCP protokolü ile 8080 portuna gelen trafiğe izin verir. Diğer tüm gelen trafik reddedilecektir.

Senaryo 3: Pod’dan Giden Trafiği Kısıtlama (Egress)

Bazen, bir podun yalnızca belirli servislere veya IP adreslerine erişebilmesini sağlamak isteyebilirsiniz. Bu, hassas verileri işleyen veya yalnızca belirli dış servislere bağlanması gereken podlar için önemlidir.

Örneğin, app=database etiketli podumuzun yalnızca küme içi app=redis etiketli pod’a 6379 portundan ve belirli bir dış IP adresine (örneğin 1.2.3.4) 443 portundan TCP ile erişmesine izin verelim.

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: limit-db-egress
  namespace: default
spec:
  podSelector:
    matchLabels:
      app: database # Bu politika 'app: database' etiketli podlara uygulanır
  policyTypes:
  - Egress
  egress:
  - to:
    - podSelector:
        matchLabels:
          app: redis # Redis pod'una erişim izni
    ports:
    - protocol: TCP
      port: 6379
  - to:
    - ipBlock:
        cidr: 1.2.3.4/32 # Belirli bir dış IP adresine erişim izni
    ports:
    - protocol: TCP
      port: 443

Bu politika ile app: database podunun giden trafiği, yalnızca belirtilen Redis pod’u ve dış IP adresine, belirtilen portlardan TCP ile mümkün olacaktır. Diğer tüm giden istekler engellenecektir.

Network Policies Geliştirirken Dikkat Edilmesi Gerekenler

Kubernetes Network Policies uygularken dikkatli olmak, beklenmedik kesintileri önlemek ve güvenlik açıklarını kapatmak için kritiktir. İşte bazı önemli noktalar:

  1. “Default Deny” Yaklaşımı: Mümkün olduğunca “deny-all” mantığını benimseyin. Yani, yalnızca açıkça izin verilen trafiğe izin verin. Bu, en güvenli yaklaşımdır.
  2. Kapsamlı Test: Politikalarınızı canlı ortama uygulamadan önce mutlaka test ortamında kapsamlı bir şekilde test edin. Uygulamanızın düzgün çalışması için gereken tüm trafiğin izin verildiğinden emin olun.
  3. Label Stratejisi: Network Policies, podları etiketlerine göre seçtiği için, tutarlı ve anlamlı bir etiketleme stratejisi kullanmak çok önemlidir.
  4. CNI Uyumluluğu: Kullandığınız CNI plugin’inin Network Policies’i tam olarak desteklediğinden ve güncel olduğundan emin olun.
  5. Namespace Bazlı Uygulama: Network Policies genellikle bir namespace içinde tanımlanır ve o namespace’deki podlara uygulanır. Farklı namespace’ler arasındaki iletişimi yönetmek için NamespaceSelector kullanabilirsiniz.

Ayrıca, Network Policies’in katman 3/4’te çalıştığını unutmamak önemlidir. Yani, TCP/UDP portlarını ve IP adreslerini kontrol eder. HTTP header’ları gibi katman 7 bilgilerini filtrelemek için daha gelişmiş çözümlere (örneğin Ingress Controller’lar veya Service Mesh’ler) ihtiyaç duyulabilir.

Network Policies Yönetimi ve İzleme

Network Policies’i etkili bir şekilde yönetmek ve izlemek, güvenli bir Kubernetes ortamı sürdürmenin ayrılmaz bir parçasıdır.

Yönetim Araçları:

  • kubectl: Network Policies’i oluşturmak, güncellemek ve silmek için temel araçtır.
  • GitOps Araçları (Argo CD, Flux): Network Policies’inizi kod olarak yönetmek ve sürümlendirmek için GitOps prensiplerini kullanmak, tutarlılık ve geri alınabilirlik sağlar.
  • Network Policy Editörleri: Bazı araçlar, görsel arayüzler aracılığıyla Network Policies oluşturmayı kolaylaştırır.

İzleme ve Analiz:

  • CNI Plugin Logları: Kullandığınız CNI plugin’inin logları, politika ihlallerini veya reddedilen trafiği anlamanıza yardımcı olabilir.
  • Proje Bazlı İzleme Araçları: Prometheus, Grafana gibi araçlarla ağ trafiğini ve politika uygulamalarını izleyebilirsiniz.
  • Packet Analizi: Gerekli durumlarda tcpdump gibi araçlarla pod seviyesinde paket analizi yaparak sorunları teşhis edebilirsiniz.

Sonuç

Kubernetes Network Policies, podlar arasındaki ağ iletişimini güvenli hale getirmek için vazgeçilmez bir araçtır. Uygulamalarınızın güvenliğini artırmak, saldırı yüzeyini azaltmak ve uyumluluk gereksinimlerini karşılamak için bu teknolojiyi benimsemek büyük önem taşır. Varsayılan olarak her şeye izin veren bir ortamdan, yalnızca ihtiyaç duyulan iletişime izin veren kontrollü bir ortama geçiş yapmak, güvenlik duruşunuzu önemli ölçüde güçlendirecektir.

Bu yazıda, Network Policies’in ne olduğunu, nasıl çalıştığını, temel senaryoları ve dikkat edilmesi gereken noktaları ele aldık. Unutmayın ki Network Policies’i etkili kullanmak, dikkatli planlama, kapsamlı test ve sürekli izleme gerektirir. Kubernetes ortamınızda güvenliği bir öncelik haline getirerek, uygulamalarınızı daha sağlam ve güvenli bir şekilde çalıştırabilirsiniz.

Umarım bu rehber, Kubernetes Network Policies’i daha iyi anlamanıza ve kendi ortamlarınızda uygulamaya başlamanıza yardımcı olmuştur. Güvenli kodlama ve güvenli altyapılar dileğiyle!

Paylaş:

Bu yazı faydalı oldu mu?

Yükleniyor...

Bu yazı nasıldı?

ME

Mustafa Erbay

Sistem Mimarisi · Network Uzmanı · Altyapı, Güvenlik ve Yazılım

2006'dan bu yana sistem mimarisi, network, sunucu altyapıları, büyük yapıların kurulumu, yazılım ve sistem güvenliği ekseninde çalışıyorum. Bu blogda sahada karşılığı olan teknik deneyimlerimi paylaşıyorum.

Kişisel Notlar

Bu notlar sadece sizde saklanır. Tarayıcınızda yerel olarak tutulur.

Hazır 0 karakter

Yorumlar

Sunucu Taraflı AI Moderasyon

Yorumlar sunucuda yapay zeka ile denetlenir ve kalıcı olarak saklanır.

?
0/2000

Sunucu taraflı AI denetim

✉️ Ücretsiz · Spam yok · İstediğin an çık

Haftalık özet — AI değil, bizzat ben seçiyorum

Haftada bir mail: o haftanın en önemli yazısı, perde arkası notları, ve "bu hafta gerçekten kullandığım araç" bölümü. Az gürültü, çok sinyal.

  • 📌
    Haftanın en iyisi Sadece okumaya değer tek yazı
  • 🔧
    Alet çantası Bu hafta kullandığım araçlar
  • 🧠
    Perde arkası Blog'a girmeyen notlar

Spam yapmıyoruz. İstediğiniz zaman ayrılabilirsiniz. · Sadece Umami (self-hosted, Google yok) ile takip.

Okuma İstatistikleriniz

0

Yazı Okundu

0dk

Okuma Süresi

0

Gün Serisi

-

Favori Kategori

İlgili Yazılar