Docker——网络

基本网络配置

Linux平台下,Docker容器网络资源通过内核的Network Namespace机制实现隔离,不同的Network Namespace 有各自的网络设备、协议栈、路由表、防火墙规则等,反之,同一Network Namespace下的进程共享同一网络视图。

网络驱动

Docker网络中使用Libnetwork的容器网络模型定义类标准的API用于容器配置网络,其底层还可以适配各种网络驱动。

Libnetwork使得Dockers具备跨主机多子网的能力,同一个子网内不同容器可以运行在不同主机上。
Libnetwork实现了五种驱动:

  • null:空配置,用户自己给容器配置网络和路由。
  • remote:Docker网络插件的实现,使得Libnetwork可以通过HTTP RESTful API对接第三方网络方案。
  • host:容器与主机共享同一Network Namespace,共享同一套网络协议栈、路由表以及防火墙规则。
  • bridge:Docker默认的容器网络驱动。有点像Linux Bridge,一种虚拟交换机技术。
  • overlay:Docker原生的跨主机多子网网络方案。主要通过Linux bridge和vxlan隧道实现。

VXLAN
Linux Bridge

Docker的网络模式

在运行容器的时候,可以通过--net标签进行修改网络模式。通过对Network Namespace的操作,Docker提供五种容器网络模式:

  • none:不为容器配置任何网络功能。
  • container:与另一个运行中的容器共享Network Namespace,共享相同的网络视图。
  • host:与主机共享Network Namespace,容器有完整的权限可以操纵主机的协议栈、路由表和防火墙,所以是不安全的。
  • bridge:Dokcer设计的NAT网络模型。Docker Daemon启动时会在主机创建一个Linux网桥,容器启动时,Docker会创建一堆veth pair设备,一端连在容器的Network Namespace上,另一端连载网桥上,从而实现网桥上的容器都能通信。
  • overlay:Docker原生的跨主机多子网模型。

Docker Bridge 网络拓扑图图:
在这里插入图片描述

overlay模式网络拓扑图:
在这里插入图片描述
所谓沙盒,就是一个隔离的网络运行环境,保存了容器网络栈的配置,包括对网络接口、路由表和DNS配置的管理。

跨主机多子网

Open vSwitch

OpenvSwitch,简称OVS是一个虚拟交换软件,主要用于虚拟机VM环境,作为一个虚拟交换机,支持Xen/XenServer, KVM, and VirtualBox多种虚拟化技术。OpenvSwitch还支持多个物理机的分布式环境。

一个虚拟交换机(vswitch)主要有如下两个作用:

  • 传递虚拟机VM之间的流量
  • 以及实现VM和外界网络的通信。

可以用OpenvSwitch替换Docker默认的网桥,然后再OVS网桥上添加VXLAN端口实现跨主机通信。

Flannel

Flannel是一种开源的Docker SDN网络解决方案,这样我们就不需要通过ip命令手动配置网络,不用把网桥一个个连接在一起。
Flannel的使用依赖于Etcd,而Etcd时一种开源的K-V存储及服务发现程序,在集群中可用于不同主机之间交换配置、状态信息等。
在这里插入图片描述

Flannel也用于Kuberntes中的网络方案。

原文地址:https://www.cnblogs.com/lippon/p/14255134.html