尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

kubeasz K8s 网络插件选型:5 种 CNI 方案对比,如何避开隧道封装的性能坑?

kubeasz K8s 网络插件选型:5 种 CNI 方案对比,如何避开隧道封装的性能坑? kubeasz K8s 网络插件选型5 种 CNI 方案对比如何避开隧道封装的性能坑【免费下载链接】kubeasz使用Ansible脚本安装K8S集群介绍组件交互原理方便直接不受国内网络环境影响项目地址: https://gitcode.com/GitHub_Trending/ku/kubeasz8 台节点的集群同节点 Pod 互通飞快跨节点流量却慢了一截。抓包一看所有跨节点报文都被隧道封装了一遍头部开销、CPU 开销全算进去了。这是 K8s 集群网络最常见的体感问题。kubeasz 把 5 种 CNI 插件做成了开箱即用的 Ansible role——calico、cilium、flannel、kube-ovn、kube-router在集群 hosts 文件里写一个变量就能决定装哪个。这篇文章不讲空泛的网络很重要而是从症状出发你遇到哪种问题就该选哪种方案部署和调优分别要动哪几处配置。先对症状集群网络最常见的三个卡点卡点一隧道封装吃掉性能。大多数 overlay 方案IPIP、VXLAN都会给原始报文再套一层头。同子网节点之间其实根本不需要封装强行全量走隧道纯属浪费。卡点二节点一多BGP 全互联撑不住。走 BGP 直连路由的插件如 calico、kube-router默认节点间两两建 Peer。节点到 50 台连接数就是 n×(n-1)/2内存和会话状态都在涨。卡点三网络功能太素。没有按业务划分网段、没有静态 IP、没有 QoS、Pod 想直接暴露 IP 都难。记住这三个卡点后面每个插件对号入座。唯一的总开关hosts 文件里的 CLUSTER_NETWORKkubeasz 的网络部署剧本playbooks/06.network.yml逻辑非常直白根据 hosts 文件里的CLUSTER_NETWORK变量命中哪个值就执行哪个 role- { role: calico, when: CLUSTER_NETWORK calico } - { role: cilium, when: CLUSTER_NETWORK cilium } - { role: flannel, when: CLUSTER_NETWORK flannel } - { role: kube-router, when: CLUSTER_NETWORK kube-router } - { role: kube-ovn, when: CLUSTER_NETWORK kube-ovn }选中插件后各插件的细调参数集中在clusters/集群名/config.yml里示例可参考 example/config.ymlrole 源码分别在roles/calico/、roles/cilium/、roles/flannel/、roles/kube-ovn/、roles/kube-router/对照看模板能摸清每一步在做什么。按场景挑插件五种答案分别解哪种题测试环境求快flannelflannel 是 K8s 最早一批 CNI简单高效以 DaemonSet 形式跑在每个节点上。它的FLANNEL_BACKEND可以选vxlan或host-gw所有节点在同一二层网络时host-gw模式不用隧道封装直接走三层转发跨节点性能接近原生网络。节点 Pod 网段掩码由NODE_CIDR_LEN默认 24控制。生产环境默认项calicocalico 是 kubeasz 的默认网络插件也是 k8s 社区符合性测试的默认选择基于 BGP 路由实现 Pod 互通支持 NetworkPolicy。两个关键开关CALICO_ENABLE_OVERLAYAlways/CrossSubnet/Never。同子网私有化环境配Never即纯 BGP 直连路由避开封装开销跨子网用CrossSubnet隧道BGP 混合公有云省事选Always。CALICO_RR_ENABLED开启内建 BGP 路由反射器RR。节点超过 50 台时建议打开把全互联变成星型结构连接数从平方级降为线性级。延迟敏感、还想看见流量ciliumcilium 基于内核 eBPF 实现服务间策略与流量处理绕开了传统 iptables 规则膨胀的老问题支持 L3/L4/L7HTTP、gRPC、Kafka 等策略。kubeasz 从 3.3.1 起改用 Helm chart 方式安装配置文件在roles/cilium/templates/values.yaml.j2。两个实用开关cilium_connectivity_check装完自动跑连通性自检和cilium_hubble_enabledHubble 可视化排查流量与策略命中。注意它要求内核版本 ≥ 4.9.17装之前先确认。要子网隔离、静态 IP、QoSkube-ovnkube-ovn 把 OpenStack 生态里成熟的 OVS/OVN 虚拟化技术带进 K8s功能明显更企业级Namespace 与子网绑定、子网间访问控制、静态 IP、动态 QoS、分布式/集中式网关、内嵌 LoadBalancer、Pod IP 直接对外暴露、流量镜像、IPv6。它和传统插件最大的不同是 Pod 子网跟随所在 Namespace 划分而不是按节点切分。组件越少越好kube-routerkube-router 一个组件同时干三件事基于 GoBGP 的 Pod 路由、基于 ipset 优化 iptables 的 NetworkPolicy、基于 IPVS 的 Service 代理。配置项很少OVERLAY_TYPE选fulloverlay公有云常用或subnet自有环境直连FIREWALL_ENABLE控制 NetworkPolicy 开关。适合不想为网络多养几套组件的团队。从选型到落地三步装完以 calico 为例整个流程是改变量 → 备镜像 → 跑剧本# 1. 集群 hosts 文件中设置 CLUSTER_NETWORKcalico # 2. 离线环境用 ezdown 预下载插件镜像flannel/cilium 同理 ./ezdown -X flannel # 3. 单独装网络层或走一键安装 ansible-playbook -i clusters/集群名/hosts playbooks/06.network.yml也可以直接ansible-playbook 90.setup.yml或ezctl setup 集群名 all从头一键装完整个集群。网络插件必须等 kube_master 与 kube_node 部署成功后再装flannel/calico 等需要覆盖全部 master 与 node 节点。装完别急着划走三步自检# 1. 插件组件是否全部 Running kubectl get pod -n kube-system | grep -E calico|cilium|flannel|kube-ovn|kube-router # 2. calico 场景看 BGP 邻居是否 Established calicoctl node status # 3. 起几个测试 Pod在各节点互相 ping Pod IP再看一眼节点上的ip routeflannel 的host-gw模式应出现指向其他节点 Pod 网段的直连路由而不是全部走flannel.1隧道口calico 直连模式下同理不该出现tunl0隧道网卡的转发路径。跨节点 ping 通、路由符合预期网络层才算真正跑通。持续调优值得回头改的三处配置同子网私有环境把 calico 隧道关掉CALICO_ENABLE_OVERLAY: Never让报文走 BGP 原生路由省掉封装开销CALICO_NETWORKING_BACKEND默认bird个别不支持 IPinIP 的云环境改vxlan。节点数逼近 50 就开 RRCALICO_RR_ENABLED: true需要固定 RR 节点时用CALICO_RR_NODES指定。内核参数交给 prepare rolekubeasz 的roles/prepare/会自动下发 sysctl、内核模块、网络相关 ulimit 等基线配置通常无需手改/etc/sysctl.conf。选对插件解决 80% 的问题剩下 20% 靠这几处开关兑现。延伸阅读Calico 网络插件安装与验证calico 配置 BGP Route ReflectorsCilium 网络插件安装Kube-OVN 网络插件安装网络插件连通性验证各插件 role 源码可对照阅读roles/calico/、roles/cilium/、roles/flannel/、roles/kube-ovn/、roles/kube-router/。【免费下载链接】kubeasz使用Ansible脚本安装K8S集群介绍组件交互原理方便直接不受国内网络环境影响项目地址: https://gitcode.com/GitHub_Trending/ku/kubeasz创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表