Kubernetes Network Policy Türleri ve Örnekler
Kubernetes, kapsayıcıların sorunsuz bir şekilde yönetilmesini ve dağıtılmasını sağlayan açık kaynaklı bir platformdur. Kubernetes ağ politikaları (Network Policies), podlar arasındaki ve podlar ile diğer ağ bileşenleri arasındaki trafiği kontrol etmek için kullanılır. Bu makalede, Kubernetes ağ politikalarının türlerini, uygulamalarını ve çeşitli örnekleri detaylandıracağız.
1. Giriş
Kubernetes, kapsayıcıların yönetimini ve ölçeklenmesini kolaylaştıran bir orkestrasyon aracıdır. Ağ politikaları, Kubernetes’te ağ trafiğini kontrol etmek için kullanılan güçlü araçlardır. Bu politikalar, güvenliği artırmak ve ağ trafiğini optimize etmek için podlar arasındaki iletişimi kontrol eder.
2. Kubernetes Ağ Politikalarının Türleri
Kubernetes ağ politikaları, iki ana türe ayrılır: Ingress (Giriş) politikaları ve Egress (Çıkış) politikaları. Ayrıca, bazı politikalar hem ingress hem de egress trafiğini kontrol edebilir.
2.1. Ingress (Giriş) Politikaları
Ingress politikaları, belirli bir pod’a dışarıdan gelen trafiği kontrol eder. Bu politikalar, podlara yalnızca belirli kaynaklardan gelen trafiğe izin vermek için kullanılır.
Örnek 1: Belirli Podlardan Giriş Trafiğine İzin Verme
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-ingress-from-frontend
namespace: default
spec:
podSelector:
matchLabels:
app: backend
policyTypes:
- Ingress
ingress:
- from:
- podSelector:
matchLabels:
app: frontend
ports:
- protocol: TCP
port: 80
Bu politika, default
isim alanındaki backend
etiketine sahip podlara, frontend
etiketine sahip podlardan gelen 80 numaralı porttaki TCP trafiğine izin verir.
2.2. Egress (Çıkış) Politikaları
Egress politikaları, bir pod’dan dışarıya doğru giden trafiği kontrol eder. Bu politikalar, podlardan yalnızca belirli hedeflere giden trafiğe izin vermek için kullanılır.
Örnek 2: Belirli IP Bloklarına Çıkış Trafiğine İzin Verme
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-egress-to-database
namespace: default
spec:
podSelector:
matchLabels:
app: backend
policyTypes:
- Egress
egress:
- to:
- ipBlock:
cidr: 192.168.0.0/16
ports:
- protocol: TCP
port: 5432
Bu politika, default
isim alanındaki backend
etiketine sahip podlardan, 192.168.0.0/16
IP bloğundaki 5432 numaralı portta bulunan veritabanı sunucusuna giden TCP trafiğine izin verir.
2.3. Hem Ingress Hem Egress Politikaları
Bazı durumlarda, hem giriş hem de çıkış trafiğini kontrol etmek gerekebilir. Bu tür politikalar, daha kapsamlı bir güvenlik sağlar.
Örnek 3: Belirli Podlardan Giriş ve Belirli IP Bloklarına Çıkış Trafiğini İzin Verme
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: frontend-policy
namespace: default
spec:
podSelector:
matchLabels:
app: frontend
policyTypes:
- Ingress
- Egress
ingress:
- from:
- podSelector:
matchLabels:
app: backend
ports:
- protocol: TCP
port: 80
egress:
- to:
- ipBlock:
cidr: 192.168.1.0/24
ports:
- protocol: TCP
port: 3306
Bu politika, frontend
etiketine sahip podlara, backend
etiketine sahip podlardan gelen 80 numaralı porttaki TCP trafiğine izin verir. Ayrıca, frontend
podlarının 192.168.1.0/24
IP bloğundaki 3306 numaralı portta bulunan MySQL sunucusuna giden TCP trafiğine izin verir.
3. Uygulama ve Kullanım Örnekleri
Kubernetes ağ politikalarının uygulanması, ağ güvenliğini artırmak ve ağ trafiğini optimize etmek için gereklidir. Aşağıda, çeşitli kullanım senaryolarına ilişkin örnekler verilmiştir.
3.1. Güvenlik Gruplarının Tanımlanması
Ağ politikaları, podlar arasında güvenlik grupları oluşturmak için kullanılabilir. Örneğin, yalnızca belirli mikro hizmetlerin birbirleriyle iletişim kurmasına izin veren politikalar tanımlanabilir.
3.2. Trafik Yönetimi ve Optimizasyonu
Ağ politikaları, ağ trafiğini optimize etmek için kullanılabilir. Örneğin, yoğun trafikli hizmetlerin belirli podlara yönlendirilmesi ve diğer podların bu trafikten korunması sağlanabilir.
Ağ Gecikmesi ve Performans
Ağ politikalarının uygulanması, ağ gecikmesi üzerinde de etkili olabilir. Ek kontrol ve filtreleme mekanizmaları, ağ trafiğinin işlenmesi süresini uzatabilir, bu da gecikmeye neden olabilir.
- Filtreleme Gecikmesi: Ağ politikalarının uygulanması, her bir paketin politikalar doğrultusunda filtrelenmesini gerektirir. Bu ek adım, ağ paketlerinin işlenme süresini uzatabilir ve gecikmeye yol açabilir.
- Yönlendirme Gecikmesi: Politikaların uygulanması, trafiğin belirli yollar üzerinden yönlendirilmesini gerektirebilir. Bu, ağdaki yönlendirme sürelerini artırabilir.
Ağ Bant Genişliği Kullanımı
Ağ politikaları, belirli trafik yollarını kısıtlayarak veya yönlendirerek ağ bant genişliği kullanımını etkileyebilir. Politikaların uygulanması, belirli yolların yoğun kullanılmasına neden olabilir, bu da bant genişliği kullanımını optimize etme gereğini doğurabilir.
- Yoğunluk Dağılımı: Belirli politikaların uygulanması, belirli ağ yollarının daha yoğun kullanılmasına neden olabilir. Bu, ağda dengesiz bant genişliği kullanımına yol açabilir.
- Trafik Yönlendirme: Belirli trafik yollarının kısıtlanması, alternatif yolların daha fazla kullanılmasına neden olabilir. Bu, ağ bant genişliği kullanımını etkileyebilir.
Ölçeklenebilirlik
Ağ politikalarının karmaşıklığı ve sayısı arttıkça, Kubernetes kümesinin ölçeklenebilirliği üzerinde de etkileri olabilir. Politikaların yönetimi ve uygulanması, büyük ölçekli dağıtımlarda zorluklar yaratabilir.
- Politika Yönetimi: Büyük ölçekli dağıtımlarda, çok sayıda ağ politikasının yönetimi karmaşık hale gelebilir. Bu, yönetim yükünü artırabilir.
- Uygulama Performansı: Çok sayıda politikanın uygulanması, ağ performansını ve sistemin genel ölçeklenebilirliğini olumsuz etkileyebilir.
Sonuç
Kubernetes ağ politikalarının uygulanması, ağ güvenliğini ve trafiğin yönetimini iyileştirmek için önemli avantajlar sunar. Ancak, bu politikaların kaynak kullanımı üzerinde de belirli etkileri vardır. CPU ve bellek kullanımı artışı, ağ gecikmesi, bant genişliği kullanımı ve ölçeklenebilirlik gibi faktörler, ağ politikalarının uygulanmasında dikkate alınması gereken önemli unsurlardır. Bu etkilerin anlaşılması, Kubernetes ağ politikalarının etkin ve verimli bir şekilde kullanılmasına yardımcı olabilir.