flannel的网络插件配置

Kubernetes网络通信需要解决以下问题:
            (1)容器间通信:同一个Pod内的多个容器间的通信,lo
            (2)Pod通信:Pod IP  <-直达->  Pod IP
            (3)Pod与Service通信:Pod IP  <-->  Cluster IP
            (4)Service与集群外部客户端的通信;(ingress、nodeport、loadbalancer)
   kubernetes集群内的网络需要借助网络插件来解决;            
   
   CNI:(Container Network Interface)常用的网络插件有:
        flannel (部署简单,支持网络地址分配,但不支持网络策略)
        calico   (部署麻烦,支持网络地址分配,也支持网络策略,而且支持基于BGP协议实现三层网络路由)
        canel   (flannel与calico的组合)
        kube-router (由kubernetes研发的网络插件)
        ...
        我们可以使用flannel的网络分发,需要时也可以借助calico的网络策略。flannel+calico
        
        解决方案:
                虚拟网桥:网络叠加方式实现通信;
                多路复用: MacVLAN(基于MAC方式创建vlan,为每个虚拟接口分配一个独有的mac地址,使得一个物理网卡等承载多个容器。这样一来,容器就直接使用物理网卡,并基于物理网卡中的mac实现跨节点通信)
                硬件交换:SR-IOV(一个网卡,支持能直接在物理机上虚拟出多个接口)

把网络配置文件放在/etc/cni/net.d/目录下,就可以被kubelet识别加载为网络插件使用;
   
   flannel支持多种后端:
        VxLAN:虚拟扩展局域网
         
         (1)VxLAN  报文封装
                flannel默认使用VxLAN方式来作为后端网络传输方式的;
                VxLAN:使用网络叠加方式,通过隧道(主机网卡中的flannel.x,默认为10.244.0.0 255.255.255.255)专门封装隧道协议报文的,而且一旦后端存在被分配到网络地址的pod时,会创建一个cni接口,而且cni的网络地址与flannel在同一网段。可以理解为类似于四层隧道的协议。
                VxLAN因为要进行封装多层报文,是额外开销,所以使得性能相对于其他方式较弱一点,但好在可以单独管理一个网络,而且物理网络之间是彼此不相干扰的。
         
         (2)Directrouting   直接路由     
                 若集群过于庞大,则避免不了跨网段通信,或者既想使用VxLAN可以跨网段的特性,又想host-gw的高性能,我们可以设置为Directrouting,使其同网段的用host-gw,不同网段的自动使用VxLAN网络叠加。
        Host-gw:host Gateway主机网关
                把主机自己的网络接口当作网关使用,使Pod的网络地址能通过此接口对外进行传递信息。
                报文通过路由到达对方,而不会通过隧道网络叠加,所以这种比VxLAN性能高一点。
                但是这种方式要求个节点必须工作在同一网络中。
        UDP:性能比以上都弱一点。       
   
       我们也可以将flannel配置为VxLAN + Directrouting方式,若请求端和回应端在同网段,则使用直接路由模式,若不同网段,则自动降级为VxLAN模式。
       
   flannel的配置参数:
        Network:flannel使用CIDR格式的网络地址,用于为Pod配置网络功能;
                10.244.0.0/16 ->
                        master:10.244.0.0/24
                        node01:10.244.1.0/24
                        ...
                        node255:10.244.255.0/24
                        
                 10.0.0.0/8
                        10.0.0.0/24
                        ...
                        10.255.255.0/24
          SubnetLen:把network切分子网络供各节点使用,使用多长的掩码进行切分,默认为24位;
          SubnetMin:10.244.10.0/24  表示最小限制,10之前的地址不可以被分配使用;
          SubnetMax:10.244.100.0/24 表示最大限制,100之后的地址不可以被分配使用;
          Backend:VxLan,host-gw,udp
                Vxlan:Vxlan,Directrouting
                
    例:修改flannel的工作模式为VxLAN+Directrouting
        注意:若要使修改生效,必须重装flannel插件,此修改最好在搭建K8S集群时做修改,不要在集群使用中做修改,否则会影响到所有使用flannel的后端客户端无法通信。
        1.找到flannel的configmap,查看当前flannel的工作模式

