0. 背景

将cache服务部署到边缘计算节点时,要验证一种方案,可以简单描述如下:有一台主机和10条独立线路,每个线路有独立IP,现在需要将cache服务部署到docker,然后通过10条线路对外提供服务。

1. 方案

新建10个虚拟网卡

1
2
3
4
5
6
7
8
9
cd /etc/sysconfig/network-scripts
cp ifcfg-eth0 ifcfg-eth0:1
# 修改 NAME DEVICE IPADDR值
NAME=eth0:1
DEVICE=eth0:1
IPADDR=10.0.0.12
# 同理添加 ifcfg-eth0:2...
# 重启网络
systemctl restart network

网卡添加完成如下图所示:

linux-virtual-network-cfg.png

启动docker绑定网卡

启动docker时通过-p参数指定主机IP,然后通过软路由将主机IP绑定到外网IP,这样通过外网IP进来的流量即可发送docker服务,这样解决的「进」的问题

1
docker run -dit -p 10.0.0.12:1573:1573 ...

但是docker的出口网络,是通过bridge桥接到eth0,所以流量都是通过eth0发送出去,docker本身不提供网卡绑定的功能,但是可以通过iptables解决「出」的问题

1
iptables -t nat -I POSTROUTING -p all -s 192.168.1.12 -j SNAT --to-source 10.0.0.12

其中通过docker inspect <container_id>查看容器的网络ip,我这里是 192.168.1.12,然后通过iptables做nat转换,这样出口流量即通过eth0:1虚拟网卡发送出去。