it

Cilium CNI Scaling Strategy

Cilium CNI Scaling Strategy
Kubernetes

โดย อ. บอมกิตติทัศน์เจริญพนาสิทธิ์ | อัปเดต 24 ก. พ. 2026 | อ่าน 16 นาที

eBPF คืออะไร — เทคโนโลยีเบื้องหลัง Cilium

Cilium CNI Scaling Strategy

eBPF (extended Berkeley Packet Filter) เป็นเทคโนโลยีที่เปลี่ยนวิธีคิดเรื่อง Linux Kernel Programming ให้รัน Custom Program ใน Kernel Space ได้โดยไม่ต้อง Recompile Kernel หรือโหลด Kernel Module Program ถูกตรวจสอบโดย eBPF Verifier ก่อนรันจึงปลอดภัยและ Stable

eBPF ถูกใช้ใน 3 ด้านหลัก Networking จัดการ Packet ที่ Kernel Level เร็วกว่า iptables (Cilium, Cloudflare), Security ตรวจจับ System Call ที่ผิดปกติ (Falco, Tetragon) และ Observability ดึง Metrics/Traces จาก Kernel (Pixie, Hubble) โดยไม่กระทบ Performance ของ Application

เนื้อหาเกี่ยวข้อง — CSS Container Queries Identity Access Management

Cilium คืออะไร — eBPF-based CNI

Cilium เป็น CNI (Container Network Interface) Plugin สำหรับ Kubernetes ที่ใช้ eBPF เป็น Data Plane แทน iptables แบบเดิมเป็น CNCF Graduated Project (2024) ถูกใช้โดย Google GKE, AWS EKS, Azure AKS เป็น Default CNI และบริษัทใหญ่อีกมาก

Cilium ทำ 4 อย่างหลัก Networking Pod-to-Pod, Service Load Balancing, Multi-cluster, Security Network Policy ระดับ L3/L4/L7 (DNS, HTTP, gRPC), Observability Hubble แสดง Flow Log, Service Map, DNS Query แบบ Real-time และ Service Mesh mTLS, Traffic Management แบบ Sidecar-free ไม่ต้อง Inject Sidecar Container

แนะนำเพิ่มเติม — ติดตาม XM Signal

เนื้อหาเกี่ยวข้อง — อ่านต่อ: Vercel Edge Functions Infrastructure as Code

เปรียบเทียบ Cilium vs Calico vs Flannel vs WeaveNet

คุณสมบัติCiliumCalicoFlannelWeaveNet
Data PlaneeBPFiptables/eBPFVXLANVXLAN
Performanceดีเยี่ยมดีปานกลางปานกลาง
Network PolicyL3/L4/L7L3/L4ไม่มีL3/L4
Service Meshในตัว (Sidecar-free)ไม่มีไม่มีไม่มี
ObservabilityHubble (ดีมาก)Basicไม่มีBasic
Multi-clusterCluster MeshFederationไม่มีไม่มี
Complexityสูงปานกลางต่ำต่ำ

ติดตั้ง Cilium บน Kubernetes

# ติดตั้ง Cilium CLI

