Jaringan EKS: VPC CNI dan Penyeimbangan Beban
Gunakan plugin Amazon VPC CNI agar pod memperoleh alamat IP VPC asli, lalu tampilkan layanan dengan AWS Load Balancer Controller.
Jaringan EKS: VPC CNI dan Penyeimbangan Beban adalah pelajaran Cloud & IT Cert Prep gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Cloud & IT Cert Prep, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Cloud & IT Cert Prep mencakup 4 pelajaran total.
Dasar-Dasar Jaringan Kubernetes
Kubernetes mengharuskan setiap pod memiliki alamat IP unik yang dapat dirutekan, serta memungkinkan pod berkomunikasi satu sama lain tanpa NAT. Plugin Container Network Interface (CNI) bertanggung jawab menetapkan IP dan mengonfigurasi rute jaringan pada node pekerja. Platform Kubernetes yang berbeda menggunakan implementasi CNI yang berbeda; AWS menggunakan plugin Amazon VPC CNI untuk mengintegrasikan jaringan Kubernetes langsung ke lapisan VPC.
Plugin Amazon VPC CNI
Plugin Amazon VPC CNI menetapkan alamat IP untuk setiap pod langsung dari rentang CIDR subnet VPC Anda. Dengan demikian, pod menjadi entitas VPC kelas satu—pod dapat diakses oleh sumber daya VPC lain, sistem lokal melalui VPN/Direct Connect, dan security group tanpa penerjemahan jaringan overlay. Setiap node pekerja EC2 memelihara kumpulan IP privat sekunder (satu per slot ENI) yang ditetapkan ke pod saat pod tersebut dijadwalkan.
# 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 dan Kumpulan IP Siap Pakai
Plugin VPC CNI memelihara kumpulan alamat IP yang telah dialokasikan dan siap digunakan pada setiap node agar penjadwalan pod berlangsung cepat. Ketika sebuah node dimulai, CNI memasang beberapa ENI dan menetapkan IP sekunder hingga mencapai variabel lingkungan WARM_IP_TARGET atau MINIMUM_IP_TARGET. Oleh karena itu, jumlah maksimum pod yang dapat dijalankan node dibatasi oleh jumlah ENI instance dikalikan jumlah IP per ENI, yang bervariasi menurut jenis instance.
# 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 podsSecurity Groups untuk Pod
Secara default, semua pod pada sebuah node berbagi security group node tersebut. Dengan fitur Security Groups for Pods, Anda dapat menetapkan security group individual ke pod tertentu menggunakan sumber daya kustom SecurityGroupPolicy. Hal ini memungkinkan pengendalian akses jaringan secara terperinci—misalnya, hanya pod basis data yang dapat menerima lalu lintas pada port 5432 dari security group pod API. Fitur ini memerlukan VPC CNI versi 1.7.7 atau yang lebih baru serta ENI trunk pada node.
# 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-0db1234567890abcdJenis Service Kubernetes di EKS
Service Kubernetes mengekspos sekumpulan pod melalui nama DNS dan IP yang stabil. Di EKS, tiga jenis service yang relevan adalah: ClusterIP (hanya untuk komunikasi internal klaster), NodePort (membuka port pada setiap node—jarang digunakan di EKS), dan LoadBalancer (menyediakan load balancer AWS secara otomatis). Jenis LoadBalancer adalah cara yang paling sering digunakan untuk mengekspos service EKS yang menghadap internet.
# 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 adalah controller Kubernetes sumber terbuka yang mengelola sumber daya ALB dan NLB untuk klaster EKS. Ketika Anda membuat objek Kubernetes Ingress, controller tersebut menyediakan Application Load Balancer. Ketika Anda membuat Service bertipe LoadBalancer dengan anotasi yang benar, controller tersebut menyediakan Network Load Balancer. Controller ini menggantikan penyedia load balancer Kubernetes bawaan yang lebih lama.
# 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-0abc1234def567890Kubernetes Ingress dengan ALB
Objek Kubernetes Ingress menentukan aturan perutean HTTP/HTTPS—berdasarkan path dan host—ke dalam klaster Anda. AWS Load Balancer Controller membaca objek Ingress yang diberi anotasi kubernetes.io/ingress.class: alb dan membuat Application Load Balancer terkait dengan aturan listener yang cocok. Dengan demikian, Anda tidak perlu membuat ALB dan grup target secara manual untuk setiap service aplikasi.
# 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: 80NLB untuk Beban Kerja TCP/UDP
Ketika beban kerja Anda memerlukan TCP atau UDP (bukan HTTP)—seperti server game, service gRPC, atau proksi basis data—gunakan NLB, bukan ALB. Beri anotasi pada Service Kubernetes dengan service.beta.kubernetes.io/aws-load-balancer-type: 'external' dan service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: 'ip'. Controller tersebut menyediakan NLB dengan IP pod sebagai target langsung, sehingga penerusan port pada tingkat node dilewati dan latensi menjadi lebih rendah.
# 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: TCPResolusi DNS di Dalam Klaster
EKS menjalankan CoreDNS sebagai penyedia DNS klaster. Setiap service mendapatkan nama DNS dalam format service-name.namespace.svc.cluster.local, yang mengarah ke ClusterIP service tersebut. Pod juga dapat ditemukan melalui DNS. CoreDNS di-deploy sebagai Deployment (bukan DaemonSet), dan jumlah replikanya sebaiknya diskalakan berdasarkan ukuran klaster. EKS mengelola CoreDNS sebagai add-on sehingga pemutakhiran versi dapat dilakukan secara otomatis.
# 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)Network Policies di EKS
Objek Kubernetes NetworkPolicy menentukan aturan allow untuk lalu lintas antarpod dan pod ke eksternal. Secara default, semua pod dalam klaster dapat berkomunikasi dengan bebas. Untuk menerapkan jaringan zero-trust, Anda dapat memasang pengontrol kebijakan jaringan Amazon VPC CNI (tersedia sejak VPC CNI v1.14). Kebijakan jaringan dievaluasi pada tingkat kernel Linux menggunakan eBPF, sehingga penegakan berkinerja tinggi dapat dilakukan tanpa jaringan overlay.
# 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: 8080Kiat Pemecahan Masalah VPC CNI
Masalah jaringan EKS yang umum meliputi kehabisan alamat IP (atasi dengan mengaktifkan delegasi prefix atau menambahkan subnet yang lebih besar), pod yang macet dalam status Pending karena node tidak memiliki IP sekunder yang tersedia, dan kegagalan resolusi DNS yang terjadi sesekali akibat jumlah replika CoreDNS yang tidak mencukupi. Gunakan kubectl describe pod untuk memeriksa peristiwa, kubectl describe node untuk melihat jumlah IP yang dialokasikan, dan CloudWatch Container Insights untuk memantau tingkat kesalahan DNS pada skala klaster.
# 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'Pemeriksaan Cepat
Uji pemahaman Anda tentang konsep AWS Solutions Architect (SAA-C03) dari pelajaran ini.
Ringkasan Pelajaran
Dalam pelajaran ini, Anda telah mempelajari bahwa plugin Amazon VPC CNI menetapkan IP VPC native ke setiap pod untuk integrasi VPC yang lancar, AWS Load Balancer Controller menyediakan ALB untuk Ingress HTTP dan NLB untuk Service TCP/UDP, serta Security Groups for Pods memungkinkan pengendalian akses jaringan pada tingkat pod. Selanjutnya, kita akan membahas IRSA untuk mengaitkan peran IAM terperinci dengan akun service Kubernetes.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Jaringan EKS: VPC CNI dan Penyeimbangan Beban” gratis?
Ya — teks lengkap “Jaringan EKS: VPC CNI dan Penyeimbangan Beban” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Cloud & IT Cert Prep, upgrade ke CoddyKit PRO. Kursus Cloud & IT Cert Prep mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Jaringan EKS: VPC CNI dan Penyeimbangan Beban”?
Gunakan plugin Amazon VPC CNI agar pod memperoleh alamat IP VPC asli, lalu tampilkan layanan dengan AWS Load Balancer Controller. Kamu berlatih Cloud & IT Cert Prep dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Cloud & IT Cert Prep?
Tidak diperlukan pengalaman sebelumnya. Cloud & IT Cert Prep di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.
Berapa lama pelajaran “Jaringan EKS: VPC CNI dan Penyeimbangan Beban” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Cloud & IT Cert Prep ini?
Ya. Setiap pelajaran Cloud & IT Cert Prep menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Bidang Kontrol dan Node Pekerja EKS
- Profil Fargate untuk Pod Tanpa Server
- Jaringan EKS: VPC CNI dan Penyeimbangan Beban
- Peran IAM untuk Akun Layanan (IRSA)