【问题标题】:Docker network architecture: isolated container, host based routingDocker 网络架构:隔离容器、基于主机的路由
【发布时间】:2020-10-01 12:21:59
【问题描述】:

当我不时与 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)

【问题讨论】:

    标签: docker networking routes containers reverse-proxy


    【解决方案1】:

    我可能做的事情有点太容易了,但我认为你不需要为此使用 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 其他容器。

    【讨论】:

    猜你喜欢
    • 2023-03-03
    • 1970-01-01
    • 2016-02-27
    • 1970-01-01
    • 1970-01-01
    • 2016-05-01
    • 2020-07-22
    • 2019-08-25
    • 2020-07-08
    相关资源
    最近更新 更多