สำหรับงานนี้ผมเห็นว่าอยู่ใกล้ๆ เลยวาร์ปจากวงเวียนใหญ่มาแถว BTS ช่องนนทรี ครับ แวะมาฟังเรื่อง eBPF เห็นหลายคนเค้าแชร์กันช่วงนี้ครับ สำหรับสถานที่จัดงาน AWC ตึก Empire ครับ วิวสวย และหรูมากครับ
ก่อนเริ่มงานพี่ปั๊บ มีเกริ่นนำ eBPF มันเกิดจาก Linux มีข้อจำกัด kernel แค่คนที่จะปรับแต่ค่าได้ต้องเทพมากๆ ถ้าต้องปรับเปิด issue ขอไป แต่บางทีรอนานมาก จึงมาเปิด Project eBPF มาช่วยปรับพวกนี้ให้ง่ายและสะดวกขึ้น
หัวข้อในงาน
Programmatic on Linux Kernel with eBPF
eBPF มัน programming ของ Infrastructure มีภาษาให้เขียน และ Runtime ด้วย แบบพวก JavaScript / Lua แต่มันจะเพื่อคุม Kernel นะ มองเหมือน Framework เราสามารถใส่อะไรลงไป ก่อนที่จะเกิด SystemCall ขึ้นมา
เจ้า eBPF เปิดช่องให้ให้ปรับอะไรใน Linux Kernel เล็กน้อยๆก่อน เพราะถ้ารอ Release จริงๆ มันนานอ เนื่องจากกระบวนการพัฒนา OS ทำกัน 2-3 ปีเลย โดยที่ตัว eBPF มีมาเป็น 10 ปีแล้ว ตั้งแต่ปี 2014 มีผู้ก่อตั้งกลุ่มแรก Meta, Google, Isovalent, Microsoft, Netflix อ๋อ และหลังๆ มี CrowdStrike เข้ามาแจมด้วยนะ
- ความแตกต่างของ eBPF กับ Programing แบบภาษาอื่นๆ
- eBPF (Specific Purpose) ถ้าพลาดแบบ CrowdStrike มันจะยุ่งกับที่ Kernel เลย มันมีความเสี่ยงต้อง Vertified และมี Guard จะได้ป้องกันเคส เช่น Loop Hell
- Programing ทำงานๆทั่วๆไป เช่น เอา WebAssembly มาทำงานด้าน AI หรือจะทำเว็บ บราๆ
- Where eBPF used
eBPF ถูกเอาไปใช้งานหลายส่วน อาท เช่น Application / Observability / Network / Security โดยหลายทีมีเอา Adapt หรือ ทำเป็น Product
- Facebook เอา eBPF มาใช่ทำ L4 Load Balancer Katran
- ตอนนี้ Cloud 3 เจ้าใหญ่ / Cloud จีน เอาไปใช้เป็นเบื่องหลังนะ พวก Cilium
- แบบเล็กก็มีใน Android เอาไปใช้นะ system/etc/bpf ตัว netd (network daemon)
Isovalent คนเริ่ม eBPF และมีเอาไปรวมใช้ใน LGTM Stack ด้วยนะ ให้ Observability ง่ายดีด้วยนะ
- Getting Start eBPF
มี Keyword ที่เราต้องรู้ก่อน
- Userspace ส่วนที่ Appilcation เราทำงานอยู่ แล้วค่อยส่งความต้องการ (SystemCall) ไปยังตัว KernelSpace
- Kernelspace ส่วนของระบบที่จัดการกับพวก Resource HW ต่างๆ
- BPF - package filtering
- eBPF - extend BPF เดิมให้ Programable โดยเวลาที่เขียนคุม ต้องเป็น ภาษา C แบบ restricted มีมาตรฐานคุมชัดเจน จะได้ลดความผิดพลาดได้ และให้ Clang / LLVM Compile ออกมาเป็น ByteCode
- Tracepoint ตาม SystemCall kernel events เช่น ascheduling or network
- xdp - package filtering
- lsm - Linux Security module
- eBPF Helper พวก Function พื้นฐาน ปกติที่เราเขียน programming printf ใน eBPF จะมีตัว bpf_trace_printk() มาให้ หรือ ตัวอื่นๆ เช่น bpf_perf_event_output()
- Uprobe - inspect / modify the behavior of the userspace
- Kprobe - inspect / modify the behavior of the kernel
- Perf Event - tracking performance ต่าง ๆ ระบบ Kernel / HW
- eBPF Map เอาผลที่ได้จากตัว eBPF VM ส่งกลับ userspace
- How eBPF work
- Source Code - เขียนด้วย restricted C
- compile bytecode
- eBPF Verified - ตรวจสอบด้วย ว่าไม่ทำให้ HW ตาย เช่น Loop Hell / Pointer
- eBPF VM - เอา bytecode มา Run
- eBPF map - ส่งผลกลับไป userspace
- ถ้าจะลอง
- เครื่อง mac มี Lima ทำแบบ wsl ของ windows แต่ถ้า mac เข้าร่วมแก๊งจะได้จาก OS เลย
- windows ลองหาเล่น มีด้วย GitHub - microsoft/ebpf-for-windows: eBPF implementation that runs on top of Windows
ส่วนที่เขียน Code ใน Demo คุณโจ้จะใช้ตัว bcc python bcc/docs/reference_guide.md at master · iovisor/bcc · GitHub
เห็น Code ครั้งแรกภาพ เขียน C กำหนดเป็น String ใน Python จากรูปก็ตัวแปร program ฟังมาตอนนี้อารมณ์แบบเราเขียน script groovy เป็น String ให้ java มันเอาไป Run มันจะอารมณ์แบบทำ Jenkin แต่เป้าหมายคนละแบบ eBPF จะไปตัว Kernel นั้นเอง
eBPF ใน KubeCon2024 -> EBPF-Enabled Distributed Tracing ช่วย Track ทำ span ของ Kernel ได้ จะได้ optimize ได้ ได้ยินว่าพวก Cloud จีนเริ่มทำกันแล้ว และตัว Linux สายที่ขอ pull เส้นใหญ่ๆมาจากทางฝั่งจีนแล้วนะ
ส่วนอื่นๆ ดูได้จากใน resource เลย
Resource: Slide
Grafana Beyla
มาฟังเพราะอันนี้แหละ แค่สงสัยว่ามี LGTM แล้ว ตัวนี้มันจะต่างจากเดิมยังไง
- Traditional Lib Telemetry พวก OpenTelemetry + LGTM แต่ที่ลองจริงๆ อาจจะมี Custom Code เติมด้วย แบบพวก Tracing / Log
- Grafana Beyla เอา eBPF มาช่วย ตรงนี้จะช่วยลดการเขียน Code ลงไปได้ มันจะลด Effort ในส่วนนี้เอา eBPF ไปส่องจาก Linux Kernel เอามาช่วยทำ Auto Instrumentation (Log / Trace / Metric) และเอาใส่ LGTM เหมือนเดิม
Grafana Beyla Deployment Type
- K8S - DaemonSet จับทุก process เลย แต่จะกิน resource มาก ถ้ามีข้อมูล หรือ Event เยอะๆ
- K8S - Sidecar จับบาง Process
บน K8S ต้อง service account + cluster role เพื่อให้มันอ่าน metadata ของ k8s ได้มันดูตั้งแต่ namespace port service pod … แต่ต้องเลือกมันเยอะ พวกการ Config ดูจาก Resource ได้เลย
- Container ไปรันพวก Docker / Podman
- ลงเพียว
beyla มีให้ metric ให้ได้เลยนะ พวก rate error ของ http / gRPC ง่ายดี แต่มีจุดที่ท้าทาย เรื่อง Doc และการ Custom ทำได้ยากของมาใหม่ ถ้าลองบน K8S อาจจะมีปัญหาดูข้อมูลข้าม Cluster อยู่
beyla มันแก้ปัญหาจุกจิก เราจะได้รู้ว่าจริงๆ ความล่าช้า ประเด็นมันเกิดจากตัว App / Infra หรือ Network เอาข้อมูลมา Visualize ได้เลบ
Pattern การ Deploy Grafana Beyla จะเอามาใช้คู่กับ Grafana Alloy คล้ายกับตัว Otel Collect เอามา Filter ทำ Data Pipeline ก่อนส่ง เข้า LGTM ต่อ
ถ้าลองมี Sample เป็น docker-compose ด้วย รับลอง Simulate ด้วย K6
ถ้าอยากรู้เต็มๆลองไปใน Blog ของ Speaker ได้เลยครับ / Slide
Cilium: eBPF-based Networking, Security, and Observability
Cilium เป็น OpenSource ที่ทำให้เห็นความเจ๋งของ eBPF ตอนนี้เป็น network plugin (CNI) ของ Kube ด้วยนะ เมื่อก่อน Fluentd / Calico ตอนนี้เป็น Open Source ที่เติบโตไวเป็นอันดับต้นๆ รองจาก K8S / OpenTelemetry ตัวมีนเองทำงานได้หลายได้ เช่น
- Networking
- Cluster Mesh / L4 Loaf Balancer / Egress Gateway / Gateway API (อนาคตน่าจะมาแทน ingress) / Service Mesh เป็นต้น
- ทำ QOS ได้ ใช้ตัวkubernetes.io/ingress-bandwidth: "50M"
- TCP BRR - Protocol Google พัฒนาขึ้น เพื่อเพิ่มประสิทธิภาพการใช้งาน Network ถ้าต้องการเปิดใช้ตามรูปเลยครับ
- Observability - ใช้คู่กับ Hubble เพื่อส่งออก Metric
- Security - เช่น IPSEC Encrpytion ทำ Tunnel ระหว่าง pod ใน cluster / ระหว่าง cluster
- Why is Matter
มันใช้ eBPF ไง จากภาพเห็นแนวทางจากอดีต มาตอนนี้ จากเดิมพวก Network มันต้องวิ่งไปถาม IPTable ถ้ามี Service เยอะๆมาจะช้าลง (เยอะระดับแบบหลักพัน / หมื่นขึ้นไป) มันจะช่วย latency ได้ เร็วขึ้นโดยไม่ได้ปรับ App
จนตอนนี้เจ้าอื่นๆอย่าง Istio มี Ambient mode ข้างหลังมันใช้ eBPF นี่แหละ
- Sample Use-Case (Demo)
- Cluster Mesh - เชื่อมต่อ Kube หลาย clusters เข้าด้วยกัน ทำให้เข้าถึง service ข้าม cluster ได้ เช่น service ใน cluster A ให้ pod ใน cluster B เรียกใช้งานได้ บน Cloud รวม Cluster ในหลาย AZ เข้าด้วยกัน
- แก้ปัญหา Partially Microservice Failure ทีนี้ดีกับฝั่ง App ไม่ต้องแก้ endpoint ใหม่ โดยเรากำหนด Affinity ให้เชื่อ Cluster หลักก่อนได้ หรือ จะกระจาย Traffic ไปให้ แต่ละ Cluster ใน AZ อย่างละเท่าไหร่เป็นต้น
Resource: Slide + VDO Demo
Kubernetes Security with eBPF
Game Changer ในช่วง 2-3 ปีนี้ OpenTelemetry และ eBPF
- Kubernetes is just Linux
- Container มัน คือ การใช้งาน Kernel ของ Linux ให้คุ้ม หลักการแตก Process ออกมา
- ตัว Kubernetes มัน Application ที่ช่วยใช้งาน Kernel Linux ให้คุ้ม และสะดวกมากขึ้น มาหุ้มอีกที ถ้าลอง map Container/ K8S กับ Linux
- pod/container มันมาจาก cgroup
- Network / Network Policy - IP Tables
- Persistent Volume => File Descriptor, Virtual File System (VFS) - สำหรับตัวเต็ม Speaker มีเขียน Blog ไว้แล้วครับ เบื้องหลังการทำงานของ Kubernetes คือ Linux (Kubernetes is just Linux) | by Mongkol Thongkraikaew | Ascend Developers (ascendcorp.com)
-Security Practice for Kubernetes
ภาพนี้ครบและ มี Check List ให้ให้ตรวจของทุก Layer และ ของผมถ้า Sofware House จะดูส่วน Appcation Container + Observability
-Security validation tools in Kubernetes
- GitHub - cnti-testcatalog/testsuite: 📞📱☎️📡🌐 Cloud Native Telecom Initiative (CNTI) Test Catalog is a tool to check for and provide feedback on the use of K8s + cloud native best practices in networking applications and platforms
- GitHub - aquasecurity/kube-bench: Checks whether Kubernetes is deployed according to security best practices as defined in the CIS Kubernetes Benchmark
- GitHub - kubescape/kubescape: Kubescape is an open-source Kubernetes security platform for your IDE, CI/CD pipelines, and clusters. It includes risk analysis, security, compliance, and misconfiguration scanning, saving Kubernetes users and administrators precious time, effort, and resources.
-Apply Using eBPF to Secure Linux & Kubernetes
ผมทำเป็น 2 Column แทนจะ ตัว Linux Base และตัว Kubernetes มา Addons อีกที
Linux -Visibility and monitoring -Network Security -Container Security จัดการพวก Cgroup -Intrusion Detection & Prevention -Policy enforcement -Incident response & forensics
Kubernetes -Network Policy Enforcement -Security Observability -Runtime Security Monitoring -Intrusion Detection Systems (IDP) -Cgroup & Namespace Isolation -Service Mesh
และแน่นอน เราไม่ได้ไปติดตั้งลงทุก Cluster ทุก Pod เองแน่ๆ มันมี Agent มาช่วย โดยมี Tools ที่เด่นๆ
นอกจากด้าน Security eBPF ยังเอาไปใช้ใน Tools อื่น เช่น bpftrace / hubble เป็นต้น นอกจากนี้ตัว eBPF ยังเป็นเบื้องหลังที่ช่วย Cloudfare ด้วยในการ Detect DDos ครั้งใหญ่ครับ
อันนี้เป็นอีกอันที่ชอบ eBPF เราใช้มัน แต่มันยาก ผมว่ายากเหมือนกันนะ และมุมผม ยังไม่เห็นภาพเท่าไหร่ เพราะเราเองก็เป็น Dev ด้วย มันต้องเข้าใจกระบวนการของ OS ด้วย แต่ของผมมีคำถามเหมือนกันนะ ว่าจุดไหนที่เราควรใช้ เพราะกลัวว่าเดี๋ยว eBPF กลายเป็นค้อนเอาไปจัดการทุกปัญหา
resource: slide
Update 2024-08-31: Speaker มี Key takeaways : Kubernetes Security with eBPF สรุปครับ
Resource ทั้งหมด: GitHub - jumpbox-academy/learn-ebpf: Learning eBPF Event 2024
Reference
Discover more from naiwaen@DebuggingSoft
Subscribe to get the latest posts sent to your email.