docker - Docker 网络架构:隔离容器、基于主机的路由
问题描述
当我不时与 docker 一起玩时,我遇到了一个无法进一步解决的问题
我想创建一个公共“云”,用户可以在其中创建自己的容器。该容器只是一个 http 应用程序,例如 nextcloud。
将容器彼此隔离并允许通过 docker 主机与 Internet 通信的最佳方法是什么,因此如有必要,我可以通过防火墙阻止一些 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 自己,而不能 ping 其他容器。
推荐阅读
- elm - 在 Elm 中导入/导出模块函数/类型时,“隐藏”发生了什么?
- c - ***检测到堆栈粉碎***:已终止。任何解决方案?
- kubernetes - Istio:在不同节点注入的 pod 副本无法与 istio 通信
- java - Maven 资源插件不过滤文件
- python - 将不同的数据框合并在一起,但索引可能并不总是相同
- optimization - 划分第一阶段可行性集
- amazon-web-services - 用于循环的 Terraform 嵌套
- python - 如何将带有小时整数的列转换为 datetime pandas 索引?
- jquery - 在 JQuery 对话框文本框中输入单击不会触发 __doPostBack
- sql - 替换重复出现的单词及其前面的字符