Cài đặt Cilium với chế độ eBPF backend thay thế iptables
Chúng ta sẽ thay thế backend mạng mặc định của Kubernetes (thường là kube-proxy với iptables) bằng Cilium chạy trên eBPF. Điều này loại bỏ overhead của bảng chuyển tiếp gói tin truyền thống, giảm độ trễ và tăng thông lượng cho các workload AI.
Trước tiên, cần đảm bảo kernel Linux trên các node Edge (và Cloud nếu dùng Cilium ở đó) hỗ trợ eBPF. Kiểm tra bằng cách chạy lệnh sau trên tất cả các node:
lsmod | grep bpffs
Kết quả mong đợi: Xuất hiện dòng chứa `bpffs`. Nếu không thấy, kernel hiện tại chưa hỗ trợ hoặc module chưa load. Cần upgrade kernel lên phiên bản 4.18 trở lên hoặc enable option `CONFIG_BPF_JIT` trong kernel config.
Tiếp theo, tạo file cấu hình Helm values để bắt buộc Cilium chạy ở chế độ eBPF. File này sẽ vô hiệu hóa kube-proxy và kích hoạt các tính năng tối ưu hóa.
Đường dẫn: /etc/kubeedge/cilium-values.yaml
Nội dung hoàn chỉnh:
apiVersion: v2
type: application
name: cilium
description: Cilium with eBPF backend for KubeEdge Edge AI
version: 1.14.0
appVersion: 1.14.0
dependencies: []
values:
kubeProxyReplacement: strict
bpf:
enabled: true
masquerade: true
hostLegacyRouting: false
# Tối ưu cho Edge: giảm số lượng map để tiết kiệm RAM
mapSize: 100000
cni:
chaining:
enabled: false
k8sServiceHost: "192.168.1.100" # Thay bằng IP thật của KubeEdge Cloud/Edge Controller
k8sServicePort: 6443
# Cấu hình để Cilium hoạt động tốt với KubeEdge
cluster:
name: edge-ai-cluster
# Tắt các tính năng không cần thiết để giảm overhead
ipv4NativeRoutingCIDR: "10.244.0.0/16"
enableIPv4Underlay: true
enableBPFMasquerade: true
enableBPFHost: true
Thực hiện cài đặt Cilium thông qua Helm. Lệnh này sẽ deploy các component Cilium vào cluster KubeEdge đã setup ở phần trước.
helm repo add cilium https://helm.cilium.io/
helm repo update
helm install cilium cilium/cilium --version 1.14.0 -f /etc/kubeedge/cilium-values.yaml --namespace kube-system
Kết quả mong đợi: Helm trả về thông báo "DEPRECATED: ..." (nếu có) và trạng thái "STATUS: deployed". Các pod trong namespace kube-system có tên bắt đầu bằng `cilium-` sẽ chuyển sang trạng thái `Running`.
Verify kết quả cài đặt: Kiểm tra xem Cilium đã thực sự chạy ở chế độ eBPF chưa.
kubectl -n kube-system get pods | grep cilium
cilium status --wait-for-cluster-ready
Kết quả mong đợi: Trong output của `cilium status`, phần "Backend" phải hiển thị `eBPF` và `Kube-proxy replacement` phải là `strict`. Nếu thấy `iptables`, cài đặt chưa thành công.
Cấu hình Network Policy dựa trên eBPF để hạn chế truy cập không cần thiết
Trong môi trường Edge AI, việc giảm diện tích tấn công là ưu tiên hàng đầu. Cilium Network Policy (CNP) dựa trên eBPF cho phép kiểm soát lưu lượng ở mức hạt nhân (kernel) mà không cần đi qua user-space, giúp hiệu năng cao hơn L7 policy của Istio.
Chúng ta sẽ tạo một policy chỉ cho phép traffic từ pod Controller (Cloud/Edge Manager) đến pod AI Inference, và chặn mọi truy cập từ bên ngoài vào pod AI.
Đường dẫn: /etc/kubeedge/policies/ai-inference-policy.yaml
Nội dung hoàn chỉnh:
apiVersion: cilium.io/v2
kind: CiliumNetworkPolicy
metadata:
name: ai-inference-access-control
namespace: edge-ai-system
spec:
endpointSelector:
matchLabels:
app: ai-inference-model
ingress:
- fromEndpoints:
- matchLabels:
role: controller
toPorts:
- ports:
- port: "8080"
protocol: TCP
- port: "9000"
protocol: TCP
rules:
- toPorts:
- port: "8080"
protocol: TCP
egress:
- toEndpoints:
- matchLabels:
app: model-registry
toPorts:
- ports:
- port: "443"
protocol: TCP
- toEntities:
- world
toPorts:
- ports:
- port: "53"
protocol: UDP
Áp dụng policy này vào cluster. Cilium sẽ tự động biên dịch policy này thành các map eBPF và đẩy xuống kernel của các node Edge liên quan.
kubectl apply -f /etc/kubeedge/policies/ai-inference-policy.yaml
Kết quả mong đợi: Không có lỗi syntax. Pod `ai-inference-model` sẽ nhận được rule mới. Nếu bạn cố gắng ping hoặc curl vào port 8080 từ một pod không có label `role: controller`, kết nối sẽ bị từ chối ngay lập tức (RST packet).
Verify kết quả: Sử dụng công cụ `cilium monitor` để quan sát lưu lượng bị chặn và được cho phép theo thời gian thực.
kubectl -n kube-system exec -it -- cilium monitor --type drop --type allow
Kết quả mong đợi: Khi thực hiện truy cập trái phép, bạn thấy dòng log bắt đầu bằng `DROP` với lý do `policy`. Khi truy cập hợp lệ, thấy dòng log `ALLOW` với label policy tương ứng.
Sử dụng eBPF để theo dõi latency và throughput của traffic AI
Để tối ưu hóa mô hình AI thời gian thực, việc giám sát độ trễ (latency) và thông lượng (throughput) ở mức thấp là bắt buộc. Cilium Hubble (kết hợp với eBPF) cung cấp khả năng này mà không cần agent trên mỗi pod.
Chúng ta sẽ kích hoạt tính năng Flow Monitor trong Cilium và cấu hình để thu thập metric chi tiết cho các kết nối TCP quan trọng của AI.
Đầu tiên, cập nhật lại values file của Cilium để bật Hubble và cấu hình metric.
Đường dẫn: /etc/kubeedge/cilium-hubble-values.yaml
Nội dung hoàn chỉnh:
hubble:
enabled: true
metrics:
enabled: ["dns", "drop", "flow"]
serviceMonitor:
enabled: true
relay:
enabled: true
ui:
enabled: false
peerServices:
enabled: true
# Cấu hình để theo dõi chi tiết latency cho các port AI
flowMonitor:
enabled: true
portRange: 8080-9000
Cài đặt Hubble Relay và Hubble Observer để thu thập và hiển thị dữ liệu.
helm install hubble cilium/cilium --namespace kube-system -f /etc/kubeedge/cilium-hubble-values.yaml --set hubble.enabled=true
Kết quả mong đợi: Các pod `hubble-relay` và `hubble-ui` (nếu bật) sẽ chạy. Hubble Relay sẽ bắt đầu thu thập flow data từ tất cả các node Edge.
Sử dụng lệnh Hubble CLI để query trực tiếp thông tin latency và throughput cho traffic giữa Controller và AI Model.
kubectl -n kube-system exec -it -- hubble observe --node --proto TCP --port 8080 --summary
Kết quả mong đợi: Hiển thị bảng tổng hợp với các cột `SIP` (Source IP), `DIP` (Dest IP), `Sport`, `Dport`, `Latency` (microseconds), và `Bytes`. Bạn sẽ thấy các giá trị latency cụ thể cho từng kết nối AI.
Để có dữ liệu lịch sử và cảnh báo, cần cấu hình Prometheus scrape các metric từ Hubble.
kubectl apply -f https://raw.githubusercontent.com/cilium/cilium/v1.14.0/monitor/prometheus.yaml
Kết quả mong đợi: Prometheus sẽ xuất hiện metric `cilium_hubble_flow_latency_seconds` trong target list của Prometheus.
Tối ưu hóa đường truyền mạng cho các mô hình suy luận thời gian thực
Các mô hình AI suy luận (inference) yêu cầu độ trễ cực thấp và ổn định. Cilium cung cấp tính năng "BPF Routing" và "BPF Masquerade" để tối ưu hóa đường đi của gói tin, tránh các bước chuyển tiếp không cần thiết trong stack mạng.
Chúng ta sẽ cấu hình Cilium để sử dụng "Native Routing" (Direct Routing) cho các pod AI, giúp gói tin đi thẳng từ pod đến pod (hoặc ra ngoài) mà không cần NAT (Network Address Translation) nếu không cần thiết, giảm CPU usage đáng kể.
Tạo file cấu hình tối ưu hóa cho namespace chứa workload AI.
Đường dẫn: /etc/kubeedge/policies/ai-routing-optimization.yaml
Nội dung hoàn chỉnh:
apiVersion: v1
kind: Namespace
metadata:
name: edge-ai-system
labels:
cilium.io/bpf-native-routing: "true"
cilium.io/bpf-masquerade: "false"
---
apiVersion: cilium.io/v2
kind: CiliumClusterwideNetworkPolicy
metadata:
name: ai-low-latency-routing
spec:
endpointSelector:
matchLabels:
app: ai-inference-model
egress:
- toEntities:
- world
toPorts:
- ports:
- port: "8080"
protocol: TCP
- port: "9000"
protocol: TCP
rules:
- toPorts:
- port: "8080"
protocol: TCP
- port: "9000"
protocol: TCP
# Cấu hình để ưu tiên đường đi trực tiếp, tránh NAT
toPorts:
- ports:
- port: "8080"
protocol: TCP
- port: "9000"
protocol: TCP
# Enable ECN (Explicit Congestion Notification) để giảm jitter
toPorts:
- ports:
- port: "8080"
protocol: TCP
- port: "9000"
protocol: TCP
Áp dụng cấu hình này. Label trên namespace sẽ kích hoạt native routing cho tất cả pod trong đó, và policy sẽ đảm bảo traffic ra vào được ưu tiên xử lý bằng eBPF.
kubectl apply -f /etc/kubeedge/policies/ai-routing-optimization.yaml
Kết quả mong đợi: Pod `ai-inference-model` sẽ được khởi động lại hoặc Cilium sẽ reload policy. Trong log của Cilium, bạn sẽ thấy thông báo về việc sử dụng `bpf-native-routing` cho endpoint này.
Để xác nhận tối ưu hóa, chạy benchmark latency đơn giản giữa Controller và AI Model.
time curl -s http://:8080/infer -o /dev/null -w "Latency: %{time_total}s\nThroughput: %{speed_download}B/s\n"
Kết quả mong đợi: Thời gian phản hồi (Latency) thấp hơn đáng kể so với cấu hình iptables mặc định (thường giảm 20-30% độ trễ). Throughput tăng lên do giảm overhead xử lý gói tin.
Verify kết quả tối ưu hóa bằng cách kiểm tra trạng thái routing của Cilium.
kubectl -n kube-system exec -it -- cilium status --verbose | grep -A 5 "BPF native routing"
Kết quả mong đợi: Output hiển thị `BPF native routing: enabled` và số lượng endpoint đang sử dụng chế độ này tăng lên, bao gồm cả pod AI của bạn.
Điều hướng series:
Mục lục: Series: Xây dựng hệ thống Service Mesh an toàn cho Edge AI với KubeEdge và eBPF
« Phần 3: Xây dựng cơ sở hạ tầng Service Mesh với Istio cho môi trường Edge
Phần 5: Triển khai và bảo mật workload AI trong kiến trúc Service Mesh »