0Pricing
AWS Solutions Architect · Pelajaran

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 AWS Solutions Architect 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 AWS Solutions Architect, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus AWS Solutions Architect 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 pods

Security 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-0db1234567890abcd

Jenis 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 wide

AWS 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-0abc1234def567890

Kubernetes 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: 80

NLB 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: TCP

Resolusi 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: 8080

Kiat 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 AWS Solutions Architect, upgrade ke CoddyKit PRO. Kursus AWS Solutions Architect 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 AWS Solutions Architect 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 AWS Solutions Architect?

Tidak diperlukan pengalaman sebelumnya. AWS Solutions Architect 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 AWS Solutions Architect ini?

Ya. Setiap pelajaran AWS Solutions Architect 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

  1. Bidang Kontrol dan Node Pekerja EKS
  2. Profil Fargate untuk Pod Tanpa Server
  3. Jaringan EKS: VPC CNI dan Penyeimbangan Beban
  4. Peran IAM untuk Akun Layanan (IRSA)
← Kembali ke AWS Solutions Architect