使用RIP协议实现桌面到容器网络通信
2016-09-23 by dongnan
目标
使用 rip 路由协议,学习交换机的网络地址,实现 docker 容器到桌面网络通信。
环境
- 运行时,Docker 1.10.3
- 宿主机,CentOS 7.2 amd64
- 物理交换机,cisco 3560x
- 物理设备网络,192.168.1.0/16
- 容器虚拟网络,172.16.1.0/16
操作步骤
Docker部分
已经有爱好者将 quagga封装Docker镜像,无需任何操作创建容器即可,quagga 支持 bgp/rip 等路由协议。
# 命令行执行
docker pull index.alauda.cn/georce/router
docker run -tid --name=router \
    --privileged --net=host \
    index.alauda.cn/georce/router
交换机部分
验证
Docker宿主机学习到的网络路由
# 命令行执行
ip route
default via 192.168.10.1 dev eth0  proto static  metric 100
172.16.2.0/24 dev docker0  proto kernel  scope link  src 172.16.2.1
172.16.3.0/24 via 192.168.10.203 dev eth0  proto zebra  metric 20
192.168.10.0/24 dev eth0  proto kernel  scope link  src 192.168.10.202  metric 100
192.168.11.0/24 via 192.168.10.1 dev eth0  proto zebra  metric 2
192.168.12.0/24 via 192.168.10.1 dev eth0  proto zebra  metric 2
192.168.13.0/24 via 192.168.10.1 dev eth0  proto zebra  metric 2
192.168.14.0/24 via 192.168.10.1 dev eth0  proto zebra  metric 2
192.168.15.0/24 via 192.168.10.1 dev eth0  proto zebra  metric 2
192.168.16.0/24 via 192.168.10.1 dev eth0  proto zebra  metric 2
创建一个测试容器
# 命令行执行
docker run -tid --name test \
    -v /data/var:/work/var:ro \
    hub-dev.ywwd.net/zongming/cnp:1.1
测试网络通信
# 172.16.3.3 是创建的测试容器IP地址
traceroute -n 172.16.3.3
# 返回结果
traceroute to 172.16.3.3 (172.16.3.3), 30 hops max, 60 byte packets
1  192.168.11.1  8.693 ms  8.887 ms  9.122 ms
2  192.168.10.203  0.481 ms  0.490 ms  0.487 ms
3  172.16.3.3  0.876 ms  0.870 ms  0.860 ms
经过3跳到达目的地址,IP192.168.11.1是三层交换机Vlan地址,IP192.168.10.203是docker宿主机地址。
小结
通过quagga容器使用 rip 路由协议,学习交换机的网络地址,打通了桌面与容器间的网络通信。
不过这种方式适合开发环境,由于安全和网络开销问题并不适用生产环境。