İçeriğe Atla
Mustafa Erbay
Teknoloji · 11 dk okuma · görüntülenme Read in English
100%

Kubernetes Pod Güvenliği: Network Policies ile Görünmez Savaşlar

Kubernetes'te podlar arası ağ güvenliğini sağlamak için Network Policies'in gücünü keşfedin. Görünmez tehditlere karşı etkili çözümler.

Kubernetes Pod Güvenliği: Network Policies ile Görünmez Savaşlar — kapak görseli

Görünmez Kötü Komşular: Kubernetes Podlar Arası Network Policies Savaşları

Kubernetes, modern uygulamalarımızın iskeletini oluşturan güçlü bir orkestrasyon platformu. Ancak bu gücün getirdiği bir de sorumluluk var: ağ güvenliği. Uygulamalarımız, birbirleriyle sürekli iletişim halinde olan sayısız poddan oluşuyor. Peki, bu podlar arasındaki iletişim ne kadar güvenli? Birbirine sızmaya çalışan kötü niyetli podlar veya yanlış yapılandırılmış servisler, sessiz sedasız sistemimize zarar verebilir. İşte tam bu noktada, Kubernetes Network Policies devreye giriyor.

Bu yazıda, Kubernetes’teki podlar arası ağ iletişimini nasıl kontrol altına alabileceğinizi, görünmez tehditlere karşı nasıl bir savunma hattı kurabileceğinizi derinlemesine inceleyeceğiz. Network Policies’in temellerinden başlayıp, karmaşık senaryolara kadar uzanan bir yolculuğa çıkacağız. Amacımız, cluster’ınızın güvenliğini artırmak ve podlarınızın birbirleriyle sadece izin verilen şekilde konuşmasını sağlamak.

Network Policies Nedir ve Neden Önemlidir?

Kubernetes’te Network Policies, podlara uygulanan ve hangi trafik akışlarının izin verileceğini veya reddedileceğini belirleyen bir dizi kuraldır. Varsayılan olarak Kubernetes, cluster’daki tüm podların birbirleriyle serbestçe iletişim kurmasına izin verir. Bu durum, geliştirme ortamlarında işleri kolaylaştırsa da, üretim ortamlarında ciddi güvenlik riskleri barındırır. Bir pod ele geçirildiğinde, saldırganın aynı ağdaki diğer tüm podlara kolayca erişebilmesi anlamına gelir.

Network Policies, bu “varsayılan-açık” durumu “varsayılan-kapalı” duruma getirerek güvenlik duvarı görevi görür. Belirli etiketlere sahip podların, belirli portlarda ve protokollerde birbirleriyle iletişim kurmasına izin veren kurallar tanımlayarak, ağ segmentasyonu sağlar. Bu, saldırı yüzeyini önemli ölçüde azaltır ve bir podda meydana gelen bir ihlalin diğer podlara yayılmasını engeller.

Network Policies’in Temel Kavramları

Network Policies’i anlamak için bazı temel kavramlara aşina olmak gerekir. Bu kavramlar, kuralları doğru bir şekilde oluşturmamızı sağlar. İlk olarak, podlarınızı etiketlemek (labeling) kritik öneme sahiptir. Network Policies, hedef podları veya kaynak podları tanımlamak için bu etiketleri kullanır. Örneğin, app=backend etiketine sahip podlara yalnızca app=frontend etiketine sahip podların erişmesine izin veren bir kural yazabilirsiniz.

İkinci olarak, Network Policies’in “ingress” (gelen trafik) ve “egress” (giden trafik) kuralları vardır. Ingress kuralları, bir pod’a hangi trafiğin girebileceğini belirlerken, egress kuralları bir pod’dan hangi trafiğin çıkabileceğini kontrol eder. Bu iki yönlü kontrol, ağ akışını tam olarak yönetmenizi sağlar. Ayrıca, Network Policies’de namespace’ler de önemli bir rol oynar. Kurallar, belirli bir namespace içindeki podlara veya farklı namespace’lerdeki podlara uygulanabilir.

Basit Bir Network Policy Oluşturma: Podları İzolasyon Altına Alma

En temel Network Policy senaryosu, bir pod grubunu diğer tüm podlardan izole etmektir. Diyelim ki hassas veriler içeren bir veritabanı podunuz var ve bu podun yalnızca belirli bir uygulama podundan gelen isteklere yanıt vermesini istiyorsunuz. Bunu başarmak için aşağıdaki adımları izleyebilirsiniz:

  1. Veritabanı Podunu Etiketleme: Veritabanı podunuza role=database gibi benzersiz bir etiket atayın.
  2. Uygulama Podunu Etiketleme: Uygulama podunuza role=frontend gibi bir etiket atayın.
  3. Network Policy Oluşturma: Veritabanı poduna gelen trafiği kısıtlayan bir Network Policy tanımlayın. Bu politika, yalnızca role=frontend etiketine sahip podlardan gelen TCP port 5432 (PostgreSQL varsayılan portu) trafiğine izin verecektir.

Aşağıda, bu senaryo için basit bir Network Policy YAML örneği bulunmaktadır:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: database-ingress-policy
  namespace: default # Veritabanı podunun bulunduğu namespace
spec:
  podSelector:
    matchLabels:
      role: database # Bu politika, bu etikete sahip podlara uygulanacak
  policyTypes:
  - Ingress
  ingress:
  - from:
    - podSelector:
        matchLabels:
          role: frontend # Yalnızca bu etikete sahip podlardan gelen trafik
    ports:
    - protocol: TCP
      port: 5432 # Ve bu porta gelen trafik