1   kubectl get cm kube-flannel-cfg -n kube-system -o yaml
2            找到如下段:
3            net-conf.json: |
4                 {
5                     "Network": "10.244.0.0/16",
6                     "Backend": {
7                         "Type": "vxlan"
8                 }

       通过在node节点查看路由:

1 [root@k8s-node1 ~]# ip route show
2                 default via 192.168.1.1 dev ens33 proto static metric 100
3                 10.244.0.0/24 via 10.244.0.0 dev flannel.1 onlink
4                 10.244.1.0/24 via 10.244.1.0 dev flannel.1 onlink
5                 10.244.2.0/24 dev cni0 proto kernel scope link src 10.244.2.1
6                 172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1
7                 192.168.1.0/24 dev ens33 proto kernel scope link src 192.168.1.103 metric 100

可以看到,10.244.0.0<-->10.244.1.0是通过flannel.1网卡通信,不管是同网段还是不同网段,显然是通过隧道封装过的。
        2.卸载flannel插件,修改配置清单的net-conf.json段,加入Directrouting

1  net-conf.json: |
2                 {
3                     "Network": "10.244.0.0/16",
4                     "Backend": {
5                         "Type": "vxlan",
6                         "Directrouting": true  #默认没有这段,若要修改,必须重装flannel插件!!!
7                 }

3.部署修改过的flannel插件:
                kubectl apply -f kube-flannel.yaml
        4.查看节点路由表:

1                 ip route show
2                 default via 192.168.1.1 dev ens33 proto static metric 100
3                 10.244.0.0/24 via 192.168.1.100 dev ens33
4                 10.244.1.0/24 via 192.168.1.102 dev ens33
5                 10.244.2.0/24 dev cni0 proto kernel scope link src 10.244.2.1
6                 172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1
7                 192.168.1.0/24 dev ens33 proto kernel scope link src 192.168.1.103 metric 100

可以看出,10.244.0.0<-->10.244.1.0是通过宿主机网卡ens33通信的,明显看出是直接路由,同网段的用cni0接口直接转发,不同网段用ens33接口直接路由。
        5.也可以用tcpdump进行抓包进行查看:
                tcpdump -i 宿主机网口名称 -nn
        
        若要改为host-gw模式的话,只需将net-conf.json段的type改为host-gw即可,不过也要重装flannel插件,建议部署集群时应慎重考虑要使用哪种模式。

注:host-gw不支持与Directrouting同时工作。

转载于:https://www.cnblogs.com/Smbands/p/10926996.html

k8s的flannel网络插件配置相关推荐

  1. K8s NetworkPolicy与网络插件flannel、calico详细版

    Pod是Kubernetes调度的最小单元.一个Pod可以包含一个或多个容器,因此它可以被看作是内部容器的逻辑宿主机.Pod的设计理念是为了支持多个容器在一个Pod中共享网络和文件系统.那么为什么Po ...

  2. kubernetes使用flannel网络插件服务状态显示CrashLoopBackOff

    使用Kubeadm安装K8s集群,在安装flannel网络插件后,发现pod: kube-flannel-ds 一直是CrashLoopBackOff 报错内容如下: log is DEPRECATE ...

  3. Kubernetes 笔记(06)— 搭建多节点集群、kubeadm 安装 master/worker/console/flannel 网络插件

    1. kubeadm 官网:https://kubernetes.io/zh-cn/docs/reference/setup-tools/kubeadm/ 为了简化 Kubernetes 的部署工作, ...

  4. k8s使用kube-router网络插件并监控流量状态

    简介 kube-router是一个新的k8s的网络插件,使用lvs做服务的代理及负 载均衡,使用iptables来做网络的隔离策略.部署简单,只需要在每个节点部署一个daemonset即可,高性能,易 ...

  5. cni k8s 插件安装_K8S 之 Flannel网络插件安装

    1.CNI网络插件最主要的功能就是实现POD资源能够跨宿主机是进行能信 #test-nodes1主机无法ping通test-nodes2主机的pod容器 [root@test-nodes1 ~]# k ...

  6. k8s中将flannel网络切换calico网络

    注意事项: 1.kubelet 配置必须增加 --network-plugin=cni 选项 2.kubec-proxy 组件不能采用 --masquerade-all 启动,因为会与 Calico ...

  7. k8s使用kube-router网络插件并监控流量状态 1

    简介 kube-router是一个新的k8s的网络插件,使用lvs做服务的代理及负载均衡,使用iptables来做网络的隔离策略.部署简单,只需要在每个节点部署一个daemonset即可,高性能,易维 ...

  8. 企业运维实战--k8s学习笔记 k8s网络通信、Flannel vxlan模式简介、calico网络插件替换、网络策略范例总结

    1.k8s网络通信 k8s通过CNI接口接入其他插件来实现网络通讯.目前比较流行的插件有flannel,calico等. CNI插件存放位置:# cat /etc/cni/net.d/10-flann ...

  9. K8s网络插件Flannel,Calico

    文章目录 一.K8s网络插件flannel与calico 1. k8s网络解决方案 容器虚拟化网络方案 基于隧道 基于路由 2. CNI(容器网络接口) flannel与calico 选型比较 3. ...

  10. k8s——flannel网络

    文章目录 一.Flannel简介 二.Flannel网络概述 三.部署 一.Flannel简介 1.当一个k8s集群创建好后一般会存在三种IP,分别是:Pod IP.Node IP.Cluster I ...

最新文章

  1. .net core快速上手
  2. linux kernel使用技巧
  3. 计算机系统结构总概,计算机系统结构概论
  4. AICompiler编译器介绍及访存密集算子优化
  5. foreach、qAsConst用法总结
  6. 产品经理学习---高级产品经理
  7. 网络:Server returned HTTP response code: 400(url中文)
  8. MyBatis-${}与#{}
  9. hive内部表和外部表的区别_走近大数据之Hive进阶(四、Hive的表连接)
  10. 删除web项目服务器,删除 Tomcat-webapps 目录自带项目【测试可行】
  11. 带通 带阻滤波器 幅频响应_方程推导:二阶有源带通滤波器设计!(内附教程+原理图+视频+代码下载)...
  12. 网站优化关键词密度多少才是最合适的?
  13. 一键清除系统垃圾文件的bat批处理命令
  14. 结束任务管理器电脑黑屏怎么办
  15. 华为重度渗透的欧洲,美国如何清剿?
  16. Xilinx Bit文件格式详解
  17. 为DB2 新增加的用户不能直接使用db2命令的解决办法
  18. 伪造微信截图工具(改)
  19. 利用百度云盘同步Zotero
  20. C++运算符重载——郭炜

热门文章

  1. 最大流学习笔记(4)-推送重贴标签算法二
  2. SQL SERVER 2008的转置函数PIVOT
  3. java 算法基础之一寻找最大公约数
  4. 23中设计模式之简单工厂模式
  5. 数据结构之链表(Linked list)
  6. netty权威指南学习笔记一——NIO入门(4)AIO
  7. ARDUINO使用GPRS发送GPS数据到OneNet测试
  8. 实验二 (2)优先数调度
  9. jar包的生成及运行
  10. C# 遍历DLL导出函数