EKS Ağ Yapısı: VPC CNI ve Yük Dengeleme
Pod'ların yerel VPC IP adresleri alması için Amazon VPC CNI eklentisini kullanın ve hizmetleri AWS Load Balancer Controller ile dışa açın.
EKS Ağ Yapısı: VPC CNI ve Yük Dengeleme, CoddyKit'te ücretsiz bir Cloud & IT Cert Prep dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Cloud & IT Cert Prep öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Cloud & IT Cert Prep kursu toplamda 4 dersten oluşur.
Kubernetes Ağ Temelleri
Kubernetes, her Pod'un benzersiz ve yönlendirilebilir bir IP adresine sahip olmasını ve Pod'ların NAT olmadan birbirleriyle iletişim kurmasını gerektirir. Container Network Interface (CNI) eklentisi, IP'leri atamaktan ve çalışan düğümlerde ağ rotalarını yapılandırmaktan sorumludur. Farklı Kubernetes platformları farklı CNI uygulamaları kullanır; AWS, Kubernetes ağını doğrudan VPC katmanıyla bütünleştirmek için Amazon VPC CNI eklentisini kullanır.
Amazon VPC CNI Eklentisi
Amazon VPC CNI eklentisi, her Pod'a doğrudan VPC'nizin alt ağ CIDR aralığından bir IP adresi atar. Bu, Pod'ların VPC'nin birinci sınıf üyeleri olduğu anlamına gelir — Pod'lara diğer VPC kaynaklarından, VPN/Direct Connect üzerinden şirket içi sistemlerden ve güvenlik gruplarından herhangi bir kaplama ağı çevirisi olmadan erişilebilir. Her EC2 çalışan düğümü, Pod'lara zamanlandıkça atanan ikincil özel IP'lerden oluşan bir havuzu (ENI yuvası başına bir tane) tutar.
# Check the VPC CNI version installed in your cluster
kubectl describe daemonset aws-node -n kube-system | grep Image
# View the secondary IPs assigned to a node
aws ec2 describe-network-interfaces \
--filters 'Name=attachment.instance-id,Values=i-0abcdef1234567890' \
--query 'NetworkInterfaces[].PrivateIpAddresses[].PrivateIpAddress'ENI ve Hazır IP Havuzu
VPC CNI eklentisi, Pod'ların hızlı zamanlanmasını sağlamak için her düğümde önceden ayrılmış IP adreslerinden oluşan hazır bir havuz tutar. Bir düğüm başlatıldığında CNI birden çok ENI bağlar ve WARM_IP_TARGET veya MINIMUM_IP_TARGET ortam değişkenlerinde belirtilen sayıya kadar ikincil IP atar. Bu nedenle bir düğümün çalıştırabileceği en fazla Pod sayısı, örneğin türüne göre değişen ENI sayısının ENI başına IP sayısıyla çarpımıyla sınırlıdır.
# Check maximum pods supported by an instance type
aws ec2 describe-instance-types \
--instance-types m5.large \
--query 'InstanceTypes[].NetworkInfo.{MaxENIs:MaximumNetworkInterfaces,IPv4sPerENI:Ipv4AddressesPerInterface}'
# Max pods formula: (MaxENIs x (IPv4sPerENI - 1)) + 2
# m5.large: 3 ENIs x (10-1) + 2 = 29 podsPod'lar için Güvenlik Grupları
Varsayılan olarak bir düğümdeki tüm Pod'lar düğümün güvenlik grubunu paylaşır. Pod'lar için Güvenlik Grupları özelliğiyle, SecurityGroupPolicy özel kaynağını kullanarak belirli Pod'lara ayrı güvenlik grupları atayabilirsiniz. Bu, ayrıntılı ağ erişim denetimi sağlar — örneğin yalnızca bir veritabanı Pod'u, API Pod'unun güvenlik grubundan 5432 numaralı bağlantı noktasındaki trafiği alabilir. Bu özellik için VPC CNI sürüm 1.7.7 veya üzeri ve düğümde bir trunk ENI gerekir.
# Define a SecurityGroupPolicy (custom resource)
apiVersion: vpcresources.k8s.aws/v1beta1
kind: SecurityGroupPolicy
metadata:
name: db-pod-sg-policy
namespace: production
spec:
podSelector:
matchLabels:
role: database
securityGroups:
groupIds:
- sg-0db1234567890abcdEKS'te Kubernetes Hizmet Türleri
Kubernetes Hizmetleri, bir Pod kümesini kararlı bir DNS adı ve IP altında dışarıya açar. EKS'te ilgili üç hizmet türü şunlardır: ClusterIP (yalnızca küme içi iletişim), NodePort (her düğümde bir bağlantı noktası açar — EKS'te nadiren kullanılır) ve LoadBalancer (bir AWS yük dengeleyicisini otomatik olarak tedarik eder). LoadBalancer türü, internete açık EKS hizmetlerinin çoğunun dışarıya açılma biçimidir.
# Expose a deployment with a LoadBalancer service
kubectl expose deployment my-api \
--type=LoadBalancer \
--name=my-api-svc \
--port=80 \
--target-port=8080
# Check the assigned AWS load balancer hostname
kubectl get svc my-api-svc -o wideAWS Load Balancer Controller
AWS Load Balancer Controller, EKS kümeleri adına ALB ve NLB kaynaklarını yöneten açık kaynaklı bir Kubernetes Controller bileşenidir. Bir Kubernetes Ingress nesnesi oluşturduğunuzda Controller bir Application Load Balancer tedarik eder. Doğru ek açıklamalara sahip LoadBalancer türünde bir Service oluşturduğunuzda ise bir Network Load Balancer tedarik eder. Controller, eski küme içi Kubernetes yük dengeleyici sağlayıcısının yerini alır.
# Install AWS Load Balancer Controller with Helm
helm install aws-load-balancer-controller eks/aws-load-balancer-controller \
-n kube-system \
--set clusterName=my-cluster \
--set serviceAccount.create=false \
--set serviceAccount.name=aws-load-balancer-controller \
--set region=us-east-1 \
--set vpcId=vpc-0abc1234def567890ALB ile Kubernetes Ingress
Bir Kubernetes Ingress nesnesi, kümenize yönlendirilecek HTTP/HTTPS trafiği için yol tabanlı ve ana bilgisayar tabanlı yönlendirme kurallarını tanımlar. AWS Load Balancer Controller, kubernetes.io/ingress.class: alb ek açıklamasına sahip Ingress nesnelerini okur ve eşleşen dinleyici kurallarıyla karşılık gelen bir Application Load Balancer oluşturur. Böylece her uygulama hizmeti için ALB'leri ve hedef gruplarını elle oluşturma gereği ortadan kalkar.
# Ingress YAML that creates an ALB
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: api-ingress
namespace: production
annotations:
kubernetes.io/ingress.class: alb
alb.ingress.kubernetes.io/scheme: internet-facing
alb.ingress.kubernetes.io/target-type: ip
spec:
rules:
- http:
paths:
- path: /api
pathType: Prefix
backend:
service:
name: api-svc
port:
number: 80TCP/UDP İş Yükleri için NLB
İş yükünüz HTTP yerine TCP veya UDP gerektirdiğinde — örneğin bir oyun sunucusu, gRPC hizmeti veya veritabanı vekil sunucusu için — ALB yerine NLB kullanın. Kubernetes Service'ini service.beta.kubernetes.io/aws-load-balancer-type: 'external' ve service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: 'ip' ile ek açıklamalı hâle getirin. Controller, daha düşük gecikme için düğüm düzeyindeki bağlantı noktası yönlendirmesini atlayarak Pod IP'lerini doğrudan hedef olarak kullanan bir NLB tedarik eder.
# Service YAML that creates an NLB with IP targets
apiVersion: v1
kind: Service
metadata:
name: grpc-svc
namespace: production
annotations:
service.beta.kubernetes.io/aws-load-balancer-type: 'external'
service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: 'ip'
service.beta.kubernetes.io/aws-load-balancer-scheme: internet-facing
spec:
type: LoadBalancer
selector:
app: grpc-server
ports:
- port: 50051
targetPort: 50051
protocol: TCPKüme İçinde DNS Çözümlemesi
EKS, küme DNS sağlayıcısı olarak CoreDNS'i çalıştırır. Her hizmet, hizmetin ClusterIP adresine çözümlenen service-name.namespace.svc.cluster.local biçiminde bir DNS adı alır. Pod'lar da DNS üzerinden bulunabilir. CoreDNS, DaemonSet değil, bir Deployment olarak dağıtılır ve çoğaltmaları küme boyutuna göre ölçeklendirilmelidir. EKS, CoreDNS'i bir eklenti olarak yönetir ve otomatik sürüm yükseltmelerine olanak tanır.
# Verify DNS resolution from within a pod
kubectl run dns-test --image=busybox --rm -it --restart=Never -- \
nslookup kubernetes.default.svc.cluster.local
# Expected output: Name: kubernetes.default.svc.cluster.local
# Address: 10.100.0.1 (ClusterIP of the kubernetes service)EKS'te Ağ Politikaları
Kubernetes NetworkPolicy nesneleri, Pod'lar arası ve Pod'lardan dışarıya giden trafik için izin kurallarını tanımlar. Varsayılan olarak kümedeki tüm Pod'lar serbestçe iletişim kurabilir. Sıfır güvenli ağ iletişimini zorunlu kılmak için VPC CNI v1.14'ten beri kullanılabilen Amazon VPC CNI ağ politikası Controller bileşenini kurabilirsiniz. Ağ politikaları, kaplama ağı olmadan yüksek performanslı zorunlu kılma sağlamak üzere Linux çekirdeği düzeyinde eBPF kullanılarak değerlendirilir.
# NetworkPolicy: allow traffic to api pods only from frontend pods
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: api-allow-frontend
namespace: production
spec:
podSelector:
matchLabels:
role: api
ingress:
- from:
- podSelector:
matchLabels:
role: frontend
ports:
- protocol: TCP
port: 8080VPC CNI Sorun Giderme İpuçları
Yaygın EKS ağ sorunları arasında IP adreslerinin tükenmesi (prefix delegation özelliğini etkinleştirerek veya daha büyük alt ağlar ekleyerek düzeltilir), düğümde kullanılabilir ikincil IP kalmadığı için Pending durumunda takılı kalan Pod'lar ve yetersiz CoreDNS çoğaltmalarından kaynaklanan aralıklı DNS çözümleme hataları bulunur. Olayları denetlemek için kubectl describe pod, ayrılan IP sayılarını görmek için kubectl describe node ve küme ölçeğinde DNS hata oranlarını izlemek için CloudWatch Container Insights kullanın.
# Enable prefix delegation to increase pod density per node
kubectl set env daemonset aws-node \
-n kube-system \
ENABLE_PREFIX_DELEGATION=true \
WARM_PREFIX_TARGET=1
# Check current IP usage on a node
kubectl describe node ip-10-0-1-100.ec2.internal | grep -A5 'Allocatable'Hızlı Kontrol
Bu derste ele alınan AWS Solutions Architect (SAA-C03) kavramlarını anlayıp anlamadığınızı test edin.
Ders Özeti
Bu derste şunları öğrendiniz: Amazon VPC CNI eklentisi, sorunsuz VPC bütünleştirmesi için her Pod'a yerel VPC IP'leri atar; AWS Load Balancer Controller, HTTP Ingress için ALB'leri ve TCP/UDP Service'leri için NLB'leri tedarik eder; Pod'lar için Güvenlik Grupları ise Pod düzeyinde ağ erişim denetimi sağlar. Sırada, ayrıntılı IAM rollerini Kubernetes hizmet hesaplarına bağlamak için IRSA'yı inceleyeceğiz.
Sıkça Sorulan Sorular
“EKS Ağ Yapısı: VPC CNI ve Yük Dengeleme” dersi ücretsiz mi?
Evet — “EKS Ağ Yapısı: VPC CNI ve Yük Dengeleme” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Cloud & IT Cert Prep kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Cloud & IT Cert Prep kursu toplamda 4 dersten oluşur.
“EKS Ağ Yapısı: VPC CNI ve Yük Dengeleme” dersinde ne öğreneceğim?
Pod'ların yerel VPC IP adresleri alması için Amazon VPC CNI eklentisini kullanın ve hizmetleri AWS Load Balancer Controller ile dışa açın. Cloud & IT Cert Prep ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Cloud & IT Cert Prep öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Cloud & IT Cert Prep, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.
“EKS Ağ Yapısı: VPC CNI ve Yük Dengeleme” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Cloud & IT Cert Prep dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Cloud & IT Cert Prep dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- EKS Denetim Düzlemi ve Çalışan Düğümleri
- Sunucusuz Pod'lar için Fargate Profilleri
- EKS Ağ Yapısı: VPC CNI ve Yük Dengeleme
- Hizmet Hesapları için IAM Rolleri (IRSA)