Bu politika, role=database etiketli podlara sadece role=frontend etiketli podlardan gelen 5432 numaralı TCP portu üzerinden erişime izin verir. Diğer tüm gelen trafik reddedilir.

Gelişmiş Network Policies: Egress Kontrolü ve Namespace’ler Arası İletişim

Sadece gelen trafiği kontrol etmek yeterli değildir. Uygulamalarımızın dış dünya ile veya diğer servislerle olan iletişimini de yönetmemiz gerekebilir. İşte burada egress kuralları devreye girer. Örneğin, bir web sunucusu podunun yalnızca belirli dış API’lere veya başka bir namespace’deki bir servise erişmesine izin vermek isteyebilirsiniz.

Namespace’ler arası iletişim yönetimi de Network Policies ile mümkündür. Bir namespace’deki podların başka bir namespace’deki podlarla iletişim kurmasına izin vermek veya kısıtlamak için politikalar tanımlayabilirsiniz. Bu, özellikle mikroservis mimarilerinde farklı servis gruplarının sorumluluklarını ayırmak için kullanışlıdır.

Örneğin, bir api-gateway podunun user-service namespace’indeki user-api poduna yalnızca HTTP (port 80) üzerinden erişmesine izin veren bir politika oluşturalım:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: api-gateway-egress-to-userservice
  namespace: api-gateway-namespace # API Gateway'in bulunduğu namespace
spec:
  podSelector:
    matchLabels:
      app: api-gateway
  policyTypes:
  - Egress
  egress:
  - to:
    - namespaceSelector:
        matchLabels:
          name: user-service # Hedef namespace'i belirtiyoruz
      podSelector:
        matchLabels:
          app: user-api # Hedef pod'u belirtiyoruz
    ports:
    - protocol: TCP
      port: 80 # Ve bu porta gelen trafik

Bu politika, api-gateway-namespace içindeki app=api-gateway etiketli podun, user-service namespace’indeki app=user-api etiketli pod’a yalnızca 80 numaralı TCP portu üzerinden giden trafiğe izin verir.

Network Policies Uygularken Dikkat Edilmesi Gerekenler

Network Policies güçlü bir araç olsa da, yanlış kullanıldığında beklenmedik sonuçlar doğurabilir. İşte dikkat etmeniz gereken bazı önemli noktalar:

  • CNI Plugin Desteği: Network Policies’in çalışması için kullandığınız Container Network Interface (CNI) plugin’inin Network Policies’i desteklemesi gerekir. Calico, Cilium, Weave Net gibi popüler CNI’ler bu özelliği sunar.
  • Test ve Doğrulama: Politikalarınızı canlı ortama uygulamadan önce mutlaka test ortamlarında deneyin. İletişim akışlarını dikkatlice izleyin ve beklenmedik engellemeler olup olmadığını kontrol edin.
  • Adım Adım Uygulama: Tüm ağınızı birdenbire kısıtlamak yerine, Network Policies’i adım adım uygulayın. Önce belirli bir namespace veya uygulama grubu için başlayın ve zamanla kapsamı genişletin.
  • Dokümantasyon: Oluşturduğunuz Network Policies’leri ve bunların arkasındaki mantığı belgeleyin. Bu, gelecekteki sorun giderme ve değişiklik yönetimi süreçlerinde size yardımcı olacaktır.
  • “Default Deny” Yaklaşımı: Mümkün olan her yerde “varsayılan-reddet” (default deny) prensibini benimseyin. Yani, açıkça izin vermediğiniz hiçbir trafiğe izin vermeyin. Bu, en güvenli yaklaşımdır.

Yaygın Sorunlar ve Çözümleri

Network Policies ile çalışırken karşılaşabileceğiniz bazı yaygın sorunlar şunlardır:

  • Podların İletişim Kuramaması: Bu genellikle eksik veya yanlış yapılandırılmış bir Network Policy’den kaynaklanır. kubectl describe networkpolicy <policy-name> komutu ile politikanızın detaylarını inceleyin ve pod etiketlerinizin doğru olduğundan emin olun.
  • DNS Çözümleme Sorunları: Podlar DNS sunucusuna erişemiyorsa, bu da bir Network Policy kuralı tarafından engelleniyor olabilir. DNS sunucusunun IP adresine ve portuna (genellikle UDP 53) giden trafiğe izin veren bir egress kuralı eklemeniz gerekebilir.
  • Uygulama Crash’leri: Uygulamanızın ihtiyaç duyduğu tüm portlara ve servislere erişim izni verdiğinizden emin olun. Özellikle dış servislere veya diğer mikroservislere erişimdeki kısıtlamalar uygulamaların çökmesine neden olabilir.

Sonuç: Güvenli Bir Kubernetes Geleceği İnşa Etmek

Kubernetes Network Policies, podlar arası ağ iletişimini güvenli hale getirmek için vazgeçilmez bir araçtır. Görünmez kötü komşular, yani potansiyel tehditler ve hatalı yapılandırmalar karşısında etkili bir savunma hattı oluştururlar. Bu yazıda, Network Policies’in temellerini, anahtar kavramlarını ve basit ile gelişmiş kullanım senaryolarını ele aldık.

Unutmayın ki güvenlik, sürekli bir çabadır. Network Policies’i doğru bir şekilde uygulayarak, Kubernetes cluster’ınızın direncini artırabilir ve verilerinizi güvende tutabilirsiniz. Güvenli bir bulut yerel (cloud-native) gelecek inşa etmek, ağ güvenliğine gösterdiğimiz özenle başlar. Podlarınızın birbirleriyle sadece izin verilen şekilde konuşmasını sağlayarak, daha sağlam ve güvenilir sistemler kurabilirsiniz.

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