乐于分享
好东西不私藏

Cilium 网络插件安装指南(k3s)

Cilium 网络插件安装指南(k3s)
一、Cilium 和 Hubble 介绍
1.1、什么是Cilium?

Cilium 是一款开源软件,用于透明地保护使用 Linux 容器管理平台(如 Docker 和 Kubernetes)部署的应用程序服务之间的网络连接。

Cilium 的基础是一项名为 eBPF 的全新 Linux 内核技术,它能够将强大的安全可见性和控制逻辑动态地嵌入到 Linux 内核内部。由于 eBPF 运行在 Linux 内核中,因此无需更改应用程序代码或容器配置即可应用和更新 Cilium 安全策略。

1.2、什么是Hubble?

Hubble是一个完全分布式的网络和安全可观测性平台。它基于Cilium和eBPF构建,能够以完全透明的方式深入洞察服务的通信和行为以及网络基础设施。

Hubble 基于 Cilium 构建,可以利用 eBPF 实现可视化。借助 eBPF,所有可视化功能都可编程,从而实现动态方法,在最大限度减少系统开销的同时,根据用户需求提供深入细致的可视化效果。Hubble 的创建和设计旨在充分利用 eBPF 的这些强大功能。

1.3、不同网络插件之间的差异

不同的网络插件支持的最大 Pod 数量不同:

Flannel:建议不超过 200。

Calico:可以支持到 500 以上。

Cilium:性能最好,可以支持到 1000 以上。

1.4、自定义CNI注意事项
https://docs.k3s.io/zh/networking/basic-network-options
1.5、Cilium 相关地址建议收藏
Cilium官网:
https://cilium.io/
Cilium代码仓库地址:
https://github.com/cilium/cilium/
1.19.4

Cilium 官网文档:

https://docs.cilium.io/en/stable/

Cilium 的 helm 地址:

https://helm.cilium.io/
二、安装helm包管理器
wget https://get.helm.sh/helm-v4.2.0-linux-amd64.tar.gz
tar -zxvf helm-v4.2.0-linux-amd64.tar.gz 
cd linux-amd64mv helm /usr/local/bin/helm version
三、安装cilium网络插件
export KUBECONFIG=/etc/rancher/k3s/k3s.yaml
3.1、添加 Cilium 官方 Helm 仓库
helm repo add cilium https://helm.cilium.io/
3.2、更新仓库索引,获取最新 Chart 版本
helm repo update
3.3、验证仓库添加成功并查看可用版本
helm search repo cilium --versions
3.4、helm方式安装cilium
helm install cilium cilium/cilium \  --namespace kube-system \  --create-namespace \  --version 1.19.4 \  --set ipv4NativeRoutingCIDR=10.42.0.0/16 \  --set hubble.enabled=true \  --set hubble.relay.enabled=true \  --set hubble.relay.replicas=1 \  --set hubble.ui.enabled=true \  --set operator.replicas=1 \  --set k8sServiceHost=192.168.1.200 \  --set k8sServicePort=6443 \  --set devices=ens160 \  --set lsm.enabled=false \  --set cgroup.autoMount.enabled=false \  --set hubble.relay.tls.auto.enabled=true
3.5、查看集群状态
[root@paas1 ~]# kubectl get nodesNAME    STATUS   ROLES                       AGE    VERSIONpaas1   Ready    control-plane,etcd,master   168m   v1.36.0+k3s1paas2   Ready    control-plane,etcd,master   168m   v1.36.0+k3s1paas3   Ready    control-plane,etcd,master   167m   v1.36.0+k3s1paas4   Ready    worker                      166m   v1.36.0+k3s1
3.6、查看所有pod 状态
kubectl get pod -A
3.7、查看cilium的pod有哪些
kubectl get pods -n kube-system | grep cilium
3.7、查看是否已经成功启用本地路由
[root@paas1 home]# kubectl logs -f cilium-8zzv5  -n kube-system|grep datapath |grep datapath-modetime=2026-05-19T12:32:04.373518532Z level=info msg="  --datapath-mode='veth'"
--datapath-mode='veth' 已经成功启用本地路由。
四、Cilium CLI 命令行工具
https://github.com/cilium/cilium-cli
cd /home/wget https://github.com/cilium/cilium-cli/releases/download/v0.19.2/cilium-linux-amd64.tar.gz
tar -zxvf cilium-linux-amd64.tar.gzmv cilium /usr/local/bin/cilium version 
cilium status 
cilium config view

五、升级 Helm 值配置,开启 Hubble 全套

helm upgrade cilium cilium/cilium -n kube-system \  --reuse-values \  --set hubble.enabled=true \  --set hubble.relay.enabled=true \  --set hubble.ui.enabled=true

强制重启 Cilium:

kubectl rollout restart daemonset cilium -n kube-systemkubectl rollout status daemonset cilium -n kube-system

验证开启:

[root@paas1 home]# kubectl -n kube-system exec -it ds/cilium -- cilium statusKVStore:                 Disabled   Kubernetes:              Ok         1.36 (v1.36.0+k3s1) [linux/amd64]Kubernetes APIs:         ["cilium/v2::CiliumCIDRGroup", "cilium/v2::CiliumClusterwideNetworkPolicy", "cilium/v2::CiliumEndpoint", "cilium/v2::CiliumNetworkPolicy", "cilium/v2::CiliumNode", "core/v1::Pods", "networking.k8s.io/v1::NetworkPolicy"]KubeProxyReplacement:    False   Host firewall:           DisabledSRv6:                    DisabledCNI Chaining:            noneCNI Config file:         successfully wrote CNI configuration file to /host/etc/cni/net.d/05-cilium.conflistCilium:                  Ok   1.19.4 (v1.19.4-95e477fd)NodeMonitor:             Listening for events on 128 CPUs with 64x4096 of shared memoryCilium health daemon:    Ok   IPAM:                    IPv4: 7/254 allocated from 10.0.0.0/24IPv4 BIG TCP:            DisabledIPv6 BIG TCP:            DisabledBandwidthManager:        DisabledRouting:                 Network: Tunnel [vxlan]   Host: LegacyAttach Mode:             Legacy TCDevice Mode:             vethMasquerading:            IPTables [IPv4: Enabled, IPv6: Disabled]Controller Status:       44/44 healthyProxy Status:            OK, ip 10.0.0.1150 redirects active on ports 10000-20000, Envoy: externalGlobal Identity Range:   min 256, max 65535Hubble:                  Ok              Current/Max Flows: 518/4095 (12.65%), Flows/s: 8.68   Metrics: DisabledEncryption:              Disabled        Cluster health:          0/0 reachable   (2026-05-19T13:30:06Z)   (Probe interval0s)Name                     IP              Node                     EndpointsModules Health:          Stopped(24) Degraded(0) OK(84)[root@paas1 home]# 
成功开启:
Hubble                 Ok      

五、查看hubble-ui服务端口并放出外部端口

kubectl get svc -n kube-system 
 kubectl edit svc -n kube-system hubble-ui---将clusterIP 改为NodePort ---
# 暴露 NodePortkubectl patch svc hubble-ui -n kube-system -p '{"spec":{"type":"NodePort"}}'
http://192.168.1.203:32568/