[英]Docker network architecture: isolated container, host based routing
當我不時與 docker 一起玩時,我遇到了一個無法進一步解決的問題
我想創建一個公共“雲”,用戶可以在其中創建自己的容器。 容器只是一個 http 應用程序,例如 nextcloud。
將容器彼此隔離並允許通過 docker 主機與互聯網進行通信的最佳方法是什么,因此如有必要,我可以根據防火牆阻止一些 IP。
這應該適用於傳入和傳出連接。
我為此創建了一個設置,描述如下: docker macvlan - 沒有到主機(容器)的路由,但甚至無法使基本設置正常工作。
為了更好地理解,我創建了一個圖表:
在 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 其他容器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.