AizuDemy

Tutorial Setup Istio Ambient Mesh di K3s: Service Mesh Tanpa Sidecar

Tutorial Setup Istio Ambient Mesh di K3s: Service Mesh Tanpa Sidecar
๐ŸŽง
Dengarkan Artikel Ini
Suara AI Otomatis โ€ข 6 mnt baca baca
โšก TL;DR

Poin Kunci Artikel Ini:

  • Arsitektur Sidecar vs Ambient Mesh: Kenapa VPS Hemat RAM?Sidecar proxy tradisional alokasi satu kontainer Envoy per Pod aplikasi.
  • Setiap instance Envoy konsumsi 50MB hingga 150MB RAM.
  • Pod mikroservis kecil ukuran 10MB harus tanggung beban proxy 100MB.
๐Ÿ“‹ Daftar Isi Materi Tutup โ–ด

Arsitektur Sidecar vs Ambient Mesh: Kenapa VPS Hemat RAM?

Sidecar proxy tradisional alokasi satu kontainer Envoy per Pod aplikasi. Metode ini boros memori. Setiap instance Envoy konsumsi 50MB hingga 150MB RAM. Pod mikroservis kecil ukuran 10MB harus tanggung beban proxy 100MB. Cluster skala 50 Pod buang 5GB RAM hanya untuk data plane.

Istio Ambient Mesh ubah arsitektur ini. Pemrosesan traffic dipisah jadi dua lapisan: Layer 4 (L4) transport security dan Layer 7 (L7) application routing. Arsitektur tanpa sidecar (sidecarless) ini tiadakan kontainer tambahan di dalam Pod aplikasi.

Ztunnel: Komponen Utama Layer 4

Ztunnel (Zero Trust Tunnel) tangani Layer 4. Diimplementasikan sebagai DaemonSet, satu instance ztunnel berjalan per node cluster. Ztunnel ditulis ulang menggunakan bahasa Rust untuk keandalan tinggi dan jejak memori minim (sekitar 10MB-20MB per node). Ztunnel kelola mTLS, autentikasi berbasis identitas SPIFFE, dan otorisasi L4 tanpa interupsi pada Pod aplikasi.

HBONE: Protokol Enkapsulasi

Komunikasi antar-node gunakan HBONE (HTTP-Based Overlay Network Encapsulation). HBONE bungkus traffic TCP di dalam tunnel HTTP/2 melintasi port 15008 dengan enkripsi mTLS berbasis TLS 1.3. Protokol ini kurangi overhead TCP handshake ganda dan simplifikasi aturan firewall cluster.

Waypoint Proxy: Layer 7 Sesuai Kebutuhan

Pemrosesan Layer 7 (seperti HTTP path routing, rate limiting, header mutation, dan L7 authorization policy) dipisah dari ztunnel. Fitur L7 ditangani oleh Waypoint Proxy. Waypoint jalankan Envoy standar yang dideploy per-namespace atau per-service account, bukan per-Pod. Jika aplikasi hanya butuh mTLS L4, Waypoint Proxy tidak perlu dideploy sama sekali.

Persiapan dan Instalasi K3s di VPS

Gunakan VPS Linux (Ubuntu 22.04 LTS) minimal 2 vCPU dan 4GB RAM. K3s ideal untuk infrastruktur hemat biaya karena footprint resource ringan.

Langkah 1: Instalasi K3s Tanpa Traefik

Matikan Ingress Controller bawaan Traefik agar tidak terjadi konflik port 80 dan 443 dengan Istio Gateway.

curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="--disable=traefik --flannel-backend=vxlan" sh -

Langkah 2: Verifikasi Cluster dan Setup Kubeconfig

Set hak akses kubeconfig agar perintah kubectl dapat dijalankan tanpa sudo.

sudo mkdir -p ~/.kube
sudo cp /etc/rancher/k3s/k3s.yaml ~/.kube/config
sudo chown $(id -u):$(id -g) ~/.kube/config
export KUBECONFIG=~/.kube/config

