• 云原生之Kubernetes:20、Flannel网络插件详解


    前言

    网络是Kubernetes的核心部分,这章会对Flannel网络插件进行详细讲解!

    1、Kubernetes网络中的挑战

    网络是Kubernetes的核心部分,但是要确切地了解其工作方式可能会面临各种挑战,比如:

    1、高度耦合的容器间通信:这通过pod和locahost间通信得以解决
    2、pod间的通信:这是本章节需要着重讲解的
    3、pod到service的通信:这是由service解决的
    4、外部流量与service的通信,我们又称之为南北流量的问题:这也是由service解决的

    2、Kubernetes的网络模型

    通过前几章节的学习,你是否已经发现:
    每个Pod都有自己的IP地址,且你无需在Pod之间显式创建链接,也几乎不需要处理将容器端口映射到主机端口的问题。

    这样做的好处就在于,可以创建一个干净的、向后兼容的模型,从端口分配,命名,服务发现,负载平衡,应用程序配置和迁移的角度来看,可以将Pod像VM或物理主机一样对待。

    所以,Kubernetes的网络的基本要求有以下两个特征:

    1、节点上的Pod可以与所有节点上的所有Pod通信,而无需NAT地址转换
    2、节点上的代理程序(例如系统守护程序,kubelet)可以与该节点上的所有Pod通信

    3、如何实现Kubernetes网络模型

    有很多网络插件可以实现我们所描述的Kubernetes网络模型的需求。
    下面给大家例出了几个较常用的网络插件,大家可以按需研读:

    插件名备注文档
    Flannel一个非常简单的覆盖网络,可以满足Kubernetes的要求Flannel
    Kube-routerKubernetes专用网络解决方案,旨在提供高性能和操作简便性Kube-router
    CalicoCalico提供了高度可扩展的网络和网络策略解决方案Calico
    Weave可作为CNI插件运行或独立运行,较灵活Weave

    4、常用网络插件对比

    1、Flannel(简单、使用居多):基于Vxlan技术(叠加网络+二层隧道),不支持网络策略
    2、Calico(较复杂,使用率少于Flannel):也可以支持隧道网络,但是是三层隧道(IPIP),支持网络策略

    注意:虽然两者的性能一直各执一词,但主要区别还是在于网络策略的支持上

    5、Flannel架构图

    在这里插入图片描述

    你可以根据之前的配置清单,对比来看这张图,同时也可以通过自己已有环境的规律来学习:

    • pod网络地址的分配情况;
    • node机器的ip分配情况等

    6、Flannel原理

    原理总结:

    1、flannel的网络地址是10.244.0.0/16,默认每个子网的掩码长度为24,如上图所示
    2、K8s节点之间(Node)通过Vxlan技术进行通信。根据node情况,会把flannel的16位网络地址拆分成多个24位网络地址,供各Node进行分配
    3、每个Node节点按序占用一个C类地址,对应节点上面的Podip是在该C类地址中按规则分配的。

    7、Flannel配置说明

    SubnetLen:

    定义每个子网的掩码长度,默认为24。
    那么10.244.0.0/16就会被分成2^(24-16)-2=254个子网,就说明此时K8s集群
    最大支持254个节点(Node),其中每个Node节点都能使用一个子网,每个子网可以分配多少个主机位就代表每个Node节点上可以运行的Pod最大数量:[2^(32-24)-2=254个]

    SubnetMin:

    定义Pod网络的起始,默认是从10.244.0.0/24开始,也可以定义从10.244.10.0/24开始,也不一定要使用10开始的网络

    SubnetMax:

    与上面相反,定义Pod网络的结束

    大家也可以在Flannel官方配置说明中找到具体配置说明。

    8、Flannel配置样例

    此时你应该很容易能看懂,我就不再赘述了。

    {
        "Network": "10.0.0.0/8",
        "SubnetLen": 20,
        "SubnetMin": "10.10.0.0",
        "SubnetMax": "10.99.0.0",
        "Backend": {
            "Type": "udp",
            "Port": 7890
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
  • 相关阅读:
    安装Android Studio并创建一个Android Demo
    程序员基础能力系列
    maven 包管理平台-08-nexus 自己搭建 maven 仓库
    探索自动化测试工具的威力
    想开发DAYU200,我教你
    bcftools学习笔记丨软件简介、安装方式、使用方法、核心功能、参数解释等一文速览
    第13章 并发编程高阶(一)
    7天学完Spring:Spring框架搭建和解析以及Bean对象的创建
    【Unity】因为获取安卓ID等隐私数据无法通过审核解决思路
    【C++数据结构】线性表的顺序存储结构
  • 原文地址:https://blog.csdn.net/flq18210105507/article/details/126749623