【Kubernetes】Kubernetes 网络插件 Flannel/Calico/Cilium

发布于:2025-04-23 ⋅ 阅读:(14) ⋅ 点赞:(0)

这是一篇关于 Kubernetes 常见网络插件(Flannel、Calico 和 Cilium)的文章,详细介绍了不同网络插件之间的优缺点及其适用场景,提供详细的安装指导,希望这篇文章能帮助您找到合适的网络插件!

  • 操作系统:CentOS Linux 7 (Core)
  • Containerd:1.6.33
  • Kubernetes:1.30.1

1、Flannel vs Calico vs Cilium

  • 核心特性对比
特性 Flannel Calico Cilium
网络模型 Overlay (VXLAN) BGP/IPIP/VXLAN eBPF-based
性能 中等 极高
网络策略 基本支持 高级支持 最先进支持
加密 不支持 IPsec WireGuard/IPsec
服务发现 内置
可观测性 有限 中等 丰富
安装复杂度 简单 中等 较复杂
适用集群规模 中小型(≤100节点) 大中型(≤1000节点)

任意规模 

  • 性能对比指标

        1、吞吐量

                Cilium(eBPF) > Calico(BGP) > Calico(IPIP) > Flannel(VXLAN)

        2、延迟

                Cilium(eBPF) ≈ Calico(BGP) < Calico(IPIP) < Flannel(VXLAN)

        3、CPU 利用率

                Flannel ≈ Calico(BGP) < Calico(IPIP) < Cilium(高负载下更好)

        4、策略执行效率

                Cilium(L3-L7) > Calico(L3-L4) > Flannel(基本)

  • 综合优缺点分析

        1、Flannel

        a、优点:

                安装配置简单,适合简单的网络需求

                资源消耗低

                社区支持广泛,稳定性高

        b、缺点:

                仅支持基本网络策略

                性能一般(使用VXLAN封装有开销)

                缺乏高级网络功能

        c、典型场景:

                开发测试环境、小型生产集群

                不需要复杂网络策略的场景

                资源受限的环境

        2、Calico

        a、优点:

                高性能(BGP模式无封装开销)

                丰富的网络策略支持

                良好的可扩展性

                支持IP地址管理(IPAM)

        b、缺点:

                配置相对复杂

                BGP 模式需要网络基础设施支持

                eBPF 功能较 Cilium 有限

        c、典型场景:

                企业级生产环境

                需要严格网络策略的场景、需要高性能网络的环境

                混合云/多集群环境

        3、Cilium

        a、优点:

                基于eBPF的极致性能

                高级网络策略(L3 - L7)

                内置服务网格功能

                强大的可观测性

                原生支持多集群

        b、缺点:

                学习曲线陡峭

                对内核版本有要求(≥4.19)

                资源消耗相对较高

                某些高级功能需要商业版

        c、典型场景:

                高性能需求场景,大规模集群

                安全敏感型环境

                服务网格集成需求

                需要深度网络可视化的环境

2、安装 Flannel 网络插件

  • Flannel:v0.26.7
### 安装 ###

# 下载 flannel.yml 配置(文件内容见附件)
wget https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
# 应用 kube-flannel.yml
kubectl apply -f kube-flannel.yml
# 验证测试网络插件部署成功
kubectl get pods -n kube-system
kubectl run nginx-flannel --image=nginx:latest

## 报错:Failed to check br netfilter: stat /proc/sys/net/bridge/bridge-nf-call-iptables: no such file or directory
## 原因:通常表示内核模块 br_netfilter 未加载或未正确配置
## 解决:
# 加载 br_netfilter 模块
modprobe br_netfilter
# 配置以启用桥接网络的 iptables 规则
cat > /etc/sysctl.d/k8s.conf << EOF
net.ipv4.ip_forward = 1                       # 开启路由转发
net.bridge.bridge-nf-call-ip6tables = 1       # 开启桥流量监控
net.bridge.bridge-nf-call-iptables = 1        # 开启桥流量监控
EOF
# 生效
sysctl --system   
# 重启 kubelet、containerd
systemctl daemon-reload
systemctl restart kubelet
systemctl restart containerd

## 配置 ghcr.io镜像加速
## 解决:
mkdir -p /etc/containerd/certs.d/ghcr.io
tee /etc/containerd/certs.d/ghcr.io/hosts.toml << 'EOF'
server = "https://ghcr.io"
[host."https://ghcr.m.daocloud.io"]
  capabilities = ["pull", "resolve", "push"]
EOF

3、安装 Calico 网络插件

  • Calico:v3.29.3
### 安装 ###

# 下载 tigera-operator.yaml、custom-resources.yaml(文件内容见附件)
wget https://raw.githubusercontent.com/projectcalico/calico/v3.29.3/manifests/tigera-operator.yaml
wget https://raw.githubusercontent.com/projectcalico/calico/v3.29.3/manifests/custom-resources.yaml
# 部署 tigera-operator.yaml
kubectl create -f tigera-operator.yaml
# 查看 podSubnet 并修改 custom-resources.yaml 中的 spec.calicoNetwork.ipPools.cidr
kubectl get cm -n kube-system kubeadm-config -o yaml | grep podSubnet
vi custom-resources.yaml
...
cidr: 10.244.0.0/16
...
# 部署 custom-resources.yaml
kubectl create -f custom-resources.yaml
# 验证测试网络插件部署成功
kubectl get all -n calico-system
kubectl get pod -A
kubectl run nginx-calico --image=nginx:latest


## 报错:The CustomResourceDefinition "installations.operator.tigera.io" is invalid: metadata.annotations: Too long: must have at most 262144 bytes
## 原因(官方文档):
# NOTE:Due to the large size of the CRD bundle, kubectl apply might exceed request limits. Instead, use kubectl create or kubectl replace.
## 解决:使用 kubectl create -f xxx.yaml 命令即可

4、安装 Cilium 网络插件

  • cilium-cli: v0.18.3 compiled with go1.24.2 on linux/amd64
  • cilium image (default): v1.17.2
  • cilium image (stable): v1.17.3
  • cilium image (running): 1.17.2
### 安装 ###

# 下载安装包(安装包见附件)
wget curl -LO https://github.com/cilium/cilium-cli/releases/download/v0.17.0/cilium-linux-amd64.tar.gz
# 解压后将 cilium 移动到 /usr/local/bin
tar -zxvf cilium-linux-amd64.tar.gz
mv cilium /usr/local/bin
# 完成后可执行 cilium --help 验证 cilium 可用
cilium --help
# 使用 cilium install 命令安装 cilium 网络插件
cilium install --set kubeProxyPeplacement=strict --set ipam.mode=kubernetes --set routingMode=tunnel --set tunnelProtocol=vxlan --set ipam.operator.clusterPoolIPv4PodCIDRList=10.244.0.0/16 --set ipam.Operator.ClusterPoolIPv4MaskSize=24
# 查看安装状态
kubectl get pod -A
cilium status
# 验证测试网络插件部署成功
kubectl run nginx-cilium --image=nginx:latest


网站公告

今日签到

点亮在社区的每一天
去签到