一、kubernetes的网络模式

   (1)Kubernetes网络需要解决的问题

  集群内:

    容器与容器之间的通信

    Pod和Pod之间的通信

    Pod和服务之间的通信

  集群外:

    外部应用与服务之间的通信

  (2)同一pod之间的通信

因为pod内部的容器是共享网络空间的,所以同一pod内的容器直接可以使用localhost访问其他容器。
k8s在启动容器的时候会先启动一个Pause容器,为Pod指派一个唯一的IP地址,
每个Pod里运行着一个Pause容器,其他容器则为业务容器,这些业务容器共享Pause容器的网络栈和Volume挂载卷,因此他们之间通信和数据交换更为高效,在设计时我们可以充分利用这一特性将一组密切相关的服务进程放入同一个Pod中。

(3)不同Pod中容器之间的通信

对于此场景,情况相对比较复杂一些,这就需要解决Pod间的通信问题。在Kubernetes通过flannel、calic等网络插件解决Pod间的通信问题。本文以flannel为例说明在Kubernetes中网络模型,flannel是kubernetes默认提供网络插件。

Flannel是由CoreOs团队开发社交的网络工具,CoreOS团队采用L3 Overlay模式设计flannel, 规定宿主机下各个Pod属于同一个子网,不同宿主机下的Pod属于不同的子网。

flannel会在每一个宿主机上运行名为flanneld代理,其负责为宿主机预先分配一个子网,并为Pod分配IP地址。Flannel使用Kubernetes或etcd来存储网络配置、分配的子网和主机公共IP等信息。数据包则通过VXLAN、UDP或host-gw这些类型的后端机制进行转发。

二、flannel

   (1)Backend

  Flannel支持几种不同的方式,把它们叫做Backend;  

  a、vxlan

  最推荐使用的是vxlan,使用linux kernel的vxlan实现。vxlan backend的配置项有以下几个:

    • Type: string,backend类型,就是"vxlan"
    • VNI: number,vxlan协议中的vni编号,不同的vni号码代表不同网段,类似vlan号,默认是1
    • Port: number, 宿主机的udp端口,用来发送封装后的报文,使用linux内核默认配置,8472
    • GBP: boolean,是否使用vxlan Group Policy,默认false
    • DirectRouting: boolean,是否启用直接路由,当两台宿主机位于同一个网段时,不封装通过路由直接送达,默认false

  b、host-gw

  host-gw的方式,通过直接路由的方式传送虚拟网络报文。这种方式要求所有宿主机是二层直达的(中间不经过路由),原理和vxlan中的DirectRouting相同。

  Vxlan DriectRouting是能够直接路由的时候采用直接路由的方式,否则就通过vxlan,DriectRouting可以跨网段。

  Host-gw要求所有宿主机都支持直接路由方式(在同一个二层网络中),并全部采用直接路由的方式,host-gw不能跨网段。

  host-gw的配置项只有一个:

    • Type: string,backend类型,就是"host-gw"

  c、UDP

  udp只建议调试时使用,或者另外两种方式不能使用的时候(譬如宿主机内核不支持vxlan)使用。

  配置项:

    • Type:string,backend类型,就是"udp"
    • Port: number,宿主机udp端口,默认8285

  (2)查看flannel的配置

  a、集群中每个节点上都有flannel

  [root@master ~]# kubectl get pods -n kube-system -o wide |grep flannel

  

  b、查看flannel的configmap配置

  [root@master ~]# kubectl get configmap -n kube-system |grep flannel

  

  [root@master ~]# kubectl  get configmap kube-flannel-cfg -o json -n kube-system  #查看json配置文件

  

  (3)flannel的配置参数

  a、

  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

  b、

  SubnetLen:把Network切分子网供各节点使用时,使用多长的掩码进行切分,默认为24位;

  SubnetMin:用于分配给节点使用的子网起始子网地址;如:10.244.10.0/24

    SubnetMax:用于分配给节点使用的子网结束子网地址;如:10.244.100.0/24

  Backend:各pod间通信的方式;vxlan,host-gw,udp

  (4)把flannel的网络配置改成DirectRouting的通信方式

  其实关于flannel的配置,部署集群的时候,就应该配置好;

  a、直接获取部署k8s集群时,用的flannel的yaml文件,然后修改,再应用一下;

  GitHub地址:https://github.com/coreos/flannel#flannel

  找到此段落,注意!不能用这个URL直接获取yaml文件,要先选中,然后右键打开,再复制浏览器地址栏里的URL;

  

  地址栏中的地址,如图所示:

  

  [root@master manifests]# pwd
  /root/manifests
  [root@master manifests]# mkdir flannel
  [root@master manifests]# cd flannel/

  [root@master flannel]# wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

  [root@master flannel]# vim kube-flannel.yml  #编辑此文件,修改为如图:

  

  此时我们用的是vxlan的Directrouting方式,其他方式同理,修改此yaml文件即可;

  b、删除flannel,再重新apply,生产环境不能这样做,会导致整个集群不能工作;

  [root@master flannel]# kubectl delete -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

  

  稍等片刻,查看发现已经没有flannel了:

  

  c、此时,用刚才修改过的本地yaml文件,重新apply

  [root@master flannel]# kubectl apply -f kube-flannel.yml

    

  查看:

  

  d、此时创建几个pod,再抓包,

  创建pod:

  [root@master manifests]# kubectl apply -f deploy-demo.yaml

  

  连入node02节点上的pod,ping node01节点上的pod:

  

  此时去node01上抓物理网卡的包,发现pod之间直接用的物理网卡通信:

  

