为Docker设置固定IP及使用Weave管理工具的方法
网络安全 2021-07-04 10:19www.168986.cn网络安全知识
为docker配置固定ip
,配置一个用于创建container interface的网桥,可以使用ovs,也可以使用Linux bridge,以Linux bridge为例
br_name=docker
brctl addbr $br_name
ip addr add 192.168.33.2/24 dev $br_name
ip addr del 192.168.33.2/24 dev em1
ip link set $br_name up
brctl addif $br_name eth0
接着,可以启动容器了,注意用--=none方式启动
# start new container
hostname='docker.test.'
cid=$(docker run -d -i -h $hostname --=none -t centos)
pid=$(docker inspect -f '{{.State.Pid}}' $cid)
狼蚁网站SEO优化,为该容器配置网络namespace,并设置固定ip
# set up ns
mkdir -p /var/run/ns
ln -s /proc/$pid/ns/ /var/run/ns/$pid
# set up bridge
ip link add q$pid type veth peer name r$pid
brctl addif $br_name q$pid
ip link set q$pid up
# set up docker interface
fixed_ip='192.168.33.3/24'
gateway='192.168.33.1'
ip link set r$pid ns $pid
ip ns exec $pid ip link set dev r$pid name eth0
ip ns exec $pid ip link set eth0 up
ip ns exec $pid ip addr add $fixed_ip dev eth0
ip ns exec $pid ip route add default via 192.168.33.1
这样,容器的网络就配置好了,如果容器内部开启了sshd服务,通过192.168.33.3就可以直接ssh连接到容器,非常方便。上面的步骤比较长,可以借助pipework来为容器设置固定ip(除了设置IP,还封装了配置网关、macvlan、vlan、dhcp等功能)
pipework docker0 be8365e3b2834 10.88.88.8/24
那么,当容器需要删除的时候,怎么清理网络呢,其实也很简单
# s and delete container
docker s $cid
docker rm $cid
# delete docker's namespace (also delete veth pair)
ip ns delete $pid
使用weave管理docker网络
weave简单使用
sudo wget -O /usr/local/bin/weave https://raw.githubusercontent./zettio/weave/master/weave
sudo chmod a+x /usr/local/bin/weave
启动weave路由器,这个路由器其实也是在docker中启动的
[root@h-46mow360 ~]# weave launch
Unable to find image 'zettio/weave' locally
3b3a3db2c186fb5203d269b3febbbbf126591a7ebd8117a8a5250683749f
[root@h-46mow360 ~]# brctl show
bridge name bridge id STP enabled interfaces
docker0 8000.56847afe9799 no veth801050a
weave 8000.7afc2a03325e no vethwepl2146
[root@h-46mow360 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3b3a3db2c186 zettio/weave:git-a34e214201cb "/home/weave/weaver About a minute ago Up About a minute 0.0.0.0:6783->6783/tcp, 0.0.0.0:6783->6783/udp weave
在两台物理机上分别启动一个容器
c1=$(weave run 10.0.3.3/24 -t -i -v /sys/fs/cgroup:/sys/fs/cgroup:ro -v /tmp/$(mktemp -d):/run systemd:systemd /usr/lib/systemd/systemd)
c2=$(weave run 10.0.3.5/24 -t -i -v /sys/fs/cgroup:/sys/fs/cgroup:ro -v /tmp/$(mktemp -d):/run systemd:systemd /usr/lib/systemd/systemd)
这个时候,两个容器之间是不通的,需要在两台weave的路由器之间建立连接( if there is a firewall between $HOST1 and $HOST2, you must open port 6783 for TCP and UDP)
这样,两台容器之间通了
# nsenter --mount --uts --ipc -- --pid --target $(docker inspect --format "{{.State.Pid}}" "$c2")
-bash-4.2# ping -c 3 10.0.3.3
PING 10.0.3.3 (10.0.3.3) 56(84) bytes of data.
64 bytes from 10.0.3.3: icmp_seq=1 ttl=64 time=2.34 ms
64 bytes from 10.0.3.3: icmp_seq=2 ttl=64 time=1.52 ms
64 bytes from 10.0.3.3: icmp_seq=3 ttl=64 time=1.13 ms
--- 10.0.3.3 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 1.131/1.667/2.345/0.505 ms
weave其他特性
•应用隔离不同子网容器之间默认隔离的,即便它们位于同一台物理机上也相互不通;不同物理机之间的容器默认也是隔离的
•物理机之间容器互通weave connect $OTHER_HOST
•动态添加网络对于不是通过weave启动的容器,可以通过weave attach 10.0.1.1/24 $id来添加网络(detach删除网络)
•安全性可以通过weave launch -password wEaVe设置一个密码用于weave peers之间加密通信
•与宿主机网络通信weave expose 10.0.1.102/24,这个IP会配在weave网桥上
•查看weave路由状态weave ps
•通过NAT实现外网访问docker容器
,配置一个用于创建container interface的网桥,可以使用ovs,也可以使用Linux bridge,以Linux bridge为例
复制代码
代码如下:br_name=docker
brctl addbr $br_name
ip addr add 192.168.33.2/24 dev $br_name
ip addr del 192.168.33.2/24 dev em1
ip link set $br_name up
brctl addif $br_name eth0
接着,可以启动容器了,注意用--=none方式启动
复制代码
代码如下:# start new container
hostname='docker.test.'
cid=$(docker run -d -i -h $hostname --=none -t centos)
pid=$(docker inspect -f '{{.State.Pid}}' $cid)
狼蚁网站SEO优化,为该容器配置网络namespace,并设置固定ip
复制代码
代码如下:# set up ns
mkdir -p /var/run/ns
ln -s /proc/$pid/ns/ /var/run/ns/$pid
# set up bridge
ip link add q$pid type veth peer name r$pid
brctl addif $br_name q$pid
ip link set q$pid up
# set up docker interface
fixed_ip='192.168.33.3/24'
gateway='192.168.33.1'
ip link set r$pid ns $pid
ip ns exec $pid ip link set dev r$pid name eth0
ip ns exec $pid ip link set eth0 up
ip ns exec $pid ip addr add $fixed_ip dev eth0
ip ns exec $pid ip route add default via 192.168.33.1
这样,容器的网络就配置好了,如果容器内部开启了sshd服务,通过192.168.33.3就可以直接ssh连接到容器,非常方便。上面的步骤比较长,可以借助pipework来为容器设置固定ip(除了设置IP,还封装了配置网关、macvlan、vlan、dhcp等功能)
复制代码
代码如下:pipework docker0 be8365e3b2834 10.88.88.8/24
那么,当容器需要删除的时候,怎么清理网络呢,其实也很简单
复制代码
代码如下:# s and delete container
docker s $cid
docker rm $cid
# delete docker's namespace (also delete veth pair)
ip ns delete $pid
使用weave管理docker网络
weave简单使用
复制代码
代码如下:sudo wget -O /usr/local/bin/weave https://raw.githubusercontent./zettio/weave/master/weave
复制代码
代码如下:sudo chmod a+x /usr/local/bin/weave
启动weave路由器,这个路由器其实也是在docker中启动的
复制代码
代码如下:[root@h-46mow360 ~]# weave launch
Unable to find image 'zettio/weave' locally
3b3a3db2c186fb5203d269b3febbbbf126591a7ebd8117a8a5250683749f
复制代码
代码如下:[root@h-46mow360 ~]# brctl show
bridge name bridge id STP enabled interfaces
docker0 8000.56847afe9799 no veth801050a
weave 8000.7afc2a03325e no vethwepl2146
复制代码
代码如下:[root@h-46mow360 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3b3a3db2c186 zettio/weave:git-a34e214201cb "/home/weave/weaver About a minute ago Up About a minute 0.0.0.0:6783->6783/tcp, 0.0.0.0:6783->6783/udp weave
在两台物理机上分别启动一个容器
复制代码
代码如下:c1=$(weave run 10.0.3.3/24 -t -i -v /sys/fs/cgroup:/sys/fs/cgroup:ro -v /tmp/$(mktemp -d):/run systemd:systemd /usr/lib/systemd/systemd)
c2=$(weave run 10.0.3.5/24 -t -i -v /sys/fs/cgroup:/sys/fs/cgroup:ro -v /tmp/$(mktemp -d):/run systemd:systemd /usr/lib/systemd/systemd)
这个时候,两个容器之间是不通的,需要在两台weave的路由器之间建立连接( if there is a firewall between $HOST1 and $HOST2, you must open port 6783 for TCP and UDP)
复制代码
代码如下:weave connect 10.33.0.9
这样,两台容器之间通了
复制代码
代码如下:# nsenter --mount --uts --ipc -- --pid --target $(docker inspect --format "{{.State.Pid}}" "$c2")
复制代码
代码如下:-bash-4.2# ping -c 3 10.0.3.3
PING 10.0.3.3 (10.0.3.3) 56(84) bytes of data.
64 bytes from 10.0.3.3: icmp_seq=1 ttl=64 time=2.34 ms
64 bytes from 10.0.3.3: icmp_seq=2 ttl=64 time=1.52 ms
64 bytes from 10.0.3.3: icmp_seq=3 ttl=64 time=1.13 ms
--- 10.0.3.3 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 1.131/1.667/2.345/0.505 ms
weave其他特性
•应用隔离不同子网容器之间默认隔离的,即便它们位于同一台物理机上也相互不通;不同物理机之间的容器默认也是隔离的
•物理机之间容器互通weave connect $OTHER_HOST
•动态添加网络对于不是通过weave启动的容器,可以通过weave attach 10.0.1.1/24 $id来添加网络(detach删除网络)
•安全性可以通过weave launch -password wEaVe设置一个密码用于weave peers之间加密通信
•与宿主机网络通信weave expose 10.0.1.102/24,这个IP会配在weave网桥上
•查看weave路由状态weave ps
•通过NAT实现外网访问docker容器
网络安全培训
- 网络安全常见漏洞类型 网络安全常见漏洞类型包
- 绿色上网顺口溜七言 绿色上网的宣传标语
- 网络安全等级保护测评 网络安全等级保护条例
- 如何加强网络安全 网络安全隐患有哪些
- 网络安全防护措施有哪些 网络安全等级保护等级
- 如何保障网络安全 如何做好网络安全保障工作
- 维护网络安全的措施有哪些 维护网络安全的主要
- 网络安全工程师好学吗 2024年网络安全工程师好学
- 网络安全注意事项简短 网络安全注意事项100字
- 网络安全面临的挑战 当前网络安全面临的新问题
- 网络安全培训哪个靠谱 网络安全培训找哪个
- 普及网络安全知识内容 普及网络安全教育
- 网络安全防范知识宣传内容 网络安全防范知识宣
- 如何做好网络安全工作 如何做好网络安全工作
- 网络安全常识的丰富内容 网络安全的相关知识
- 青少年网络安全教育片 青少年网络安全知识讲座