1、linux虚拟网桥的特点
可以设置IP地址
相当于拥有一个隐藏的虚拟网卡
2、Docker守护进程创建的网桥
docker守护进程创建的网桥的名字是docker0
ip 172.18.0.1 子网掩码 255.255.0.0 (不同的机器不同)
MAC 02:42:ac:11:00:00 到 02:42:ac:11:ff:ff
总共有65534个地址
3、docker守护进程与docker容器的连接
docker容器的网络设备会与运行docker守护进程的主机上打开一个接口与容器相连,实现docker0网桥与容器的网络通信
4、ubuntun镜像中没有ifconfig,使用如下命令安装
apt-get update
apt install net-tools 安装ifconfig命令
apt install iputils-ping 安装ping命令
5、ubuntu系统中安装网桥的管理工具(cenos 用yum安装)
apt-get update
apt-get install bridge-utils
6、使用网桥管理工具显示系统网桥
btdtl show
显示如下
bridge name bridge id STP enabled interfaces
docker0 8000.024221279713 no veth111b9df
veth19a27c5
veth729cdf8
veth7796a25
veth7e0623f
vethbdfe96c
interfaces 为接口
7、修改docker0的地址
sudo ifconfig docker0 192.168.200.1 netmask 255.255.255.0
8、创建自定义的虚拟网桥
sudo ifconfig br0 192.168.100.1 netmask 255.255.255.0 (创建一个虚拟网桥br0)
在docker配置文件中DOCKER_OPTS 中加上
-p br0
重启docker服务
9、docker容器间的互联
1、允许所有的容器的互联
docker在默认情况下会让同一宿主机上的所有的容器互联
docker守护进程启动时通过设置参数-icc来设置是否允许容器间的互联
-icc默认值为true,即允许容器间的互联,也可以指定-icc的值为false,不允许容器间的互联
2、创建容器时指定连接容器的代号(别名)
docker run --link=[CONTAINER_NAME]:[ALIAS] [IMAGES] [COMMAND]
docker 守护进程重启会改变地址容器的ip地址,但其他容器可以指定某个容器的别名(代号),以这个代号去连接,避免ip改变无法连接的情况
docker容器通过ALIAS去访问别的容器,是通过修改docker容器的linux镜像来实现的,如在
/etc/hosts将ALIAS指向要访问的端口
3、拒绝所有容器间的互联
进docker守护进程的启动参数--icc置为false,重启docker后容器间的连接就会阻断
vim /etc/default/docker
在DOCKER_OPTS 加入 --icc=false
:wq
重启docker
service docker restart
4、允许特定容器间的连接
当守护进程参数-icc=false通过设置容器的守护进程的启动参数--iptables=true,默认为true,所以不要设置
注意当--icc=false 和--iptables=false启动时报错,暂时无解
此时容器时指定--link指定的容器间依然不收--icc=false的影响
10、容器与外部网络连接
1、ip_forward
ip_forward是linux 内核中的变量,标志是否允许流量转发,默认是不允许
使用sysctl net.ipv4.conf.all.forwarding 命令查看ip_forward的值,置为0是不允许流量转发
为1是允许流量转发,通过echo 1 > /proc/sys/net/ipv4/ip_forward设置允许流量转发,echo 0 > /proc/sys/net/ipv4/ip_forward设置不允许流量转发
docker 守护进程通配置参数-ip-forward=true(默认为true)设置ip_forward的值为1来允许流量转发
有关ip_forward的相关介绍请见
https://www.cnblogs.com/sfnz/p/6555723.html
2、iptables
Iptables是与linux内核集成的包过滤防火墙系统,几乎所有的linux发行版本都会包含Iptables的功能
iptables的工作流程
表(table)
链(chain)
规则(rule)
ACCEPT、REJECT、DROP
filetr表中包含的链
INPUT
FORWARD
OUTPUT
查看filter
iptables -L -n
禁止某个ip访问某个容器
sudo iptables -I DOCKER -s 10.211.55.3 -d 172.17.0.7 -p TCP --dport 80 -j DROP
禁止10.211.55.3访问容器地址为172.17.0.7的容器的80端口