k8s的flannel生产实战与常见问题排查

关于 Kubernetes Flannel 插件的详细教程及生产环境实战指南,涵盖核心概念、安装配置、常见问题排查与优化策略

Flannel通信流程

一、Flannel 概述

Flannel 是 Kubernetes 最常用的 CNI(Container Network Interface)插件之一,用于为集群中的 Pod 提供跨节点通信。其核心功能是分配 Pod IP 并建立覆盖网络(Overlay Network),支持多种后端(Backend)如 VXLAN、host-gw、UDP 等。

核心特性
  • 简单轻量:配置简单,资源消耗低。

  • IP 地址管理(IPAM):自动为每个节点分配子网。

  • 跨节点通信:通过覆盖网络实现 Pod 跨节点互通。

二、安装与配置 Flannel

1. 前置条件
  • 已部署 Kubernetes 集群(kubeadm、kops 等工具搭建)。

  • 节点间网络互通(开放 UDP 8472/VXLAN 或相应端口)。

2. 安装 Flannel

使用官方 Manifest 安装最新版本

kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml

或通过 Helm 安装(需预先安装 Helm)

helm repo add flannel https://flannel-io.github.io/flannel/

helm install flannel flannel/flannel

3. 配置 Flannel 后端

Flannel 支持多种后端模式,需根据网络环境选择:

后端模式 适用场景 性能 配置示例
VXLAN 跨子网、云环境(默认) 中等 net-conf.json: { "Network": "10.244.0.0/16", "Backend": { "Type": "vxlan" } }
host-gw 同子网、物理网络 Backend: { "Type": "host-gw" }
UDP 老旧内核兼容(不推荐生产) Backend: { "Type": "udp" }
WireGuard 加密通信(需内核支持) 中等 Backend: { "Type": "wireguard" }

修改配置示例(通过 ConfigMap部署):

kube-flannel.yml 片段

net-conf.json: |

{

"Network": "10.244.0.0/16",

"Backend": {

"Type": "host-gw"

}

}

三、生产环境实战指南

1. 高可用性
  • 多副本部署 :确保 kube-flannel-ds DaemonSet 在所有节点运行。

  • 节点失效恢复 :Flannel 依赖 Kubernetes 节点状态更新,确保 kubelet 健康。

2. 网络策略
  • NetworkPolicy 支持:Flannel 自身不提供网络策略,需结合 Calico 或 Cilium。

  • 防火墙规则:开放 VXLAN UDP 8472 或 host-gw 的 IP 协议。

3. 监控与日志
  • 日志收集:查看 Flannel Pod 日志定位问题:
  • 命令示例:

    kubectl logs -n kube-system <flannel-pod-name> --tail=100

  • Metrics 监控:集成 Prometheus 监控 Flannel 指标(需配置 ServiceMonitor)。
4. 安全加固
  • Pod 安全上下文:限制 Flannel Pod 的权限:

    yaml 复制代码
    #yaml示例
    securityContext:
      privileged: false
      capabilities:
        add: ["NET_ADMIN"]
     
  • 加密通信:使用 WireGuard 或 IPSec 后端加密跨节点流量。
5. 性能优化
  • MTU 调整:根据网络环境调整 MTU(避免分片):

    json示例:

  • "Backend": {

    "Type": "vxlan",

    "MTU": 1450

    }

  • 避免 UDP 后端:仅在测试环境使用 UDP,生产环境优先选择 VXLAN 或 host-gw。

四、常见问题排查

1. Pod 无法跨节点通信
  • 检查路由表

  • 在节点上执行

    ip route show | grep flannel

  • 验证防火墙:确保 VXLAN(UDP 8472)或 host-gw(IP 协议)端口开放。

  • 查看 Flannel 日志

  • kubectl logs -n kube-system <flannel-pod-name> | grep "Failed"

2. IP 地址分配冲突
  • 清理旧配置
  • ip link delete flannel.1

    rm -rf /var/lib/cni/flannel/*

  • 重置 Flannel:重启 Flannel DaemonSet 并重建 Pod。
3. 性能瓶颈
  • 切换后端模式:从 VXLAN 切换到 host-gw(需同子网)。

  • 调整 MTU:根据网络实际 MTU 优化(如 AWS 默认 MTU 为 9001)。


五、与其他 CNI 插件对比

CNI 插件 优势 劣势
Flannel 简单、轻量、易部署 功能单一(需配合其他插件)
Calico 支持网络策略、BGP 路由 配置复杂
Cilium 基于 eBPF、高级安全特性 资源消耗较高
相关推荐
CodeMartain4 小时前
Dify Windows 原生部署(无 Docker、纯本地)
运维·docker·容器
牛奶咖啡135 小时前
k8s容器编排技术实践——使用containerd作为容器运行时部署k8s集群
kubernetes·k8s的安装部署·开启系统的ipvs支持·安装containerd·containerd配置加速器·安装k8s的工具·安装calico网络插件
万里侯6 小时前
云原生数据备份与恢复:保障数据安全的最佳实践
微服务·容器·k8s
llrraa20106 小时前
配置docker国内镜像源
运维·docker·容器
阿里云云原生6 小时前
阿里云 STAROps 全域智能运维平台发布!从“被动救火”到“主动自治”
云原生
2301_780789667 小时前
手游遇到攻击为什么要用SDK游戏盾手游遇到攻击为什么要用 SDK 游戏盾?
安全·web安全·游戏·架构·kubernetes·ddos
35岁程序员的自救之路7 小时前
AiBBS - 面向下一个十年的AI + 云原生社区系统
人工智能·云原生
珂玥c8 小时前
k8s集群ingress碎碎念
云原生·容器·kubernetes
佳杰云星8 小时前
如何给大模型集群选“大脑”?智算调度与管理平台 10 维选型指南(附选型评分表)
人工智能·kubernetes·大模型·云计算·gpu·算力调度·智算中心
比特森林探险记10 小时前
context 在 gRPC / Gin / K8s 中的实战
容器·kubernetes·gin