Kubernetes CNI با Cilium - پروژه عملی
نصب و پیکربندی Cilium بهعنوان CNI در Kubernetes، Networking Policy و Hubble Observability
هدف پروژه
در این لابراتوار یک Kubernetes Cluster ساخته میشود و Cilium بهعنوان CNI روی آن قرار میگیرد.
در پایان باید بتوانیم:
- Kubernetes را با
kubeadmbootstrap کنیم. containerdرا بهعنوان CRI آماده کنیم.- Cilium را بهعنوان CNI نصب کنیم.
- Pod-to-Pod و Pod-to-Service را تست کنیم.
- DNS و Service Discovery را بررسی کنیم.
- NetworkPolicy بسازیم.
- Hubble را برای مشاهده Flowها فعال کنیم.
- Cilium را Troubleshoot کنیم.
- تفاوت
kube-proxyو Cilium kube-proxy replacement را بفهمیم. - یک سناریوی production-like را پیادهسازی و Failure Test کنیم.
CNI در Kubernetes مسئول پیادهسازی Pod Network Model است و Kubernetes توصیه میکند Pod CIDR با شبکههای Host overlap نداشته باشد و در هر Cluster فقط یک Pod Network نصب شود. citeturn0search3turn0search7
1. معماری پروژه
برای Lab:
1 Kubernetes API
2 192.168.10.10:6443
3 │
4 ┌────────────┼────────────┐
5 │ │ │
6 ▼ ▼ ▼
7 control-01 control-02 control-03
8 192.168.10.11 .12 .13
9 │ │ │
10 └────────────┼────────────┘
11 │
12 ┌────────────┼────────────┐
13 ▼ ▼ ▼
14 worker-01 worker-02 worker-03
15 192.168.10.21 .22 .23
16 │ │ │
17 Cilium Cilium Cilium
18 │ │ │
19 Pods Pods Pods
Network Plan:
1Node Network: 192.168.10.0/24
2Pod Network: 10.244.0.0/16
3Service Network: 10.96.0.0/12
4API Endpoint: 192.168.10.10:6443
این CIDRها نمونهاند. اگر با LAN، VPN، Storage Network یا شبکههای دیتاسنتر overlap دارند، حتماً تغییرشان دهید.
2. CNI دقیقاً چه کاری انجام میدهد؟
Kubernetes بهتنهایی Pod Networking را کامل پیاده نمیکند.
CNI باید کاری کند که این مسیرها برقرار باشند:
1Pod A ─────► Pod B
2
3Pod ───────► Service
4
5Pod ───────► CoreDNS
6
7Pod ───────► External Network
در معماری ما:
1Kubernetes
2 │
3 ▼
4 Cilium
5 │
6 ▼
7 eBPF
8 │
9 ▼
10Linux Kernel
11 │
12 ▼
13Network
Cilium علاوه بر CNI، قابلیتهایی مثل NetworkPolicy، Load Balancing، Hubble و kube-proxy replacement را نیز ارائه میکند.
3. چرا Cilium؟
Cilium datapath خود را با تکیه بر eBPF در Linux Kernel پیادهسازی میکند.
مدل سنتی را بهصورت ساده میتوان اینطور دید:
1Packet
2 ↓
3Linux Networking
4 ↓
5iptables / routing
6 ↓
7Destination
در Cilium:
1Packet
2 ↓
3Linux Kernel
4 ↓
5eBPF
6 ↓
7Routing / Policy / LB
8 ↓
9Destination
مزیت مهم فقط performance نیست؛ قابلیت مشاهدهی datapath و اعمال policy در سطح identity نیز بسیار مهم است.
4. دو سناریوی نصب
در این آموزش ابتدا حالت پایدار و سادهتر را اجرا میکنیم:
1Cilium CNI
2+
3kube-proxy
بعد از اینکه Cluster سالم شد، حالت پیشرفته را بررسی میکنیم:
1Cilium CNI
2+
3eBPF kube-proxy replacement
این ترتیب برای Lab و Production منطقیتر است؛ ابتدا networking پایه را validate میکنیم و سپس datapath را پیچیدهتر میکنیم.
5. پیشنیازهای Node
روی تمام Nodeها:
1uname -r
2containerd --version
3kubeadm version
4kubelet --version
Cilium در مستندات stable فعلی خود برای نصب عمومی Linux kernel >= 5.10
را requirement اعلام میکند. citeturn0search5turn0search8
همچنین:
1swapon --show
اگر swap فعال است:
1sudo swapoff -a
و برای دائمی شدن، entry مربوط به swap را از /etc/fstab حذف یا comment
کنید.
6. آمادهسازی Kernel
روی تمام Nodeها:
1sudo modprobe overlay
2sudo modprobe br_netfilter
Persistent:
1cat <<EOF | sudo tee /etc/modules-load.d/kubernetes.conf
2overlay
3br_netfilter
4EOF
Sysctl:
1cat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes-cilium.conf
2net.bridge.bridge-nf-call-iptables = 1
3net.bridge.bridge-nf-call-ip6tables = 1
4net.ipv4.ip_forward = 1
5EOF
اعمال:
1sudo sysctl --system
بررسی:
1sysctl net.ipv4.ip_forward
باید:
1net.ipv4.ip_forward = 1
باشد.
7. بررسی Interface و Routing
روی هر Node:
1ip -br addr
2ip route
مثلاً:
1eth0 UP 192.168.10.11/24
و:
1default via 192.168.10.1 dev eth0
2192.168.10.0/24 dev eth0
اگر Node چند NIC دارد، Node IP اشتباه میتواند باعث مشکل شدید در Cilium و Kubernetes شود.
8. آمادهسازی containerd
بررسی:
1systemctl status containerd
اگر config ندارید:
1sudo mkdir -p /etc/containerd
2
3containerd config default | \
4 sudo tee /etc/containerd/config.toml
Systemd cgroup:
1sudo sed -i \
2's/SystemdCgroup = false/SystemdCgroup = true/' \
3/etc/containerd/config.toml
Restart:
1sudo systemctl restart containerd
2sudo systemctl enable containerd
بررسی:
1containerd config dump | grep SystemdCgroup
9. آمادهسازی Hostname و hosts
نمونه:
1192.168.10.11 control-01
2192.168.10.12 control-02
3192.168.10.13 control-03
4192.168.10.21 worker-01
5192.168.10.22 worker-02
6192.168.10.23 worker-03
تست:
1ping -c 3 worker-01
10. Bootstrap Control Plane
برای حالت استاندارد:
1sudo kubeadm init \
2 --control-plane-endpoint "192.168.10.10:6443" \
3 --pod-network-cidr=10.244.0.0/16 \
4 --service-cidr=10.96.0.0/12
بعد kubeconfig:
1mkdir -p $HOME/.kube
2
3sudo cp /etc/kubernetes/admin.conf \
4 $HOME/.kube/config
5
6sudo chown "$(id -u)":"$(id -g)" \
7 $HOME/.kube/config
بررسی:
1kubectl get nodes
در این مرحله ممکن است Node NotReady باشد؛ قبل از نصب CNI طبیعی است.
Kubernetes نیز اشاره میکند که CoreDNS قبل از نصب Pod Network نمیتواند
بهطور کامل فعال شود. citeturn0search3
11. Join کردن Workerها
خروجی kubeadm init یک دستور مشابه زیر میدهد:
1sudo kubeadm join 192.168.10.10:6443 \
2 --token <TOKEN> \
3 --discovery-token-ca-cert-hash sha256:<HASH>
همان دستور را روی Workerها اجرا کنید.
سپس:
1kubectl get nodes -o wide
12. بررسی kube-proxy
در حالت استاندارد:
1kubectl -n kube-system get ds kube-proxy
انتظار:
1DESIRED = CURRENT = READY
فعلاً kube-proxy را حذف نکنید.
13. نصب Cilium CLI
بعد از نصب CLI:
1cilium version
نسخه CLI و image را بررسی کنید.
14. نصب Cilium با CLI
نسخه را Pin کنید:
1cilium install --version 1.20.0
نسخه 1.20.0 در مستندات stable فعلی Cilium برای نصب استفاده شده است.
citeturn0search8turn0search5
15. نصب Cilium با Helm
اگر میخواهید Configuration بهصورت Infrastructure as Code مدیریت شود:
1helm repo add cilium https://helm.cilium.io/
2helm repo update
سپس:
1helm install cilium cilium/cilium \
2 --version 1.20.0 \
3 --namespace kube-system
Cilium نصب رسمی با Helm را نیز مستند کرده است. citeturn0search0turn0search5
برای Production بهتر است Helm values در Git نگهداری شود.
مثلاً:
1helm show values cilium/cilium \
2 --version 1.20.0 > cilium-values-reference.yaml
16. بررسی Cilium
1kubectl -n kube-system get pods \
2 -l k8s-app=cilium -o wide
همه Agentها باید:
11/1 Running
باشند.
Operator:
1kubectl -n kube-system get pods \
2 -l name=cilium-operator
سپس:
1cilium status --wait
17. بررسی Nodeها
1kubectl get nodes -o wide
حالت مطلوب:
1control-01 Ready
2control-02 Ready
3control-03 Ready
4worker-01 Ready
5worker-02 Ready
6worker-03 Ready
18. بررسی فایلهای CNI روی Node
روی Node:
1ls -lah /etc/cni/net.d/
و:
1ls -lah /opt/cni/bin/
این دو مسیر برای Troubleshooting بسیار مهم هستند.
اگر Pod به مرحلهی sandbox نمیرسد، حتماً این مسیرها را بررسی کنید.
19. تست پایه Pod-to-Pod
Namespace:
1kubectl create namespace cilium-lab
دو Pod:
1kubectl -n cilium-lab run nginx-01 \
2 --image=nginx:stable
3
4kubectl -n cilium-lab run nginx-02 \
5 --image=nginx:stable
بررسی:
1kubectl -n cilium-lab get pods -o wide
فرض:
1nginx-01 10.244.1.10 worker-01
2nginx-02 10.244.2.11 worker-02
از Pod اول:
1kubectl -n cilium-lab exec nginx-01 -- \
2 curl -I http://10.244.2.11
اگر HTTP response گرفتید، Pod-to-Pod networking بین دو Node سالم است.
20. تست DNS
Pod تست:
1kubectl -n cilium-lab run dns-test \
2 --image=busybox:1.36 \
3 --restart=Never \
4 -- sleep 3600
تست:
1kubectl -n cilium-lab exec dns-test -- \
2 nslookup kubernetes.default
CoreDNS:
1kubectl -n kube-system get pods \
2 -l k8s-app=kube-dns
اگر DNS خراب بود:
1kubectl -n kube-system logs \
2 -l k8s-app=kube-dns
و:
1kubectl -n cilium-lab exec dns-test -- \
2 cat /etc/resolv.conf
را بررسی کنید.
21. ساخت Deployment
فایل nginx.yaml:
1apiVersion: apps/v1
2kind: Deployment
3metadata:
4 name: nginx
5 namespace: cilium-lab
6
7spec:
8 replicas: 3
9
10 selector:
11 matchLabels:
12 app: nginx
13
14 template:
15 metadata:
16 labels:
17 app: nginx
18
19 spec:
20 containers:
21 - name: nginx
22 image: nginx:stable
23
24 ports:
25 - containerPort: 80
Apply:
1kubectl apply -f nginx.yaml
بررسی:
1kubectl -n cilium-lab get pods -o wide
22. ساخت Service
nginx-service.yaml:
1apiVersion: v1
2kind: Service
3metadata:
4 name: nginx
5 namespace: cilium-lab
6
7spec:
8 selector:
9 app: nginx
10
11 ports:
12 - port: 80
13 targetPort: 80
Apply:
1kubectl apply -f nginx-service.yaml
بررسی:
1kubectl -n cilium-lab get svc nginx
23. تست Service
1kubectl -n cilium-lab exec dns-test -- \
2 wget -qO- http://nginx
همچنین:
1kubectl -n cilium-lab exec dns-test -- \
2 wget -qO- http://nginx.cilium-lab.svc.cluster.local
اگر HTML nginx برگشت:
1DNS
2 +
3Service Discovery
4 +
5ClusterIP
6 +
7Load Balancing
سالم هستند.
24. بررسی Endpointها
1kubectl -n cilium-lab get endpoints nginx
یا:
1kubectl -n cilium-lab get endpointslice
باید IPهای Podهای nginx را ببینید.
25. بررسی Cilium Endpoint
1cilium endpoint list
در این خروجی اطلاعاتی مانند:
1ENDPOINT
2IDENTITY
3POLICY
4LABELS
را مشاهده میکنید.
این دستور یکی از ابزارهای اصلی Troubleshooting است.
26. NetworkPolicy — پروژه امنیتی
سه workload تصور کنید:
1frontend
2backend
3database
قانون مطلوب:
1frontend ─────► backend:8080
2backend ─────► database:5432
ولی:
1frontend ──X──► database
2internet ──X──► backend
3internet ──X──► database
27. CiliumNetworkPolicy
نمونه:
1apiVersion: cilium.io/v2
2kind: CiliumNetworkPolicy
3
4metadata:
5 name: backend-policy
6 namespace: cilium-lab
7
8spec:
9 endpointSelector:
10 matchLabels:
11 app: backend
12
13 ingress:
14 - fromEndpoints:
15 - matchLabels:
16 app: frontend
17
18 toPorts:
19 - ports:
20 - port: "8080"
21 protocol: TCP
Apply:
1kubectl apply -f backend-policy.yaml
28. تست Policy
قبل از Policy:
1frontend ─────► backend ALLOW
2random ─────► backend ALLOW
بعد از Policy:
1frontend ─────► backend ALLOW
2random ─────► backend DENY
اگر نتیجه متفاوت است:
1cilium endpoint list
و:
1cilium monitor
را بررسی کنید.
29. Hubble
Hubble برای Observability شبکه و Cilium بسیار مهم است.
فعالسازی:
1cilium hubble enable
بررسی:
1cilium status
و:
1kubectl -n kube-system get pods \
2 -l k8s-app=hubble-relay
30. مشاهده Flow
1hubble observe
محدود به namespace:
1hubble observe \
2 --namespace cilium-lab
برای TCP:
1hubble observe \
2 --protocol TCP
حالا Policy را تست کنید و Flowها را ببینید.
مثلاً:
1frontend → backend TCP/8080 FORWARDED
2random → backend TCP/8080 DROPPED
این یکی از نقاط قوت Cilium است: میتوانیم تصمیم datapath را مشاهده کنیم، نه اینکه فقط YAML Policy را ببینیم.
31. Cilium Monitor
1cilium monitor
برای مشاهده eventهای datapath استفاده میشود.
اگر Packet Drop دارید:
1Application
2 ↓
3Packet
4 ↓
5Cilium
6 ↓
7DROP
cilium monitor و Hubble را برای فهمیدن علت بررسی کنید.
32. Connectivity Test
مهمترین تست اولیه:
1cilium connectivity test
اگر Fail شد، خروجی را از اولین failure دنبال کنید، نه فقط آخرین خطا.
33. Troubleshooting — Pod Pending
1kubectl -n cilium-lab describe pod <pod>
اگر خطایی مثل:
1FailedCreatePodSandBox
دیدید:
1kubectl get events -A \
2 --sort-by=.lastTimestamp
سپس روی Node:
1ls -lah /etc/cni/net.d/
2ls -lah /opt/cni/bin/
3systemctl status containerd
4journalctl -u containerd -n 100
5journalctl -u kubelet -n 100
34. Troubleshooting — Cilium CrashLoopBackOff
1kubectl -n kube-system get pods \
2 -l k8s-app=cilium -o wide
سپس:
1kubectl -n kube-system describe pod <cilium-pod>
و:
1kubectl -n kube-system logs \
2 <cilium-pod> --previous
Kernel:
1uname -a
BPF:
1mount | grep bpf
2ls -lah /sys/fs/bpf
در صورت نصب بودن:
1bpftool prog show
35. Troubleshooting — فقط یک Node خراب است
اگر:
1worker-01 Cilium OK
2worker-02 Cilium ERROR
3worker-03 Cilium OK
اول Node را مشخص کنید:
1kubectl -n kube-system get pods \
2 -l k8s-app=cilium -o wide
روی Node مشکلدار:
1uname -r
2ip -br addr
3ip route
4systemctl status containerd
5systemctl status kubelet
6journalctl -u kubelet -n 100
7journalctl -u containerd -n 100
سپس:
1cilium status
مشکل CNI همیشه Cilium نیست؛ ممکن است Kernel، Runtime، Routing، Interface، Firewall یا MTU مشکل داشته باشد.
36. MTU
اگر Pod-to-Pod فقط برای Packetهای کوچک کار میکند یا بعضی connectionها timeout میشوند، MTU را بررسی کنید:
1ip link
و:
1ip route
در شبکههایی که encapsulation وجود دارد، header اضافی میتواند MTU مؤثر را کاهش دهد.
این سناریو را جدی بگیرید:
1Small Packet → OK
2Large Packet → TIMEOUT
37. Routing
روی Nodeها:
1ip route
2ip neigh
3ip -d link
و وضعیت Cilium:
1cilium status
را بررسی کنید.
38. BPF
بررسی:
1mount | grep bpf
1ls -lah /sys/fs/bpf
و در صورت وجود:
1bpftool prog show
هدف این است که بدانیم Cilium واقعاً در datapath چه وضعیتی دارد.
39. kube-proxy در برابر Cilium kube-proxy replacement
حالت اول:
1Cilium
2 +
3kube-proxy
حالت دوم:
1Cilium
2 +
3eBPF kube-proxy replacement
در حالت دوم Cilium بخشی از Service Load Balancing را در datapath خود انجام میدهد.
40. Kubernetes بدون kube-proxy
برای Cluster جدید:
1sudo kubeadm init \
2 --control-plane-endpoint "192.168.10.10:6443" \
3 --pod-network-cidr=10.244.0.0/16 \
4 --service-cidr=10.96.0.0/12 \
5 --skip-phases=addon/kube-proxy
Cilium نیز برای Kubernetes بدون kube-proxy همین مدل را مستند کرده است. citeturn0search2turn0search0
بعد Cilium:
1helm repo add cilium https://helm.cilium.io/
2helm repo update
و:
1helm install cilium cilium/cilium \
2 --version 1.20.0 \
3 --namespace kube-system \
4 --set kubeProxyReplacement=true \
5 --set k8sServiceHost=192.168.10.10 \
6 --set k8sServicePort=6443
در این حالت باید API Server بهصورت مستقیم برای Cilium مشخص شود؛ مستندات
Cilium نیز k8sServiceHost و k8sServicePort را برای این سناریو توضیح
میدهد. citeturn0search2
41. هشدار kube-proxy replacement
روی Cluster فعال Production، kube-proxy را بدون برنامه حذف نکنید.
Cilium هشدار میدهد که حذف kube-proxy میتواند connectionهای موجود را قطع کند و Service traffic را تا آماده شدن replacement مختل کند. citeturn0search2
بنابراین برای Production بهتر است:
1New Cluster
2 ↓
3kubeadm --skip-phases=addon/kube-proxy
4 ↓
5Cilium
6 ↓
7kubeProxyReplacement=true
را از ابتدا طراحی کنید.
42. Production Architecture
معماری پیشنهادی:
1 API Load Balancer
2 │
3 ▼
4 Kubernetes API
5 │
6 ┌────────────┼────────────┐
7 ▼ ▼ ▼
8 CP-01 CP-02 CP-03
9 │ │ │
10 └────────────┼────────────┘
11 │
12 Kubernetes Cluster
13 │
14 ┌────────────────┼────────────────┐
15 ▼ ▼ ▼
16 Worker-01 Worker-02 Worker-03
17 │ │ │
18 Cilium Cilium Cilium
19 │ │ │
20 Hubble Hubble Hubble
21 └────────────────┼────────────────┘
22 ▼
23 Observability
43. Helm Values را در Git نگه دارید
برای Production:
1git/
2└── infrastructure/
3 └── cilium/
4 ├── Chart.yaml
5 ├── values.yaml
6 └── README.md
یا حداقل:
1cilium/
2└── values-production.yaml
و نصب:
1helm upgrade --install cilium cilium/cilium \
2 --version 1.20.0 \
3 --namespace kube-system \
4 --values values-production.yaml
مزیت:
1Version Control
2+
3Review
4+
5Rollback
6+
7Reproducibility
44. Production Checklist
Node
1[ ] Kernel compatible
2[ ] containerd healthy
3[ ] kubelet healthy
4[ ] swap handled
5[ ] IP forwarding enabled
6[ ] Required modules loaded
7[ ] Correct Node IP
8[ ] MTU validated
Kubernetes
1[ ] Control Plane HA
2[ ] API Load Balancer
3[ ] etcd backup
4[ ] Pod CIDR documented
5[ ] Service CIDR documented
6[ ] Kubernetes version pinned
7[ ] Upgrade procedure
Cilium
1[ ] Cilium version pinned
2[ ] Helm values in Git
3[ ] CNI paths verified
4[ ] IPAM understood
5[ ] Routing validated
6[ ] NetworkPolicy tested
7[ ] Hubble enabled where required
8[ ] Failure test completed
Security
1[ ] Default-deny strategy
2[ ] Namespace isolation
3[ ] RBAC
4[ ] Pod Security
5[ ] NetworkPolicy
6[ ] Secrets management
Observability
1[ ] Hubble
2[ ] Prometheus
3[ ] Grafana
4[ ] Alerts
5[ ] Flow visibility
6[ ] Cilium metrics
45. پروژه نهایی سهلایه
در پایان Lab یک Application سهلایه بسازید:
1 Internet
2 │
3 ▼
4 Ingress
5 │
6 ▼
7 ┌──────────┐
8 │ Frontend │
9 └────┬─────┘
10 │
11 TCP/8080
12 │
13 ▼
14 ┌──────────┐
15 │ Backend │
16 └────┬─────┘
17 │
18 TCP/5432
19 │
20 ▼
21 ┌──────────┐
22 │Postgres │
23 └──────────┘
Policy:
1Internet ───► Frontend ALLOW
2Frontend ───► Backend:8080 ALLOW
3Backend ────► Postgres:5432 ALLOW
4
5Internet ───X──► Backend
6Internet ───X──► Postgres
7Frontend ───X──► Postgres
سپس با Hubble بررسی کنید که Flowها دقیقاً مطابق این Graph هستند.
46. Failure Testing
Pod Failure
1kubectl -n cilium-lab delete pod <pod>
انتظار:
1Pod deleted
2 ↓
3ReplicaSet
4 ↓
5New Pod
6 ↓
7Traffic restored
Cilium Agent Restart
در Lab:
1kubectl -n kube-system delete pod \
2 -l k8s-app=cilium
سپس:
1watch kubectl -n kube-system get pods \
2 -l k8s-app=cilium
هدف: مشاهده Recovery Agentها.
Node Failure
در Lab یک Worker را موقتاً از دسترس خارج کنید و:
1kubectl get nodes
2kubectl get pods -A -o wide
را بررسی کنید.
سؤال مهم:
آیا Workloadها به Node دیگر منتقل میشوند؟
NetworkPolicy Failure
Policy را تغییر دهید و همزمان:
1hubble observe \
2 --namespace cilium-lab
را اجرا کنید.
باید تفاوت بین:
1FORWARDED
و:
1DROPPED
را مشاهده کنید.
47. Decision Tree برای Troubleshooting
اگر:
1Pod → Pod = FAILED
از این ترتیب بروید:
1Pod Running؟
2 │
3 ├── NO → kubelet / image / runtime
4 │
5 ▼
6Pod IP دارد؟
7 │
8 ├── NO → Cilium / IPAM
9 │
10 ▼
11Cilium Running؟
12 │
13 ├── NO → logs / kernel / runtime
14 │
15 ▼
16CNI config وجود دارد؟
17 │
18 ├── NO → /etc/cni/net.d
19 │
20 ▼
21Node Routing سالم؟
22 │
23 ├── NO → ip route / interface
24 │
25 ▼
26NetworkPolicy؟
27 │
28 ├── YES → Hubble / cilium monitor
29 │
30 ▼
31MTU؟
32 │
33 ├── SUSPECT → ip link / packet size
34 │
35 ▼
36BPF / Datapath
48. Cheat Sheet
Kubernetes
1kubectl get nodes -o wide
2
3kubectl get pods -A -o wide
4
5kubectl get events -A \
6 --sort-by=.lastTimestamp
Cilium
1cilium status
2
3cilium connectivity test
4
5cilium endpoint list
6
7cilium config view
8
9cilium monitor
Hubble
1hubble observe
2
3hubble observe \
4 --namespace cilium-lab
5
6hubble observe \
7 --protocol TCP
Node
1uname -r
2
3ip -br addr
4
5ip route
6
7ip neigh
8
9ip link
10
11mount | grep bpf
12
13ls -lah /sys/fs/bpf
Runtime
1systemctl status containerd
2
3journalctl -u containerd -n 100
4
5journalctl -u kubelet -n 100
49. چیزی که باید از این پروژه یاد بگیریم
هدف پروژه صرفاً این نیست:
1cilium install
هدف این است که مسیر کامل را بفهمیم:
1Kubernetes
2 ↓
3CNI
4 ↓
5Cilium
6 ↓
7IPAM
8 ↓
9Endpoint
10 ↓
11eBPF
12 ↓
13Routing
14 ↓
15Service Load Balancing
16 ↓
17NetworkPolicy
18 ↓
19Hubble
20 ↓
21Troubleshooting
و بتوانیم برای یک خطای واقعی مثل:
1Pod A → Service B → TIMEOUT
بهصورت سیستماتیک بررسی کنیم:
1Application
2 ↓
3DNS
4 ↓
5Service
6 ↓
7EndpointSlice
8 ↓
9Cilium Endpoint
10 ↓
11NetworkPolicy
12 ↓
13Hubble Flow
14 ↓
15Routing
16 ↓
17MTU
18 ↓
19eBPF Datapath
20 ↓
21Linux Kernel
این نقطهای است که دانش Kubernetes از اجرای چند دستور kubectl عبور
میکند و وارد Platform Engineering میشود.
جمعبندی
در این پروژه از:
1Linux
2 ↓
3containerd
4 ↓
5kubeadm
6 ↓
7Kubernetes
به:
1Kubernetes
2 ↓
3Cilium CNI
4 ↓
5eBPF
6 ↓
7Pod Networking
8 ↓
9Service Networking
10 ↓
11NetworkPolicy
12 ↓
13Hubble
رسیدیم.
بعد حالت پیشرفته:
1Kubernetes
2 ↓
3Cilium
4 ↓
5eBPF kube-proxy replacement
را بررسی کردیم.
Cilium زمانی در Production ارزش واقعی خود را نشان میدهد که تیم بتواند:
- IPAM را طراحی کند.
- Routing را بفهمد.
- MTU را مدیریت کند.
- NetworkPolicy را درست طراحی کند.
- Flowها را observe کند.
- Failure را شبیهسازی کند.
- Cilium را Upgrade و Rollback کند.
- Datapath را Troubleshoot کند.
- Kernel و eBPF را درک کند.
- Configuration را با GitOps مدیریت کند.
نصب Cilium پایان کار نیست؛ فهمیدن datapath و توانایی Troubleshooting آن، اصل ماجراست.
منابع رسمی
- Cilium — Installation using kubeadm citeturn0search0
- Cilium — Quick Installation citeturn0search8
- Cilium — Kubernetes Without kube-proxy citeturn0search2
- Cilium — Helm Installation citeturn0search5
- Kubernetes — Creating a Cluster with kubeadm citeturn0search3
- Kubernetes — Network Plugins / CNI citeturn0search7
گیتنامی — From Infrastructure to Production AI Engineering