CILIUM_CLI_VERSION=$(curl -s https://raw.githubusercontent.com/cilium/cilium-cli/main/stable.txt)

curl -L --fail --remote-name-all \

 https://github.com/cilium/cilium-cli/releases/download//cilium-linux-amd64.tar.gz

sudo tar xzvfC cilium-linux-amd64.tar.gz /usr/local/bin



# ติดตั้ง Cilium บน Cluster

cilium install --version 1.16



# ตรวจสอบ Status

cilium status --wait



# เปิด Hubble (Observability)

cilium hubble enable --ui



# ทดสอบ Connectivity

cilium connectivity test

Cilium Network Policy — L3/L4/L7

# L3/L4 Policy — อนุญาตเฉพาะ Port 80 จาก Frontend

apiVersion: cilium.io/v2

kind: CiliumNetworkPolicy

metadata:

 name: allow-frontend-to-api

spec:

 endpointSelector:

 matchLabels:

 app: api

 ingress:

 - fromEndpoints:

 - matchLabels:

 app: frontend

 toPorts:

 - ports:

 - port: "80"

 protocol: TCP



---

# L7 Policy — อนุญาตเฉพาะ GET /api/products

apiVersion: cilium.io/v2

kind: CiliumNetworkPolicy

metadata:

 name: allow-get-products

spec:

 endpointSelector:

 matchLabels:

 app: api

 ingress:

 - fromEndpoints:

 - matchLabels:

 app: frontend

 toPorts:

 - ports:

 - port: "80"

 rules:

 http:

 - method: GET

 path: "/api/products"



---

# DNS Policy — อนุญาตเฉพาะ DNS ที่กำหนด

apiVersion: cilium.io/v2

kind: CiliumNetworkPolicy

metadata:

 name: allow-external-api

spec:

 endpointSelector:

 matchLabels:

 app: backend

 egress:

 - toFQDNs:

 - matchName: "api.stripe.com"

 - matchName: "api.sendgrid.com"

 toPorts:

 - ports:

 - port: "443"

Cilium Service Mesh — Sidecar-free

Cilium Service Mesh ใช้ eBPF ทำ mTLS, Traffic Management, Observability โดยไม่ต้อง Inject Sidecar Container เหมือน Istio ลด Resource Overhead (ไม่มี Sidecar = ไม่มี CPU/Memory เพิ่ม), ลด Latency (ไม่ต้องผ่าน Proxy), ลด Complexity (ไม่ต้องจัดการ Sidecar Injection)

# เปิด Service Mesh

cilium install --set kubeProxyReplacement=true \

 --set ingressController.enabled=true \

 --set envoy.enabled=true



# Ingress Controller (แทน Nginx Ingress)

apiVersion: networking.k8s.io/v1

kind: Ingress

metadata:

 name: my-api

 annotations:

 ingress.cilium.io/loadbalancer-mode: shared

spec:

 ingressClassName: cilium

 rules:

 - host: api.example.com

 http:

 paths:

 - path: /

 pathType: Prefix

 backend:

 service:

 name: api-service

 port:

 number: 80

Hubble — Network Observability

# ดู Flow Log แบบ Real-time

hubble observe --namespace production



# Filter เฉพาะ Dropped Traffic

hubble observe --verdict DROPPED



# Filter เฉพาะ DNS

hubble observe --protocol DNS



# Filter เฉพาะ HTTP 5xx

hubble observe --http-status-code 500-599



# เปิด Hubble UI

cilium hubble enable --ui

kubectl port-forward -n kube-system svc/hubble-ui 12000:80

# เปิด http://localhost:12000 ดู Service Map

Hubble UI แสดง Service Dependency Map แบบ Real-time เห็นว่า Service ไหนเรียก Service ไหนผ่าน Protocol อะไร Latency เท่าไรมี Error Rate กี่เปอร์เซ็นต์ช่วย Debug Network Issue ได้อย่างรวดเร็ว

Load Balancing ด้วย XDP

Cilium CNI Scaling Strategy

Cilium ใช้ XDP (eXpress Data Path) สำหรับ Load Balancing ที่ NIC Driver Level เร็วกว่า kube-proxy (iptables) 10 เท่าเพราะจัดการ Packet ก่อนเข้า Kernel Network Stack

แนะนำเพิ่มเติม — SiamCafeBook

เนื้อหาเกี่ยวข้อง — ดูเพิ่มเติมเรื่อง tool kanban คือ — วิธีตั้งค่าและใช้งานจริงพร้อมตัวอย่าง

# เปิด kube-proxy Replacement

cilium install \

 --set kubeProxyReplacement=true \

 --set loadBalancer.acceleration=native \

 --set loadBalancer.mode=dsr \

 --set bpf.masquerade=true



# ตรวจสอบ

cilium status | grep KubeProxyReplacement

# KubeProxyReplacement: True [eth0 (Direct Routing)]



# DSR (Direct Server Return) — Response ไม่ผ่าน LB กลับ

# ลด Latency และ Load บน LB Node

Bandwidth Management และ QoS

# จำกัด Bandwidth ต่อ Pod

apiVersion: v1

kind: Pod

metadata:

 name: bandwidth-limited

 annotations:

 kubernetes.io/egress-bandwidth: "10M"

 kubernetes.io/ingress-bandwidth: "20M"

spec:

 containers:

 - name: app

 image: nginx

Cluster Mesh — Multi-cluster Networking

Cilium Cluster Mesh เชื่อม Kubernetes Cluster หลายตัวให้ Pod สื่อสารข้าม Cluster ได้โดยตรงเหมือนอยู่ Cluster เดียวกันเหมาะกับ Multi-region, Disaster Recovery, Hybrid Cloud

# เปิด Cluster Mesh บน Cluster 1

cilium clustermesh enable --context cluster1



# เปิด Cluster Mesh บน Cluster 2

cilium clustermesh enable --context cluster2



# เชื่อม 2 Cluster

cilium clustermesh connect --context cluster1 --destination-context cluster2



# ตรวจสอบ

cilium clustermesh status --context cluster1



# Global Service — Service ที่ Load Balance ข้าม Cluster

apiVersion: v1

kind: Service

metadata:

 name: api-service

 annotations:

 service.cilium.io/global: "true"

 service.cilium.io/shared: "true"

Scaling Strategy — ออกแบบให้รองรับ 10,000+ Pods

  • ใช้ Direct Routing แทน VXLAN — ลด Encapsulation Overhead ให้ Throughput สูงขึ้น 15-20% ต้องมี L2 Connectivity ระหว่าง Node
  • เปิด BPF Host Routing — ข้าม Kernel Network Stack ไปเลยลด Latency 10-15%
  • ใช้ XDP Acceleration — Load Balancing ที่ NIC Level เร็วกว่า iptables 10 เท่า
  • Tune eBPF Map Size — เพิ่มขนาด Map สำหรับ Cluster ใหญ่ --set bpf.mapDynamicSizeRatio=0.0025
  • ใช้ IPv6 Native — ลด NAT Overhead ไม่ต้อง Masquerade
  • Separate Control Plane Network — แยก Network สำหรับ Cilium Agent Communication
  • Hubble Sampling — ตั้ง Sampling Rate ไม่ Observe ทุก Packet สำหรับ Cluster ใหญ่
  • Cilium Operator HA — รัน Operator 2+ Replica สำหรับ Production
# Production Helm Values สำหรับ Large Cluster

cilium install \

 --set kubeProxyReplacement=true \

 --set routingMode=native \

 --set ipv4NativeRoutingCIDR=10.0.0.0/8 \

 --set bpf.masquerade=true \

 --set bpf.hostLegacyRouting=false \

 --set loadBalancer.acceleration=native \

 --set loadBalancer.mode=dsr \

 --set hubble.enabled=true \

 --set hubble.metrics.enableOpenMetrics=true \

 --set operator.replicas=2 \

 --set ipam.mode=kubernetes

Performance Tuning

  • MTU ให้ถูกต้อง — ตั้ง MTU ตาม Network (1500 สำหรับ Ethernet, 9000 สำหรับ Jumbo Frame, ลด 50 สำหรับ VXLAN)
  • CPU Pinning — Pin Cilium Agent ไว้ที่ CPU Core เฉพาะสำหรับ Cluster ใหญ่
  • Memory Limit — เพิ่ม Memory Limit ของ Cilium Agent สำหรับ Cluster ที่มี Policy จำนวนมาก
  • Disable Unused Features — ปิดฟีเจอร์ที่ไม่ใช้เช่นถ้าไม่ใช้ Service Mesh ก็ปิด Envoy

Troubleshooting

# ตรวจ Cilium Agent Status

cilium status

cilium-dbg status --verbose



# ดู Endpoint (Pod) Status

cilium-dbg endpoint list



# ตรวจ BPF Program

cilium-dbg bpf lb list

cilium-dbg bpf ct list global



# ดู Policy ที่ Apply อยู่

cilium-dbg policy get



# Monitor Dropped Packets

cilium-dbg monitor --type drop



# Connectivity Test

cilium connectivity test

Best Practices และสรุป

  • ใช้ Cilium แทน kube-proxy — kubeProxyReplacement=true ลด Resource และเพิ่ม Performance
  • เปิด Hubble — Network Observability เป็นสิ่งจำเป็นสำหรับ Production
  • ใช้ L7 Network Policy — ไม่แค่ Block Port แต่ Block ถึง HTTP Method/Path
  • ใช้ DNS-based Policy — สำหรับ Egress ไป External Service กำหนดด้วย FQDN
  • ใช้ Direct Routing สำหรับ Performance — ถ้า Network รองรับ
  • Monitor eBPF Map Usage — ถ้า Map เต็มจะ Drop Packet
  • Test Connectivity หลัง Upgradecilium connectivity test ทุกครั้ง
  • ใช้ Cluster Mesh สำหรับ Multi-cluster — ไม่ต้อง Expose Service ผ่าน Internet

Cilium เป็น CNI ที่ทรงพลังที่สุดสำหรับ Kubernetes ในปี 2026 ด้วย eBPF ที่ทำ Networking, Security และ Observability ที่ Kernel Level ให้ Performance ดีกว่า CNI แบบเดิมหลายเท่าเมื่อรวมกับ Scaling Strategy ที่เหมาะสมจะรองรับ Cluster ขนาดใหญ่ได้อย่างมั่นใจติดตามบทความใหม่ๆได้ที่ SiamCafe.net

เนื้อหาเกี่ยวข้อง — HashiCorp Vault Secrets Pod Scheduling

อ. บอมกิตติทัศน์เจริญพนาสิทธิ์
IT Infrastructure Expert | Thaiware Award | ประสบการณ์กว่า 25 ปี — ผู้ก่อตั้ง SiamCafe.net Since 2000-2026

Q: Cilium คืออะไร

eBPF-based CNI สำหรับ Kubernetes ทำ Networking, Security, Observability ที่ Kernel Level เร็วกว่า iptables-based CNI หลายเท่าเป็น CNCF Graduated

XM Legend · เทรดเดอร์ & ผู้สอน Forex 13 ปี

ผู้ก่อตั้ง SiamCafe ตั้งแต่ปี 1997 · เทรดเดอร์สาย Forex มากกว่า 13 ปี ได้รับการยกย่องเป็น XM Legend · แบ่งปันความรู้ Forex, ไอที, AI และการเทรด จากประสบการณ์จริงในตลาดจริง