Kubernetes部署Flannel网络插件方法

千涛姑娘_2174

千涛姑娘_2174

2026-10-16

947人浏览

原创

flannel 通过 kubectl apply 部署 daemonset 等资源实现,而非传统安装;需准备镜像、cni 二进制和配置文件;vxlan 模式须检查 mtu、vxlan 模块及 udp 8472 端口;host-gw 模式仅适用于同二层网络;子网分配依赖 etcd 或 kubernetes api 兼容性。

kubernetes部署flannel网络插件方法

Flannel 不是“安装”出来的,而是通过 kubectl apply 部署一个 DaemonSet 和配套 ConfigMap、RBAC 等资源对象;直接运行二进制或 yum 安装 flanneld 在现代 Kubernetes(1.19+)中基本失效,因为 CNI 插件必须由 kubelet 调用,而非独立守护进程管理。

为什么 kubectl apply -f kube-flannel.yml 是主流方式

从 kubeadm 初始化的集群开始,Kubernetes 就默认要求 CNI 插件以标准 CNI 规范注入:插件配置写入 /etc/cni/net.d/,二进制放在 /opt/cni/bin/,所有动作由 kubelet 触发。flannel 的官方 YAML(如 kube-flannel.yml)正是按此结构组织:

  • 自动创建 ConfigMap 存储网络配置(如 Network CIDR、Backend 类型)
  • 通过 DaemonSet 在每个 Node 上部署容器化 flanneld,并挂载宿主机的 /run/flannel、/etc/cni/net.d 等路径
  • 容器内执行 mk-docker-opts.sh 或直接写入 cni-conf.json,确保后续 Pod 启动时能被正确分配 IP

离线环境必须提前准备的三类文件

离线部署失败 90% 出在镜像和配置缺失。你不能只下载 YAML 文件就跑 kubectl apply:

  • flannel 镜像:例如 quay.io/coreos/flannel:v0.24.2(注意版本需匹配 Kubernetes 版本,1.23+ 推荐 v0.22.0+)
  • pause 镜像:Pod 的 infra 容器,必须与 kubelet 的 --pod-infra-container-image 参数一致,常见如 k8s.gcr.io/pause:3.9
  • CNI 二进制:YAML 中默认不带,需手动放入每个节点的 /opt/cni/bin/,至少包含 flannel 和 bridge(loopback 可选)

漏掉任意一项,kube-flannel Pod 就会卡在 ContainerCreating 或 CrashLoopBackOff,kubectl describe pod -n kube-flannel 里能看到 Failed to create pod sandbox 或 cni plugin not initialized。

Kubernetes Network Policy Generator
Kubernetes Network Policy Generator

使用加权评分卡在12项标准上评估和比较隐私解决方案供应商。适用于选择隐私管理软件、比较数据保护方案等场景。

下载

VXLAN 模式下必须检查的两个关键点

默认 VXLAN 模式看似开箱即用,但实际常因底层网络参数不匹配导致跨节点不通:

  • flannel.1 设备的 MTU 必须 ≤ 宿主机物理网卡 MTU − 50(VXLAN 封装开销),否则大包被静默丢弃;常见做法是统一设为 1450,并在 YAML 的 net-conf.json 段显式指定 "MTU": 1450
  • 确认内核已加载 vxlan 模块:lsmod | grep vxlan,若为空需 modprobe vxlan 并写入 /etc/modules 持久化
  • 防火墙必须放行 UDP 8472 端口(VXLAN 默认端口),iptables -I INPUT -p udp --dport 8472 -j ACCEPT

host-gw 模式适用但限制极严

