容器的访问控制主要通过Linux上的iptables防火墙管理实现。

容器访问外部网络

默认,容器可以访问宿主机。而容器如果想要通过宿主机访问外部网络,需要宿主机进行转发。在宿主机中检查转发是否打开

$ sysctl net.ipv4.ip_forward
net.ipv4.ip_forward=1

如果为0,则说明转发没有开启,可以手动打开

$ sysctl -w net.ipv4.ip_forward=1

如果启动Docker服务时设定--ip-forward=true ,则Docker自动设定net.ipv4.ip_forward=1

容器间的访问

默认所有容器连接在docker0网桥,因此所有容器默认是拓扑互通的。当启动Docker服务时,默认会在iptables添加FORWARD链添加一条“允许”转发的策略,而通过配置--icc=true|false (默认true)可以控制容器访问策略。

出于安全考虑,可以在/etc/default/docker 文件配置DOCKER_OPTS==--icc=false 默认禁止容器间的相互访问。

而在Docker服务启动时指定--iptables=false 则会修改宿主机系统上的iptables规则。

即便在--icc=false 禁用容器间相互访问后,仍然可以通过--link 允许访问指定容器的开放端口。

比如,在启动Docker服务时,使用--icc=false --iptables=true 配置容器间禁止访问,但允许Docker自动修改系统中的iptables,此时系统中的iptables规则可能是禁止所有转发流量.当启动容器时,使用--link参数连接容器,Docker会在iptables为两个互联容器添加一条ACCEPT规则,允许相互访问开放的端口。

results matching ""

    No results matching ""