KubeCon + CloudNativeCon Europe 2024 :Supercharge Kubernetes Networking with Cilium and IPv6

Chaya Phuwichit
odds.team
Published in
4 min readMar 21, 2024

ปีนี้ได้มีโอกาศไปร่วมงานสัมมนา KubeCon + CloudNativeCon Europe 2024 พบว่า Cilium + eBPF เป็นหัวข้อหนึ่งที่มีคนสนใจมากๆ แบบต้องเข้าไปรอในห้องสัมนาก่อน 30 นาทีเลย

ผมได้เข้าฟัง หัวข้อ

Supercharge Kubernetes Networking with Cilium and IPv6

ของคุณ Daneyon Hansen

หัวข้อนี้เป็นการเพิ่มประสิทธิภาพ ของ kubernetes network โดยใช้ Cilium + IPv6

โดยคุณ Daneyon ใช้ kind ในการ Demo

เริ่มต้นจากสร้าง kind ที่ enable IPv6

แล้ว install cilium ลงไป

cilium install --version v1.15.1 \
--set debug.enabled=true \
--set ipv4.enabled=false \
--set ipv6.enabled=true \
--set routingMode=native \
--set autoDirectNodeRoutes=true \
--set ipv6NativeRoutingCIDR=fd00:10::/32 \
--set bpf.masquerade=true \
--set kubeProxyReplacement=true

Run simple app เพื่อไว้ทดสอบ

kubectl apply -f - <<EOF
apiVersion: v1
kind: Pod
metadata:
name: client
labels:
app: client
spec:
containers:
- name: curl-client
image: curlimages/curl
imagePullPolicy: IfNotPresent
command: ["/bin/sh"]
args: ["-c", "while true; do sleep 1000; done"]
nodeSelector:
kubernetes.io/hostname: kind-control-plane
---
apiVersion: v1
kind: Pod
metadata:
name: server
labels:
app: server
spec:
containers:
- name: server
image: nginx
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
nodeSelector:
kubernetes.io/hostname: kind-worker
EOF

ต่อด้วย Demo Hubble และ Network Policy

BIG TCP เป็นเรื่องที่น่าสนใจมาก
IPv6 BIG TCP ช่วยให้สแตกเครือข่ายสามารถจัดการแพ็กเก็ตข้อมูลขาส่งและขารับที่มีขนาดใหญ่ขึ้น (192kb) ซึ่งจะช่วยลดจำนวนครั้งที่ต้องส่งผ่านสแตก ส่งผลให้ประสิทธิภาพและความหน่วงดีขึ้น นอกจากนี้ยังช่วยลดภาระของ CPU และช่วยให้ได้ความเร็วที่สูงขึ้น

เริ่มจากการตรวจสอบว่ายังไม่เปิดใช้งาน

$ cilium config view | grep big
enable-ipv6-big-tcp false

ตรวจสอบค่าปรับตั้ง GSO ของโหนด

for node in kind-control-plane kind-worker; do
echo "$node gso_max_size:"
docker exec $node ip -d -j link show dev eth0 | jq -c '.[0].gso_max_size'
done
kind-control-plane gso_max_size:
65536
kind-worker gso_max_size:
65536

สร้าง netperf client server ไว้ทดสอบ

kubectl apply -f - <<EOF
apiVersion: v1
kind: Pod
metadata:
name: np-server
spec:
containers:
- name: netperf
image: cilium/netperf
imagePullPolicy: IfNotPresent
ports:
- containerPort: 12865
nodeSelector:
kubernetes.io/hostname: kind-worker
---
apiVersion: v1
kind: Pod
metadata:
name: np-client
spec:
containers:
- name: netperf
args:
- sleep
- infinity
image: cilium/netperf
imagePullPolicy: IfNotPresent
nodeSelector:
kubernetes.io/hostname: kind-control-plane
EOF
$ kubectl get po -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
np-client 1/1 Running 0 31s fd00:10:244::96 kind-control-plane <none> <none>
np-server 1/1 Running 0 31s fd00:10:244:1::35b7 kind-worker <none> <none>
...

รันทดสอบ

kubectl exec np-client -- netperf  -t TCP_RR -H fd00:10:244:1::35d7 -- -r80000:80000 -O MIN_LATENCY,P90_LATENCY,P99_LATENCY,THROUGHPUT

จะได้ผลทดสอบก่อนเปิดใช้งาน BIG TCP

MIGRATED TCP REQUEST/RESPONSE TEST from ::0 (::) port 0 AF_INET6 to fd00:10:244:1::35d7 () port 0 AF_INET6 : first burst 0
Minimum 90th 99th Throughput
Latency Percentile Percentile
Microseconds Latency Latency
Microseconds Microseconds
86 160 247 7515.80

จากนั้นเปิดใช้งาน BIG TCP

cilium config set enable-ipv6-big-tcp true
cilium status --wait

รอจน “ready” status แล้ว ตรวจสอบค่าปรับตั้ง GSO ของโหนดดูว่ามีการเพิ่ม size จากเดิมหรือไม่

for node in kind-control-plane kind-worker; do   echo "$node gso_max_size:";   docker exec $node ip -d -j link show dev eth0 | jq -c '.[0].gso_max_size'; done
kind-control-plane gso_max_size:
196608
kind-worker gso_max_size:
196608

แล้วจึง restart POD

kubectl delete po/np-client --force
kubectl delete po/np-server --force

ทำการทดสอบอีกครั้ง

kubectl exec np-client -- netperf  -t TCP_RR -H fd00:10:244:1::e32e -- -r80000:80000 -O MIN_LATENCY,P90_LATENCY,P99_LATENCY,THROUGHPUT
MIGRATED TCP REQUEST/RESPONSE TEST from ::0 (::) port 0 AF_INET6 to fd00:10:244:1::e32e () port 0 AF_INET6 : first burst 0
Minimum 90th 99th Throughput
Latency Percentile Percentile
Microseconds Latency Latency
Microseconds Microseconds
45 106 152 14370.36

จะเห็นได้ว่าหลังจากเปิดใช้งาน BIG TCP Throughput ได้เพิ่มขึ้นมาพอสมควร เมื่อได้เห็นผลทดสอบแล้วทำให้ Cilium + IPv6 นี่สนใจมากในการนำมาปรับใช้งานกับ kubernetes cluster มากๆๆครับ

--

--