ACK kümelerini güvence altına almak için pod trafiğini ağ ilkeleriyle kısıtlayın ve iletim halindeki verileri şifreleyin.
Ağ ilkeleri ve güvenlik grupları
Ağ ilkeleri ve güvenlik grupları farklı katmanlarda çalışır. Derinlemesine savunma sağlamak amacıyla bunları birlikte kullanın.
| Mekanizma | Kapsam | En uygun olduğu durumlar |
|---|---|---|
| Ağ ilkeleri | Pod'dan pod'a trafik (doğu-batı trafiği) ve pod'lar ile harici hizmetler arasındaki trafik | Mikroservisler, ad alanları veya belirli pod'lar arasındaki iletişimi kısıtlama |
| Güvenlik grupları | Düğümler, diğer VPC kaynakları ve harici IP adresleri arasındaki düğüm düzeyi ve Sanal Özel Cloud (VPC) düzeyi trafik | Altyapı katmanında kümeye gelen ve kümeden giden erişimi kontrol etme |
Altyapı düzeyindeki erişimi kısıtlamak için güvenlik gruplarını, küme içinde ayrıntılı pod düzeyinde yalıtımı uygulamak için ağ ilkelerini kullanın.
Ağ ilkeleriyle pod'dan pod'a trafiği kısıtlama
Varsayılan olarak bir Kubernetes kümesindeki tüm pod'lar serbestçe iletişim kurabilir; bu durum güvenlik riskleri oluşturur. Ağ ilkeleri, pod'lar arasındaki (doğu-batı) trafiği ve pod'lar ile harici hizmetler arasındaki trafiği kısıtlar.
Ağ ilkeleri, kaynak ve hedef pod'ları tanımlamak için pod seçicileri ve etiketleri kullanır. Her ilke, IP adresine, bağlantı noktasına, protokole veya bunların herhangi bir kombinasyonuna göre filtreleme yapabilir.
Terway ağ eklentisiyle, ağ ilkelerini kullanarak trafiği IP adresi veya bağlantı noktası düzeyinde kontrol edebilirsiniz. Ayrıca bkz. Kubernetes Network Policy Recipes.
Yalnızca Terway kümeleri Kubernetes ağ ilkelerini destekler. 100'den fazla düğümü olan kümelerde ilke proxy'si denetim düzlemi yükünü artırabilir. Bkz. Terway modundaki büyük bir ACK kümesi için NetworkPolicy özelliğinin performansını iyileştirme.
Önerilen yaklaşım: varsayılan olarak reddet, ardından izin ver
En az ayrıcalık ilkesini uygulayın: Varsayılan olarak tüm trafiği reddedin, ardından her iş yükünün ihtiyaç duyduğu öğelere yalnızca izin verecek kurallar ekleyin.
Varsayılan bir reddetme ilkesi oluşturun -- Ad alanındaki tüm gelen ve giden trafiği engelleyin.
DNS sorgularına izin verin -- Pod'ların çalışması için DNS çözümlemesi gerekir.
Belirli trafiğe izin verin -- Yalnızca her iş yükünün gerektirdiği yolları açın.
Adım 1: Varsayılan bir reddetme ilkesi oluşturma
Bir ad alanındaki tüm gelen ve giden trafiği reddetmek için bir ağ ilkesi oluşturun veya genel bir ilke için Calico kullanın.
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny
namespace: default
spec:
podSelector: {}
policyTypes:
- Ingress
- Egress
Adım 2: DNS sorgularına izin verme
Varsayılan bir reddetme ilkesiyle pod'lar DNS adlarını çözümleyemez. CoreDNS'e DNS sorgularına izin veren bir ilke oluşturun.
-
kube-systemad alanına bir etiket ekleyin:kubectl label namespace kube-system name=kube-system -
UDP bağlantı noktası 53 üzerinden CoreDNS'e giden trafiğe izin veren bir ağ ilkesi oluşturun:
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-dns-access namespace: default spec: podSelector: matchLabels: {} policyTypes: - Egress egress: - to: - namespaceSelector: matchLabels: name: kube-system ports: - protocol: UDP port: 53
Bkz. Ağ İlkeleri.
Adım 3: Belirli pod'lardan gelen trafiğe izin verme
Reddetme ve DNS ilkeleri yerindeyken, trafiğe yalnızca yetkili pod'lardan gelen isteklere izin verin. Yaygın kullanım senaryoları:
Bir uygulamaya erişime yalnızca belirli mikroservislerin izin vermesi.
Bir veritabanına erişime yalnızca belirli uygulamaların izin vermesi.
Bu örnekte bir pod oluşturulur ve gelen trafik app: bookstore etiketine sahip pod'larla sınırlandırılır.
-
app=bookstoreverole=apietiketlerine sahip bir pod oluşturun:kubectl run apiserver --image=nginx --labels="app=bookstore,role=api" --expose --port=80 -
Gelen trafiğe yalnızca
app: bookstoreetiketine sahip pod'lardan izin veren bir ağ ilkesi uygulayın:kind: NetworkPolicy apiVersion: networking.k8s.io/v1 metadata: name: api-allow spec: podSelector: matchLabels: app: bookstore role: api ingress: - from: - podSelector: matchLabels: app: bookstore -
app=bookstoreetiketine sahip olmayan pod'ların erişiminin reddedildiğini doğrulayın:kubectl run test-$RANDOM --rm -i -t --image=alpine -- sh/ # wget -qO- --timeout=2 http://apiserver wget: download timed out -
app=bookstoreetiketine sahip pod'ların sunucuya erişebildiğini doğrulayın:kubectl run test-$RANDOM --rm -i -t --image=alpine --labels="app=bookstore,role=frontend" -- sh/ # wget -qO- --timeout=2 http://apiserver <!DOCTYPE html> <html><head>
Bir ad alanında pod'lar arasında özel kurallar ekleme
Bir ad alanı içindeki pod iletişimine izin verdikten sonra, daha ayrıntılı kontrol sağlamak üzere özel kurallar eklemek için Kubernetes Network Policy Recipes kaynağını kullanın.
Güvenlik gruplarıyla düğüm düzeyi trafiği kontrol etme
ACK, ana ve çalışan düğümler arasında; çalışan düğümler, diğer VPC kaynakları ve harici IP adresleri arasındaki trafiği yönetmek için güvenlik gruplarını kullanır.
ACK, bir küme oluşturduğunuzda düğüm iletişimi için otomatik olarak bir güvenlik grubu oluşturur. En az ayrıcalık ilkesini uygulamak için önerilen gelen ve giden kuralları ekleyin.
Bkz. Farklı senaryolarda güvenlik gruplarını yapılandırma ve Güvenlik grubu yapılandırma.
Akış günlükleriyle trafiği izleme ve analiz etme
VPC akış günlükleri, esnek ağ arabirimlerinin (ENI) gelen ve giden trafiğini kaydeder. Akış günlüklerini şu amaçlarla kullanın:
Erişim kontrol listesi (ACL) kurallarını doğrulama
Ağ trafiğini izleme
Ağ sorunlarını giderme
Bir VPC'deki kaynaklar (pod'lar dahil) arasındaki anormal trafiği belirleme
İletim halindeki verileri şifreleme
-
Service Mesh (ASM)
Service Mesh (ASM), hizmetler arasındaki verileri şifreler. ASM aşağıdakileri destekler:
Hizmetler arasında Karşılıklı Taşıma Katmanı Güvenliği (mTLS) kimlik doğrulaması
Hizmet ağ geçitlerinde HTTPS ve dinamik sertifika yükleme için Envoy Secret Discovery Service (SDS)
Application High Availability Service (AHAS) ile entegre olan ASM örneklerindeki uygulamalar için trafik yönetimi
İz haritalama, çağrı sayma, topoloji ve bağımlılık analizi için Tracing Analysis ile entegre olan dağıtılmış izleme
-
TLS for Ingress
Ingress aracılığıyla dışa açılan hizmetler için HTTPS'yi etkinleştirin. TLS'yi yapılandırmak için bir Secret kullanma.