1. เช็คดูสถานะของ Cilium ก่อนด้วยคำสั่ง
cilium status
ผลลัพธ์ก็จะได้ประมาณนี้
Cilium: OK
Operator: OK
Envoy DaemonSet: OK
เช็คว่ามีการใช้ Proxy Replacement หรือไม่ด้วยคำสั่ง
kubectl -n kube-system get cm cilium-config -o yaml | grep kube-proxy
ผลลัพธ์ควรจะเป็น
kube-proxy-replacement: "true"
เช็คดูว่า Envoy เปิดใช้งานไปหรือยังด้วยคำสั่ง
kubectl -n kube-system get cm cilium-config -o yaml | grep envoy
สิ่งที่ควรได้รับคือ
envoy.enabled: "true"
เช็คว่า Gateway API เปิดใช้หรือยัง
kubectl -n kube-system get cm cilium-config -o yaml | grep gateway
สิ่งที่ควรจะได้รับคือ
gatewayAPI.enable: "true"
2. เปิดการใช้งาน L2 Annoucement ด้วยคำสั่ง
helm upgrade cilium cilium/cilium --namespace kube-system --reuse-values --set l2announcements.enabled=true
เช็คว่ามันได้เปิดไปหรือยัง ด้วยคำสั่ง
kubectl -n kube-system get cm cilium-config -o yaml | grep l2
ผลลัพธ์ที่ได้ควรจะเป็น
enable-l2-announcements: "true"
3. สร้าง LoadBalancer IP Pool
สร้างไฟล์ อาจจะตั้งชื่อว่า cilium-lb-pool.yaml และภายในไฟล์มีเนื้อหาดังนี้
apiVersion: cilium.io/v2alpha1
kind: CiliumLoadBalancerIPPool
metadata:
name: lan-pool
spec:
blocks:
- start: XX.XX.XX.200
stop: XX.XX.XX.220
โดยที่ XX.XX.XX = subnet class ของท่านใช่ 192.168.10
หลังจากนั้น ทำการ apply เข้าไปด้วยคำสั่ง
kubectl apply -f cilium-lb-pool.yaml
และทดสอบว่ามันได้เปลี่ยนแปลงหรือยัง โดยการพิมพ์
kubectl get ciliumloadbalancerippools
4. สร้าง L2 Announcement Policy
สร้างไฟล์ที่ชื่อว่า cilium-l2-policy.yaml
โดยมีเนื้อหา
apiVersion: cilium.io/v2alpha1
kind: CiliumL2AnnouncementPolicy
metadata:
name: lan-policy
spec:
nodeSelector:
matchLabels: {}
serviceSelector:
matchLabels: {}
interfaces:
- ens18
loadBalancerIPs: true
แล้วทำการ apply ด้วยคำสั่ง
kubectl apply -f cilium-l2-policy.yaml
ตรวจสอบด้วยคำสั่ง
kubectl get ciliuml2announcementpolicies
5. ทำการทดสอบด้วย application
kubectl create deployment nginx --image=nginx
6. สร้างบริการ LoadBalancer
kubectl expose deployment nginx --name nginx --type LoadBalancer --port 80 --target-port 80
ทดสอบด้วยคำสั่ง
kubectl describe svc nginx
ผลลัพธ์จะได้ประมาณนี้คือ
Type: LoadBalancer
Port: 80/TCP
TargetPort: 80/TCP
LoadBalancer Ingress:
xx.xx.xx.x
7. ตรวจสอบการทำงาน
kubectl get svc nginx