zoukankan      html  css  js  c++  java
  • k8s——3.网络通讯方式

    kubenetes的网络模型假定了所有Pod都在一个可以直接连通的扁平的网络空间中,这在GCE(谷歌云服务器里)中里面是现成的网络模型,kubenetes假定这个网络已经存在,

    而在私有云里搭建kubenetes集群,就不能假定这个网络已经存在了,我们需要自己实现这个网络假设,将不同节点上的Docker容器之间的互相访问先打通,然后运行kubenetes

    先了解一下:

    ①同一个pod之间的多个容器怎么互相访问:通过共用的pause这个容器的网络站的IO,通过localhost方式可以访问

    ②各pod之间的通讯:通过Overlay Network

    ③Pod与service之间的通讯:通过各节点的Itables规则

    Flannel是什么?

    Flannel是CoreOS团队针对kubenetes设计的一个网络规划服务,简单来说,它的功能是让集群中的不同节点主机创建的Docker容器都具有全集群唯一的虚拟IP地址。

    而且它还能在这些IP之间建立一个覆盖网络( 就是Overlay Netwok),通过这个覆盖网络,将数据包原封不动的传递到目标容器内。

    下图解析:

    图上表示有两台物理机11和12 ,分别运行了2个Pod 。11主机对应的是Web app1和Web app2 两个Pod,2主机读音的是Web app3和Backend两个Pod,Backend是前端的

    所以该结构就是   流量访问到Backend上,经过它自己的网关去处理把对应请求分配到对应的服务上(对应3个Web app),那么Web app1想要跟Backend通讯时,就要跨主机了,

    Web app3想要跟Backend通讯就是同主机不同Pod之间的通讯了

    首先,在真实的Node服务器上,我们会去安装一个Flanneld的守护进程,这个守护进程会去监听一个端口(这个端口就是用于后期转发数据包的一个服务端口),Flanneld一旦启动后,会开启一个网桥Flannel0,这个Flannel0专门收集Docker0转发出来的数据包,你可以理解Flannel0是一个勾子,然后Docker0会分配自己的IP到对应的Pod上。

    如果是同一台主机的不同Pod之间访问,那么走的是Docker0的网桥,因为这两个Pod都是同一个网桥下的不同子IP而已。

    难点就是跨主机,还直接通过IP去访问不同主机的Pod

    我们先了解一下etcd的作用:etcd是存储管理Flannel可分配的IP地址段资源,监控etcd中每个Pod的实际地址,并在内存中建立维护Pod节点路由表

    注意:其实Flannel启动后,会往etcd中插入可以被分配的网段,并且记录已经分配的网络,防止再次被分配给其他网段,造成所谓的IP冲突

    图示总结:

    在K8S里,总共有三层网络

    1.Service网络,是个虚拟网络

    2.Pod网络,是个虚拟网络

    3.节点网络,真实的物理网络

  • 相关阅读:
    C# 遍历TreeView所有节点
    Oracle创建删除用户、角色、表空间、导入导出、...命令总结
    order by,group by和having的使用
    C/C++ 数据结构与算法笔记
    使用PS随意更换相片底色
    微软SQL Server2012增加对Hadoop的支持
    MOSS2010事件接收器开发以及自定义错误提示页
    将 SharePoint 开发与其他形式的开发进行比较
    ItemAdding事件接收器中无法取到【创建者】的字段的值
    ItemAdding实现数据验证中文字段,properties.AfterProperties值为null的问题
  • 原文地址:https://www.cnblogs.com/zhaobobo001/p/15581247.html
Copyright © 2011-2022 走看看