如果你追求零封装性能,且所有 Node 确实处于同一二层网络(比如同个交换机下的物理机),可改用 host-gw:

  • 修改 YAML 中 net-conf.json 的 "Backend": {"Type": "host-gw"}
  • 无需 vxlan 模块,也不用开 UDP 8472
  • 但一旦节点跨子网(哪怕只是不同 VLAN),路由条目无法生效,ip route 里看不到对应 Pod CIDR 的下一跳
  • 错误现象:同节点 Pod 通,跨节点完全不通,tcpdump -i eth0 icmp 抓不到任何目标 IP 的包

真正容易被忽略的是:flannel 的子网分配依赖 etcd 或 Kubernetes API —— 如果你用的是 kubeadm 且未关闭 etcd 的 v2 API(ETCD_ENABLE_V2=true),而 flannel YAML 默认用 v1 API 写子网,就会静默失败。此时必须核对 etcd 版本与 YAML 中的 etcd-endpoints 协议是否匹配,或直接切到基于 Kubernetes API 的后端("Backend": {"Type": "vxlan", "DirectRouting": true})。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
Golang云原生微服务Kubernetes_Golang怎么集成Kubernetes开发云原生服务
Golang云原生微服务Kubernetes_Golang怎么集成Kubernetes开发云原生服务

Golang云原生微服务Kubernetes (K8s) 是指 使用 Go 语言(Golang)编写的云原生微服务,并利用 Kubernetes 平台进行容器化部署、自动化管理、弹性伸缩和高效编排的一整套现代应用架构方案。

2025.12.22

116

5

Go云原生应用与Kubernetes服务部署实战
Go云原生应用与Kubernetes服务部署实战

本专题围绕 Go 语言在云原生环境中的应用展开,讲解容器化部署、Kubernetes 编排、服务发现、健康检查与弹性扩缩容机制。通过真实云端案例,帮助开发者构建可扩展的云原生微服务架构。

2026.06.29

188

19

Revel框架模板渲染与表单验证
Revel框架模板渲染与表单验证

本专题围绕Revel框架视图层开发,介绍模板语法、变量输出、布局复用、表单提交、参数绑定与验证规则,帮助开发者完成安全规范的页面交互。

2026.10.16

0

15

Revel框架MVC路由与控制器
Revel框架MVC路由与控制器

本专题聚焦Revel框架MVC核心机制,讲解路由定义、控制器Action、参数绑定、请求响应和反向路由,并结合常见场景梳理接口请求处理流程。

2026.10.16

0

15

Revel框架入门与安装配置
Revel框架入门与安装配置

本专题从Revel框架环境搭建讲起,系统介绍命令行工具安装、项目创建、目录结构、配置文件及热代码重载,帮助开发者快速完成首个Go Web应用。

2026.10.16

0

15

Linux 新手先学哪些命令
Linux 新手先学哪些命令

Linux新手命令专题汇集终端基础、文件目录操作、文本查看、软件安装和权限管理等入门文章,帮助按实际任务练习常用命令并建立命令行操作习惯。

2026.10.15

0

20

MySQL 忘记密码怎么办
MySQL 忘记密码怎么办

MySQL忘记密码专题汇集不同版本与系统下的root密码重置方法,覆盖MySQL 5.7、8.0、Mac、Linux及本地集成环境,并提示恢复权限与重新登录的检查步骤。

2026.10.15

0

18

Vue.js 中 ref 和 reactive 的区别
Vue.js 中 ref 和 reactive 的区别

Vue.js中ref和reactive的区别专题汇集两种响应式API的定义、访问方式、对象解构、侦听与性能取舍等文章,帮助结合实际状态类型选择合适写法。

2026.10.15

0

20

VS Code 怎么配置开发环境
VS Code 怎么配置开发环境

VS Code开发环境专题汇集编辑器安装、语言扩展、编译器、解释器、终端和调试配置文章,覆盖Java、Python、C++和PHP等常见语言的入门设置。

2026.10.15

0

18

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kubernetes官方教程手册
Kubernetes官方教程手册

共0课时 | 0人学习

Kubernetes官方中文文档
Kubernetes官方中文文档

共0课时 | 0人学习