kubectl get nodes

Pastikan node berstatus Ready sebelum melanjut ke tahap berikutnya.

Setup Istio CNI Helm Chart dan Deploy Ztunnel

Instalasi Istio Ambient Mesh butuh empat komponen utama melalui Helm: Chart Base, Istio CNI, Istiod (Control Plane), dan Ztunnel (Data Plane L4).

Langkah 1: Tambah Repository Helm Istio

Tambahkan repository Helm Istio dan buat namespace istio-system.

helm repo add istio https://istio-release.storage.googleapis.com/charts
helm repo update
kubectl create namespace istio-system

Langkah 2: Install Istio Base Chart

Pasang Custom Resource Definitions (CRD) Istio ke cluster.

helm install istio-base istio/base -n istio-system --wait

Langkah 3: Install Istio CNI dengan Profil Ambient

Istio CNI bertugas mengarahkan traffic dari Pod ke Ztunnel tanpa perlu modifikasi Pod spec.

helm install istio-cni istio/cni \
  -n istio-system \
  --set profile=ambient \
  --wait

Langkah 4: Install Istiod Control Plane

Istiod mengelola distribusi sertifikat mTLS dan konfigurasi mesh.

helm install istiod istio/istiod \
  -n istio-system \
  --set profile=ambient \
  --wait

Langkah 5: Deploy Ztunnel DaemonSet

Pasang data plane L4 Ztunnel pada seluruh node.

helm install ztunnel istio/ztunnel \
  -n istio-system \
  --wait

Checklist Verifikasi Komponen

kubectl get pods -n istio-system

Pastikan seluruh Pod berikut berstatus Running:

  • istiod-* (1/1)
  • istio-cni-node-* (1/1 per node)
  • ztunnel-* (1/1 per node)

Aktifkan mTLS Otomatis dan Konfigurasi Waypoint Proxy L7

Langkah 1: Buat Namespace Demo dan Aktifkan Ambient Mode

Untuk memasukkan namespace ke dalam Ambient Mesh, beri label istio.io/dataplane-mode=ambient.

kubectl create namespace demo-app
kubectl label namespace demo-app istio.io/dataplane-mode=ambient

Langkah 2: Deploy Aplikasi Sampel

Deploy aplikasi sampel curl dan httpbin ke namespace demo-app.

kubectl apply -n demo-app -f https://raw.githubusercontent.com/istio/istio/release-1.22/samples/curl/curl.yaml
kubectl apply -n demo-app -f https://raw.githubusercontent.com/istio/istio/release-1.22/samples/httpbin/httpbin.yaml

Periksa Pod yang dideploy. Pod hanya berisi 1/1 kontainer. Tidak ada Envoy sidecar yang diinjeksi.

kubectl get pods -n demo-app

Langkah 3: Verifikasi mTLS Otomatis (Layer 4)

Uji koneksi dari Pod curl ke Pod httpbin.

kubectl exec -n demo-app deploy/curl -- curl -s http://httpbin:8000/ip

Traffic antara curl dan httpbin otomatis dienkripsi mTLS oleh Ztunnel melalui protokol HBONE port 15008.

Langkah 4: Setup Waypoint Proxy untuk Fitur Layer 7

Jika butuh fitur L7 seperti L7 Authorization Policy atau Path-based Routing, deploy Waypoint Proxy untuk namespace demo-app.

Gunakan perintah istioctl untuk membuat Waypoint Proxy:

istioctl waypoint apply -n demo-app --enroll-namespace

Verifikasi bahwa instance Waypoint Envoy berjalan di namespace:

kubectl get gtw -n demo-app

Langkah 5: Terapkan Authorization Policy L7

Batasi akses HTTP GET hanya pada path /html menggunakan Waypoint Proxy.

