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地址,路由等,需要用户自己配置。