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、高级安全特性 资源消耗较高
相关推荐
释怀不想释怀7 分钟前
3.3 DockerCompose(快速部署)
云原生·eureka
释怀不想释怀24 分钟前
Docker(项目部署)
运维·docker·容器
ICT董老师1 小时前
通过kubernetes部署nginx + php网站环境
运维·nginx·云原生·容器·kubernetes·php
原神启动11 小时前
K8S(八)—— Kubernetes Pod 资源限制 + 探针(Probe)解析
云原生·容器·kubernetes
zxnbmk1 小时前
【7】Kubernetes存储(本章知识密度较高,仅浅浅了解后续详解)
linux·云原生·容器·kubernetes
叫致寒吧1 小时前
pod详解
云原生·kubernetes
水上冰石2 小时前
查看k8s下Jenkins的插件在宿主机的路径
容器·kubernetes·jenkins
孤岛悬城2 小时前
58 k8s之pod
云原生·容器·kubernetes
可爱又迷人的反派角色“yang”2 小时前
k8s(五)
linux·运维·docker·云原生·容器·kubernetes
oMcLin2 小时前
如何在Ubuntu 22.10上通过配置K3s轻量级Kubernetes集群,提升边缘计算环境的资源管理能力?
ubuntu·kubernetes·边缘计算