Docker网络模式

1、网络隔离

Docker的网络隔离依靠Linux的network namespace实现,网络转发依靠iptables

2、网络概念:

Docker采用CNM(container network model),Kubernetes采用CNI(container network interface)。

CNM包含以下三个主要概念:

  • Network Sandbox:沙盒,容器的网络栈,它定义了容器内的虚拟网卡、DNS和路由表,是network namespace的一种实现,是容器的内部网络栈。实现技术network namespace等。
  • endpoint:端点,用于连接sandbox和network。主要实现技术有veth pair、tun/tap等。
  • Backend Network:可以理解为一个Driver,是一个第三方网络栈,包含多种网络模式。对应技术有Linux bridge,VLAN等。

3、Docker网络模式

  • host
  • bridge
  • container
  • none
3.1 host

docker不会为容器创建独有的network namespace;

使用宿主机的默认网络命名空间,共享一个网络栈;

表现为容器内和宿主机的IP一致;

这种模式用于网络性能较高的场景,但安全隔离性相对差一些。

3.2 bridge

桥接模式,docker进程启动时会创建一个docker0网桥,容器内的数据通过这个网卡设备与宿主机进行数据传输。

docker会为容器创建独有的network namespace,也会为这个命名空间配置好虚拟网卡,路由,DNS,IP地址与iptables规则(也就是sandbox的内容)。

3.3 container

容器共享模式,这种模式是host模式的一种延伸,一组容器共享一个network namespace;

对外表现为他们有共同的IP地址,共享一个网络栈;

kubernetes的pod使用的这一模式。

3.4 none

none模式是桥接模式的一种特例,docker会为容器创建独有的network namespace ,但不会为这个命名空间准备虚拟网卡,IP地址,路由等,需要用户自己配置。

发表评论

邮箱地址不会被公开。

Captcha Code