kubectl apply -n demo-app -f - <<EOF
apiVersion: security.istio.io/v1
kind: AuthorizationPolicy
metadata:
  name: httpbin-policy
  namespace: demo-app
spec:
  targetRefs:
  - group: gateway.networking.k8s.io
    kind: Gateway
    name: waypoint
  action: ALLOW
  rules:
  - from:
    - source:
        principals: ["cluster.local/ns/demo-app/sa/curl"]
    to:
    - operation:
        methods: ["GET"]
        paths: ["/html"]
EOF

Uji verifikasi akses pada path /html dan /ip:

kubectl exec -n demo-app deploy/curl -- curl -s -o /dev/null -w "%{http_code}\n" http://httpbin:8000/html
kubectl exec -n demo-app deploy/curl -- curl -s -o /dev/null -w "%{http_code}\n" http://httpbin:8000/ip

Request ke /html mengembalikan kode 200, sedangkan /ip ditolak dengan kode 403.

Solusi Troubleshooting: Debug CNI Failure di K3s

K3s simpan konfigurasi dan binary CNI di jalur non-standar. Jika Pod terjebak di status ContainerCreating atau CNI gagal mengarahkan traffic, sesuaikan jalur CNI pada chart istio-cni.

helm upgrade istio-cni istio/cni \
  -n istio-system \
  --set profile=ambient \
  --set cniConfDir=/var/lib/rancher/k3s/agent/etc/cni/net.d \
  --set cniBinDir=/var/lib/rancher/k3s/data/current/bin

Restart DaemonSet CNI dan Pod aplikasi:

kubectl rollout restart daemonset/istio-cni-node -n istio-system
kubectl rollout restart deployment -n demo-app

Benchmark Efisiensi Resource dan Rekomendasi Produksi

Perbandingan Pemakaian Resource: Sidecar vs Ambient Mesh

Pengujian dilakukan pada cluster K3s dengan 20 Pod mikroservis di VPS Ubuntu 4GB RAM.

Metrik Data PlaneIstio Sidecar ArchitectureIstio Ambient MeshEfisiensi
RAM Overhead per Pod Aplikasi+80 MB s/d +150 MB (Envoy container)0 MB (Sidecarless)Hemat 100% per Pod
RAM Overhead Node (20 Pods)~1600 MB Total Sidecar~25 MB (1 Ztunnel DaemonSet)Penghematan RAM ~98%
CPU Usage BaselineTinggi (Parsing L7 di tiap Pod)Sangat Rendah (L4 passthrough di Ztunnel)Penghematan CPU ~60%
Latensi L4 Transport (p99)~2.5 ms~0.8 ms3x Lebih Cepat

Rekomendasi Setup Produksi

  • Ukuran Node: Minimal 2 Node untuk High Availability (HA). Ztunnel otomatis jalan di tiap node baru.
  • Keamanan & Kernel Pod: Gunakan Linux Kernel 5.15+ pada Host VPS agar fitur eBPF dan redirection iptables CNI berjalan optimal.
  • Strategi Waypoint: Batasi deployment Waypoint. Deploy Waypoint hanya pada namespace yang butuh L7 routing, header rewrite, atau L7 rate limiting.
  • Monitoring Mesh: Integrasikan Istiod dan Ztunnel dengan Prometheus exporter via port 15090 untuk memantau traffic HBONE dan masa berlaku sertifikat mTLS.

Kesimpulan

Istio Ambient Mesh menyelesaikan masalah utama pemborosan memori pada Service Mesh tradisional. Kombinasi K3s dan Ambient Mesh memungkinkan pengelola infrastruktur menjalankan Kubernetes enterprise dengan fitur mTLS Zero Trust dan kontrol L7 penuh di atas VPS kelas ekonomis tanpa mengorbankan stabilitas resource.

A
Aizu Dev

Tim penulis AizuDemy yang menyajikan tutorial teknologi, cloud, dan pengembangan perangkat lunak dalam Bahasa Indonesia.

๐Ÿ“– Artikel Terkait