如何解决Docker网络架构:隔离容器,基于主机的路由
当我不时与docker一起玩时,我陷入了一个无法继续前进的问题
我想创建一个公共的“云”,用户可以在其中创建自己的容器。 容器只是一个http应用程序,例如nextcloud。
将容器彼此隔离并允许通过docker主机与互联网进行通信的最佳方法是什么,因此如有必要,我可以为每个防火墙阻止一些IP。
这应该同时适用于传入和传出连接。
我为此创建了一个设置,描述如下:docker macvlan - no route to host (container),但甚至无法使基本设置正常工作。
为了更好地理解,我创建了一个图:
在docker主机上,运行反向代理,该代理查找特定的http标头并将基于该标头的请求转发到所需的容器。
最大的问题是网络设置:我不知道docker,主机以及需要配置什么才能使它工作。
在Linux下联网不是我的优势。
编辑:也许我遇到了XY问题(https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)
解决方法
我做的事情可能有点太简单了,但是我认为您不需要为此而使用macvlan。每个容器的正常网络足以分隔所有容器。与主机的所有通信都将仅通过网关进行。
我只是为了好玩而进行了一些测试:
设置:
rm -f addresses.txt
for i in $( seq 1 5 ) ; do
docker network create test$i
done
for i in $( seq 1 5 ) ; do
docker run -d --rm \
--name myspecialtest$i \
--network test$i \
alpine sleep 3600
docker exec -it myspecialtest$i ifconfig eth0 \
| grep -P -o 'inet addr:\d+\.\d+.\d+.\d+' \
| cut -d: -f2 >> addresses.txt
done
测试:
for i in $( seq 1 5 ) ; do
for ipaddress in $( cat addresses.txt ); do
docker exec -it myspecialtest$i \
ping -w 5 $ipaddress
done
done
清理:
for i in $( seq 1 5 ) ; do
docker container rm -f myspecialtest$i
docker network rm test$i
done
如您所见,这些容器将只能ping通自身,而其他容器则不能。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。