k8s-网络插件flannel-十八的更多相关文章

  1. 3.kubernetes的CNI网络插件-Flannel

    目录 1.1.K8S的CNI网络插件-Flannel 1.1.1.集群规划 1.1.2.下载软件.解压.软链接 1.1.3.最终目录结构 1.1.4.拷贝证书 1.1.5.创建配置 1.1.6.创建启 ...

  2. k8s网络之Flannel网络

    k8s网络主题系列: 一.k8s网络之设计与实现 二.k8s网络之Flannel网络 三.k8s网络之Calico网络 简介 Flannel是CoreOS团队针对Kubernetes设计的一个网络规划 ...

  3. kubernetes进阶(二)核心网络插件Flannel

    网络插件Flannel介绍:https://www.kubernetes.org.cn/3682.html 首先,flannel利用Kubernetes API或者etcd用于存储整个集群的网络配置, ...

  4. kubernetes 配置网络插件 flannel

    概述 在学习docker时知道docker有四种常用的网络模型 bridge:桥接式网络 joined:联盟式网络,共享使用另外一个容器的网络名称空间 opened:容器直接共享使用宿主机的网络名称空 ...

  5. Kubernetes 学习18配置网络插件flannel

    一.概述 1.我们在学习docker时知道docker有四种常用的网络模型 a.bridge:桥接式网络 b.joined:联盟式网络,共享使用另外一个容器的网络名称空间 b.opened:容器直接共 ...

  6. k8s入坑之路(9)k8s网络插件详解

    Flannel: 最成熟.最简单的选择 Calico: 性能好.灵活性最强,目前的企业级主流 Canal: 将Flannel提供的网络层与Calico的网络策略功能集成在一起. Weave: 独有的功 ...

  7. 第十章 Kubernetes的CNI网络插件--flannel

    1.简介 1.1前言 Kubernetes设计了网络模型,但却将它的实现讲给了网络插件,CNI网络插件最重要的功能就是实现Pod资源能够跨主机通信 常见的CNI网络插件如下: Flannel: Cac ...

  8. k8s之网络插件flannel及基于Calico的网络策略

    1.k8s网络通信 a.容器间通信:同一个pod内的多个容器间的通信,通过lo即可实现; b.pod之间的通信:pod ip <---> pod ip,pod和pod之间不经过任何转换即可 ...

  9. k8s系列---网络插件flannel

    跨节点通讯,需要通过NAT,即需要做源地址转换. k8s网络通信: 1) 容器间通信:同一个pod内的多个容器间的通信,通过lo即可实现: 2) pod之间的通信,pod ip <---> ...

  10. Kubernetes(k8s)网络插件(CNI)的基准测试对比

      Kubernetes是一个伟大的容器"乐队".但它不管理Pod-to-Pod通信的网络.这是容器网络接口(CNI)插件的使命,它是实现容器集群工具(Kubernetes,Mes ...

随机推荐

  1. ASP.NET Core 如何记录每次请求的Request信息 - sky 胡萝卜星星 - CSDN博客

    原文:ASP.NET Core 如何记录每次请求的Request信息 - sky 胡萝卜星星 - CSDN博客 版权声明:本文为starfd原创文章,转载请标明出处. https://blog.csd ...

  2. iOS --- 总结Objective-C中经常使用的宏定义(持续更新中)

    将iOS开发中经常使用的宏定义整理例如以下,仅包括Objective-C. 而对于Swift,不能使用宏,则能够定义全局函数或者extension.请參考博客iOS - 总结Swift中经常使用的全局 ...

  3. 百科知识 手机QQ的视频如何保存

    手机QQ上打开一个视频,然后进入播放界面,然后暂停播放   点击右上角的按钮,就可以保存到手机        

  4. 搭建企业内部DNS服务器,docker 部署内部 dnsmasq

    获取镜像 docker pull jpillora/dnsmasq 配置域名 # http://oss.segetech.com/intra/srv/dnsmasq.conf #log all dns ...

  5. 【算法编程】找出仅仅出现一次的数-singleNumber

    题目意思: 一个数值数组中,大部分的数值出现两次,仅仅有一个数值仅仅出现过一次,求编程求出该数字. 要求,时间复杂度为线性,空间复杂度为O(1). 解题思路: 1.先排序.后查找. 因为排序的最快时间 ...

  6. 记录:50多行程序中找出多写的一个字母e

    小霍同学调程序,做的是第11周的项目1 - 存储班长信息的学生类,可是她写的程序(就在以下),呃,请读者自己执行一下吧.(下午在机房调试时用的是Code::Blocks10.05.输出的是非常长的莫名 ...

  7. Django-权限信息初始化

    数据库 from django.db import models class Menu(models.Model): """ 菜单组: """ ...

  8. this、call和apply、bind

    this关键字: JavaScript的this关键字,总是指向一个对象,具体指向哪个对象,是根据运行时函数指向环境动态绑定的.简单来说,this就是谁调用指向谁.具体使用中,this的指向,大致可以 ...

  9. bootstrap-Table服务端分页,获取到的数据怎么再页面的表格里显示

    <table class="table table-hover" id="userTable" > <thead> <tr> ...

  10. inherited在消息中的作用(编译器根据inherited所在的函数,直接转换成对祖先类同名动态函数的调用,或者转换成对DefaultHandler的调用)

    好奇一下.看来Object Pascal确实与Windows深入结合了. unit Unit1; interface uses Windows, Messages, SysUtils, Variant ...