Cilium CNI คือระบบเครือข่ายสำหรับ Kubernetes ที่ล้ำสมัยมาก โดยใช้เทคโนโลยีระดับเคอร์เนลของ Linux ที่เรียกว่า eBPF แทนการใช้ iptables แบบดั้งเดิม ที่มีการใช้งานใน Flannel และ Calico ในบทความนี้เราจะอธิบายทั้งแนวคิด, โครงสร้าง, การทำงาน, และข้อดี/ข้อเสียของ Cilium CNI รวมถึงข้อสรุปว่า Cilium นั้นเหมาะกับใครบ้าง
1. CNI คืออะไร
CNI ย่อมาจาก Container Network Interface คือมาตรฐานที่ Kubernetes ใช้จัดการ network ของ pod เช่น การ assign IP ให้ pod การทำ routing ระหว่าง pods และการจัดการ policy ในการควบคุม traffic CNI ที่ที่เป็นที่นิยมในปัจจุบันจะมีอยู่ 3 ตัวคือ Flannel (ง่าย), Calico (มี network policy) และ Cilium (advanced + eBPF)
2. Cilium คืออะไร
Cilium เป็น CNI ที่ ใช้ eBPF แทน iptables โดยมันทำงานระดับ kernel (เร็วกว่า) มี security + observability built-in พัฒนาโดย Isovalent (ปัจจุบันอยู่ภายใต้ Cisco)
3. eBPF คือหัวใจสำคัญ
eBPF (Extended Berkeley Packet Filter) คือ ส่วนของซอฟต์แวร์ที่รันใน Linux kernel สามารถเข้าไปเชื่อมเข้าไปใน network stack ได้โดยตรง ผลลัพธ์ก็คือ มันจะทำงานโดยไม่ต้องผ่าน iptables ทำให้ลด latency ไม่ต้อง traverse rules เยอะ ๆ และ ประมวลผล packet ได้เร็วมาก
4. Architecture ของ Cilium
4.1 Cilium Agent ซึ่งจะรันอยู่บนทุก node ทำหน้าที่จัดการ network ของ pod โดยจะทำการ inject eBPF program เข้า kernel
4.2 Cilium Operator ทำหน้าที่จัดการ IPAM และ sync cluster state
4.3 eBPF Programs ฝังใน kernel ทำหน้าที่เกี่ยวกับ packet filtering, load balancing และ routing
4.4 Hubble (Observability) ทำหน้าที่ monitor network traffic ซึ่งจะทำให้เราเห็น flow แบบ real-time
5. การทำงานของ Cilium
สำหรับการทำงานของ CNI แบบเดิมหรือ traditional จะใช้ iptables เป็นหลัก ซึ่งจะทำงานโดย packet เข้า node และข้อมูลจะวิ่งผ่าน iptables rules หลายตัว ซึ่งปกติเราจะสามารถเช็คได้ผ่านคำสั่ง iptables -L และ เนื่องจากความซับซ้อนของ rule ทำให้เกิดlatency สูง แต่ Cilium (eBPF) packet เข้า node และ eBPF intercept ทันที เพื่อการตัดสินใจ route/filter ได้เลย ลดความซับซ้อนลง และ ทำให้เร็วกว่าอย่างมีนัยสำคัญ
6. ความสามารถหลัก
6.1 Network Security (ทำงานตั้งแต่ L3 ถึง L7) โดยใน L3/L4 คือการทำงานระดับ IP + Port และ L7 ก็คือการทำงานในระดับ application HTTP, gRPC เช่นการ allow เฉพาะ `GET /api` หรือ block POST ก็ทำได้ด้วย ซึ่งนั่นหมายถึง มีความยืดหยุ่นสูงมากๆ
6.2 Kubernetes Network Policy รองรับ Kubernetes native policy และ CiliumNetworkPolicy (advanced)
6.3 Load Balancing ไม่ต้องใช้ kube-proxy แต่จะใช้ eBPF แทน เรียกว่า kube-proxy replacement
6.4 Observability (Hubble) เราจะสามารถมอนิเตอร์ได้ว่า pod A เชื่อมไปยัง pod B และ ดูว่า request ไหนถูก block รวมถึงมี latency เท่าไร
6.5 Encryption รองรับ IPsec และ WireGuard
6.6 Service Mesh ทำได้เลย โดยไม่ต้องใช้ sidecar เช่น Istio ลด resource usage มาก
7. จุดเด่นของ Cilium
8. ข้อเสีย / ข้อจำกัด
1. ต้องใช้ Kernel รุ่นใหม่ โดย eBPF ต้อง Linux kernel ≥ 4.19 (แนะนำ 5.x) และ บาง distro เช่น Rocky อาจมีปัญหา (คุณเคยเจอ Calico issue ก็เกี่ยว kernel ได้)
2. มีความซับซ้อนสูง และมี config เยอะ การ debug ต้องเข้าใจเกี่ยวกับ eBPF
3. Resource usage ใช้ CPU เพิ่มเล็กน้อย (เพราะ processing in-kernel)
9. เปรียบเทียบกับ CNI อื่น
| Feature | Flannel | Calico | Cilium |
|---|---|---|---|
| Performance | ⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐ |
| Network Policy | ❌ | ✅ | ✅ (L7) |
| eBPF | ❌ | (partial) | ✅ |
| Observability | ❌ | ❌ | ✅ |
| Service Mesh | ❌ | ❌ | ✅ |
10. ใช้ Cilium เมื่อไหร่
จริงๆ ต้องบอกว่ามันหมดกับ cluster ทุกขนาด เลยก็ว่าได้ ไม่ว่าจะเป็นขนาดเล็กจนถึงมากกว่า 100 nodes และใช้ workload แบบ microservices รวมถึงต้องการจัดการเรื่อง security ผ่าน API และ ต้องการระบบมอติเตอร์ที่ดี แต่มันอาจจะไม่ค่อยเหมาะสำหรับผู้ที่ต้องการความง่าย และสะดวก เพราะว่า flannel อาจจะรองรับได้อยู่แล้ว และ ง่ายกว่าในเรื่องการทำความเข้าใจ โดยเฉพาะผู้ที่ยังไม่ค่อยชำนาญเรื่องเครือข่าย
โดยสรุปเราอาจจะกล่าวได้ว่า Cilium คือCNI รุ่นใหม่ที่ใช้ eBPF เพื่อให้ network เร็ว, ปลอดภัย, และฉลาดกว่าแบบเดิม และที่สำคัญรองรับการขยายได้เยอะมาก
สนใจสอบถามเพิ่มเติมในเรื่อง CNI หรือ ต้องการใช้งาน Kubernetes หรือ Proxmox + Containers พูดคุยกับเราผ่าน Line OA @avesta.co.th หรืออีเมล์ [email protected]