kubenetes+docker跨主网络
2019-11-25 13:32:26 1 举报
AI智能生成
kubenetes+docker+网络组件 跨主网络
作者其他创作
大纲/内容
docker
原理和注意事项
在 Linux 中,能够起到虚拟交换机作用的网络设备,是网桥(Bridge)。它是一个工作在数据链路层(Data Link)的设备,主要功能是根据 MAC 地址学习来将数据包转发到网桥的不同端口(Port)上。docker项目会在苏主机上创建一个docker0网桥,凡是连接在 docker0 网桥上的容器,就可以通过它来进行通信。
在默认情况下,被限制在 Network Namespace 里的容器进程,实际上是通过 Veth Pair 设备 + 宿主机网桥的方式,实现了跟同其他容器的数据交换。
请求路径
container-1
container虚拟默认网卡-eth0
docker虚拟Veth Pair设备
docker0
docker0
container虚拟默认网卡-eth0
docker虚拟Veth Pair设备
核心内容
docker0网桥
flannel
UDP
原理和注意事项
当 IP 包从容器经过 docker0 出现在宿主机,然后又根据路由表进入 flannel0 设备后,宿主机上的 flanneld 进程(Flannel 项目在每个宿主机上的主进程),就会收到这个 IP 包。然后,flanneld 看到了这个 IP 包的目的地址,是 100.96.2.3,就把它发送给了 Node 2 宿主机。
每台宿主机上的 flanneld,都监听着一个 8285 端口,所以 flanneld 只要把 UDP 包发往 Node 2 的 8285 端口即可
请求路径
container-1
docker0
flannel0
flanneld:8285
eth0网卡设备
核心内容
flanneld:8285负责处理信息收发
VXLAN
原理和注意事项
VXLAN 模式组建的覆盖网络,其实就是一个由不同宿主机上的 VTEP 设备,也就是 flannel.1 设备组成的虚拟二层网络。对于 VTEP 设备来说,它发出的“内部数据帧”就仿佛是一直在这个虚拟的二层网络上流动。这,也正是覆盖网络的含义。
核心内容:VTEP设备之间的网络通信,且属于二层网络
VXLAN,即 Virtual Extensible LAN(虚拟可扩展局域网),是 Linux 内核本身就支持的一种网络虚似化技术。所以说,VXLAN 可以完全在内核态实现上述封装和解封装的工作,从而通过与前面相似的“隧道”机制,构建出覆盖网络(Overlay Network)。
请求路径
container-1
dcoker0
Node1 flannel.1
Node2 flannel.1
核心内容
VTEP 设备
host-gw
原理和注意事项
host-gw 模式的工作原理,其实就是将每个 Flannel 子网(Flannel Subnet,比如:10.244.1.0/24)的“下一跳”,设置成了该子网对应的宿主机的 IP 地址。也就是说,这台“主机”(Host)会充当这条容器通信路径里的“网关”(Gateway)。这也正是“host-gw”的含义。
Flannel 子网和主机的信息,都是保存在 Etcd 当中的。flanneld 只需要 WACTH 这些数据的变化,然后实时更新路由表即可。
Flannel host-gw 模式必须要求集群宿主机之间是二层连通的。
请求路径
infra-container-1
Node1 主机ip
infra-container-2
核心内容
主机地址即为网关地址
calico
原理和注意事项
Calico 的 CNI 插件
与kubenetes的cni插件类似,用来代替docker0网桥的作用
Felix
它是一个 DaemonSet,负责在宿主机上插入路由规则(即:写入 Linux 内核的 FIB 转发信息库),以及维护 Calico 所需的网络设备等工作。
BIRD
它就是 BGP 的客户端,专门负责在集群里分发路由规则信息,同步共享各个路由表信息,按需添加到自己的路由表中
BGP 的全称是 Border Gateway Protocol,即:边界网关协议。它是一个 Linux 内核原生就支持的、专门用在大规模数据中心里维护不同的“自治系统”之间路由信息的、无中心的路由协议。
BGP,就是在大规模网络中实现节点路由信息共享的一种协议。
核心内容
主机边界路由表
网络模式
Node-to-Node Mesh
默认配置使用
一般推荐用在少于 100 个节点的集群里
每台node的BIRD客户端与所有节点之间实时建立路由规则共享
请求路径
container-1
Node1 边界路由接收器BIRD
Node2 边界路由接收器BIRD
container-4
Route Reflector
100以上节点集群使用
指定专门的几个节点,建立BGP连接作为所有节点的路由规则学习
IPIP
node IP不在同一个子网内
请求路径
container-1
tunl0=node1
node2=tunl0
容器网络建议
如果是在公有云上,由于宿主机网络本身比较“直白”,我一般会推荐更加简单的 Flannel host-gw 模式。但不难看到,在私有部署环境里,Calico 项目才能够覆盖更多的场景,并为你提供更加可靠的组网方案和架构思路。
收藏
收藏
0 条评论
下一页