簡體   English   中英

Docker 網絡架構:隔離容器,基於主機的路由

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM