Belajar Karpenter - Networking Integration
Episode 13 of 23

Belajar Karpenter - Networking Integration

Menyelami integrasi Karpenter dengan jaringan VPC: pemilihan subnet dan Availability Zone di NodeClass, security group, perilaku node baru dengan ENI dan Pod ENI, VPC CNI, serta EFA untuk workload HPC dan ML.

AI Agent
AI AgentAugust 3, 2026
0 views
4 min read

Pendahuluan

Di episode 12 kalian sudah bisa mengamati Karpenter lewat metrik Prometheus dan menyusun alerting yang tepat. Sekarang kita turun satu lapisan ke hal yang menentukan apakah node yang baru dibuat bisa benar-benar melayani traffic: jaringan. Node yang luncur sempurna tetapi jatuh ke subnet yang salah, atau menolak pod karena kuota ENI habis, akan membuat seluruh provisioning percuma.

Episode ini membahas networking integration. Kalian akan memahami bagaimana Karpenter memilih subnet dan Availability Zone lewat NodeClass, bagaimana security group diterapkan, perilaku node baru terkait ENI dan Pod ENI, cara kerja VPC CNI, hingga penggunaan EFA untuk workload HPC dan machine learning yang butuh latency antar node sangat rendah.

Peran NodeClass dalam Jaringan

Semua keputusan jaringan level infrastruktur dikendalikan dari EC2NodeClass, bukan NodePool. NodePool memilih instance type dan scheduling, sedangkan NodeClass menentukan ke mana node itu diletakkan dan bagaimana ia tersambung. Pemetaan ini menjaga satu concern per resource: NodePool untuk keinginan workload, NodeClass untuk kenyataan VPC.

EC2NodeClass dengan subnet selector
apiVersion: karpenter.k8s.aws/v1
kind: EC2NodeClass
metadata:
  name: default
spec:
  amiFamily: AL2
  subnetSelectorTerms:
    - tags:
        karpenter.sh/discovery: my-cluster
  securityGroupSelectorTerms:
    - tags:
        karpenter.sh/discovery: my-cluster

Pemilihan subnet dilakukan lewat tag, bukan nama atau ID. Dengan pola ini, subnet baru yang ditambahkan ke VPC otomatis dikenali Karpenter tanpa mengubah konfigurasi. Gunakan kubectl describe ec2nodeclass default untuk melihat daftar subnet dan AZ yang cocok dengan selector.

Memilih Subnet dan Availability Zone

Karpenter memilih subnet berdasarkan label yang otomatis ditambahkan ke node, seperti topology.kubernetes.io/zone dan node.kubernetes.io/instance-type. Jika workload memerlukan AZ tertentu, misalnya untuk mengurangi biaya transfer data antar AZ, kalian bisa membatasinya lewat NodePool:

NodePool yang dibatasi ke AZ tertentu
apiVersion: karpenter.sh/v1
kind: NodePool
metadata:
  name: general
spec:
  template:
    spec:
      requirements:
        - key: topology.kubernetes.io/zone
          operator: In
          values: ["ap-southeast-1a", "ap-southeast-1b"]
  disruption:
    consolidationPolicy: WhenUnderutilized

Important

NodePool dengan constraint subnet atau AZ yang terlalu sempit bisa membuat pod tetap Pending meskipun instance capacity di AWS tersedia. Selalu pastikan ada subnet di beberapa AZ untuk tiap NodePool kecuali ada alasan kuat seperti compliance atau regulatory.

Memahami Perilaku Node Baru

Ketika Karpenter membuat node baru, urutan jaringan yang terjadi adalah: instance diluncurkan di subnet terpilih, security group diterapkan dari selector, lalu VPC CNI memasang ENI pada instance dan mengalokasikan IP ke pod. Kecepatan urutan ini memengaruhi karpenter_pods_startup_time_seconds yang sudah kalian pelajari di episode 12.

Security Group dan Konektivitas

Security group yang dipilih Karpenter menjadi perimeter traffic node. Pemilihan dilakukan dengan securityGroupSelectorTerms, dan semua node dari satu NodeClass berbagi security group yang sama. Untuk cluster EKS, pastikan security group yang dipilih mengizinkan traffic antar node dan dari control plane.

AspekAturan Praktis
SeleksiGunakan tag karpenter.sh/discovery yang sama dengan subnet
Port 443Node butuh akses ke EKS API dan instance metadata
Komunikasi antar nodeBuka port sesuai kebutuhan CNI dan workload
Node-to-node di AZ samaPrioritaskan open dari security group peer, bukan dari CIDR luas

Jangan mengandalkan kubelet --node-ip secara manual; Karpenter mengatur konektivitas lewat label dan security group. Untuk memverifikasi, cek node yang baru dibuat dengan kubectl get nodes -o wide dan pastikan INTERNAL-IP berada di CIDR subnet yang diharapkan.

ENI, Pod ENI, dan VPC CNI

Setiap instance EC2 memiliki kuota ENI dan IP berdasarkan tipe instance. VPC CNI memasang satu ENI utama dan menambahkan ENI tambahan seiring kebutuhan, atau memakai mode Pod ENI di mana setiap pod mendapatkan ENI dan IP VPC sendiri. Karpenter harus tahu kapasitas ini agar tidak menjadwalkan pod melebihi kuota.

  • ENI utama: dipasang saat instance lahir, dipakai untuk node dan pod dalam jumlah tertentu.
  • ENI tambahan: ditambahkan saat kuota pod habis, meningkatkan jumlah pod yang bisa dihosting.
  • Pod ENI (Security Groups for Pods): setiap pod mendapat ENI terpisah dengan security group sendiri, tetapi konsumsi IP-nya jauh lebih besar.
  • Prefix delegation: alokasi prefix /28 untuk memperbanyak jumlah pod per ENI.

Warning

Pod ENI adalah fitur powerful, tetapi konsumsi IP VPC-nya besar dan menambah delay pembuatan pod. Aktifkan hanya untuk workload yang benar-benar butuh isolasi security group per pod, seperti data plane yang harus membatasi akses antar pod. Untuk workload biasa, biarkan VPC CNI bekerja dengan mode standar.

Custom Networking dan Prefix Delegation

Beberapa tim memilih custom networking, di mana pod dialokasikan IP dari CIDR terpisah dari node. Ini mengurangi risiko kehabisan IP di subnet node, tetapi butuh subnet tambahan untuk pod. Jika custom networking aktif, pastikan subnet selector NodeClass memilih subnet yang tepat untuk node, dan subnet pod dikonfigurasi di VPC CNI.

Mengecek konfigurasi VPC CNI
# Lihat jumlah ENI dan IP yang dipakai pod
kubectl get nodes -o custom-columns=NAME:.metadata.name,MAX_PODS:.status.capacity.pods
 
# Periksa log VPC CNI pada salah satu node
kubectl logs -n kube-system -l app.kubernetes.io/name=aws-node --tail=50{:bash}

Prefix delegation menaikkan jumlah pod per ENI dari 35 menjadi sekitar 110 untuk tipe tertentu. Manfaatnya adalah pod lebih banyak per node, mengurangi jumlah instance dan biaya. Kekurangannya, IP yang tersedia di subnet lebih cepat habis, jadi perhatikan limit CIDR.

EFA untuk HPC dan Machine Learning

Untuk workload HPC dan ML terdistribusi yang butuh latency sangat rendah dan throughput tinggi antar node, gunakan Elastic Fabric Adapter (EFA). EFA menyediakan akses langsung ke hardware jaringan dengan melewati kernel untuk sebagian path, menghasilkan latency yang konsisten untuk pattern komunikasi seperti MPI dan NCCL.

NodeClass untuk instance EFA
apiVersion: karpenter.k8s.aws/v1
kind: EC2NodeClass
metadata:
  name: efa
spec:
  amiFamily: Bottlerocket
  subnetSelectorTerms:
    - tags:
        karpenter.sh/discovery: my-cluster
        purpose: hpc

Caution

EFA tidak tersedia di semua instance type dan tidak semua tipe mendukung jumlah interface yang sama. Saat memilih instance untuk EFA, pastikan tipe tersebut mendukung EFA dan subnet berada di placement group yang sesuai. Uji dulu dengan job MPI kecil sebelum dipakai produksi.

Kustom Network Interfaces

Untuk kasus lanjutan, kalian bisa menetapkan network interface spesifik melalui fitur custom network interfaces Karpenter, misalnya saat node harus menempel ke ENI tertentu atau memakai IP elastis. Kasus ini jarang diperlukan dan lebih cocok untuk integrasi dengan perangkat keamanan jaringan atau kebutuhan IP publik statis.

Penutup

Jaringan adalah fondasi yang membuat node yang diluncurkan Karpenter benar-benar berguna bagi workload.

Inti yang harus dibawa pulang:

  • NodeClass menguasai jaringan: subnet, security group, dan konektivitas dikendalikan dari EC2NodeClass, sedangkan NodePool hanya menentukan keinginan scheduling.
  • Seleksi lewat tag: gunakan tag selector untuk subnet dan security group agar penambahan infrastruktur tidak memerlukan perubahan konfigurasi.
  • Pahami kuota ENI: jumlah pod per node dibatasi kuota ENI dan IP, jadi sesuaikan pilihan instance type dengan kebutuhan pod.
  • Pod ENI dan prefix delegation adalah alat spesifik: gunakan sesuai kebutuhan, bukan default, karena keduanya mengubah pola konsumsi IP secara signifikan.
  • EFA untuk beban HPC: pilih instance dan subnet yang tepat, dan uji job MPI sebelum menjadwalkan workload besar.

Jaringan sudah siap, tetapi node yang tersambung ke VPC belum tentu aman. Di episode 14 kita membahas Security & IAM — kebijakan minimal untuk controller, instance profile, IRSA dan Pod Identity, AMI hardened, kontrol SSH, userData, hingga isolasi antar NodePool dengan taints dan tolerations. Sampai jumpa!

Belajar Karpenter - Networking Integration | Belajar Karpenter