目录
Container A要被外部主机B访问,还有什么方法(除了桥接)?
Docker:网络模型
Linux在内核中支持,6中名称空间(可直接操作):UTS,User,Mount,IPC,Network,PID
Network:隔离设备,网络栈,端口等
如图:容器A,B,C三个容器,创建了3个名称空间,3个名称空间独立,配置网卡就可以实现通信,当主机上的物理网卡(有2个)不够分给C这个容器的时候,该怎么办?
可以使用虚拟网卡设备来进行通信,用纯软件的方式来模拟一组设备;Linux内核支持两种级别的设备模拟;一种是二层(链路层)设备:网卡,每个网卡是成对出现的,一端在主机,一端在交换机上,Linux原生支持模拟二层网桥设备交换机(工具bridge-utils);另一种是三层(网络层)OVS(Open VSwitch),软件驱动的网络(SDN)软硬件集中到一个软件上,同一调度
Bridge:桥网络
3个容器模拟出来的网卡,一半在容器内,一半在交换机上进行来实现通信,但这样只能在单节点(S1在同一个交换机上)上进行通信,如果实现两个交换机(S1,S2之间的通信)上容器进行通信怎么来实现?
一、S1、S2交换机之间用软件模拟虚拟网卡,进行通信
简单实现,模拟一对网卡(SA-SA1),一半在S1交换器上,一半在S2交换器上,这样交换机上的节点就可以通信了
二、S1、S2交换机通过路由转发,实现不同的网段的通信
路由器(网络层)设备是一个三层的设备,LInux内核自己就可以当作路由功能来使用,只需要配置IPtables规则,核心转发功能,就可当作路由来使用;在Linux中使用一个单独的名称空间就可以使用(前提是模拟出网卡,建立关联关系)
如图通过:Container R来实现路由器的功能,实现不同的网段进行通信
如何实现不同LInux主机通信尼(跨主机通信)?
我们在物理桥,桥接指的是把物理网卡(eth0)当作交