2015-09-30 206 views
2

我试图理解之间的关系:在主机上泊坞窗网络

  • eth0;和
  • docker0桥;并且每个容器上
  • eth0接口

这是我理解是码头工人:

  1. 创建docker0桥,然后给它分配的可用子网不冲突与任何运行于主人;那么
  2. Docker会绑定docker0eth0在主机上运行;然后
  3. 泊坞结合它旋转高达docker0每一个新的容器,使得容器的eth0接口连接到docker0主机,而这又是连接到eth0主机

这样的,当外在的东西上到主机尝试与容器进行通信时,它必须将消息发送到主机IP上的端口,然后该主机的IP会被转发到桥接器,然后桥接器会广播到主机上运行的所有容器,是吗?另外,这样,当一个容器需要与主机之外的某个东西进行通信时,它有自己的IP(从docker0子网租用),所以远程调用者将看到该消息来自容器的IP。

所以,如果我上面说过的任何东西是不正确的,请首先澄清我!

假设我多多少少是正确的,我的主要问题是:

  • 当远程服务“调用”到容器,所有容器获得广播相同的消息,这就造成大量的流量/噪声,但也可能是安全风险(只有容器1应该是某个消息的接收者,但其上运行的所有其他容器也会收到消息);和
  • 当Docker在不同的主机上选择相同的子网时会发生什么?在这种情况下,居住在主机1上的容器1可能具有与居住在主机2上的容器2相同的IP地址。如果容器1需要“呼出”到某个外部/远程系统(不居住在主机上),那么怎么做远程系统区分容器1与容器2(两者都将显示相同的出口IP)?
+0

查看veth(你的“绑定”的概念不太对)和NAT与IP表(伪装)的东西。 –

+0

您可以为docker主机上的连接设置特定端口。你可以在这里找到很好的解释http://stackoverflow.com/questions/26539727/giving-a-docker-container-a-routable-ip-address – Victor

+0

它不会造成很大的流量/噪音,它有一个NAT并确切知道数据包的位置。这是默认桥接网络上的安全风险。这就是Docker创建网络概念的原因。它允许您将流量隔离到应该通信的容器: https://docs.docker.com/engine/userguide/networking/dockernetworks/ 没有什么不好的事情发生,如果他们选择相同的子网,事实上他们做默认值:类似172.17.255.255。 2个主机有2个独立的NAT,因此每个主机负责正确的路由。在外部他们使用独特的HOST接口(eth0) –

回答

0

我不会说你对Docker中的网络概念很清楚。 首先我想澄清这部分:

因此,这里是怎么一回事呢:

  1. 泊坞窗使用叫做名字空间的分类/划分资源Linux内核的一项功能。
  2. 当容器启动时,Docker会为该容器创建一组名称空间。
  3. 这提供了一层隔离。
  4. 其中之一是“net namespace”:用于管理网络接口。

现在谈一点关于网络命名空间:

网命名空间,

  • 让每个容器有它自己的网络资源,自己的网络堆栈。
    • 它是自己的网络接口。
    • 它是自己的路由表。
    • 它是自己的iptables规则。
    • 它自己的插座(SS参数,netstat)
  • 我们可以跨网的命名空间移动的网络接口。
  • 所以我们可以在某处创建一个netns并在其他容器中使用它。
  • 通常:使用两个虚拟接口,它们充当交叉电缆。
  • Eth0 @ container netNS,它与主机 网络中的虚拟接口vethXXX配对。 ➔所有虚拟接口vethXXX都桥接在一起。 (使用网桥docker0)

现在,除了命名空间,Linux内核中还有第二个功能可以创建容器:c组(或控制组)。

  • 对照组,让我们实现计量和限制:
    • 内存
    • CPU
    • 块I/O
    • 网络

TL/DL

在短: 容器成为可能内核由于2个主要特点: 命名空间和C-组。

Cgroups --->限制你可以使用多少。

命名空间--->限制你可以看到。

而且你不能影响你看不到的东西。


编辑回到你的问题,当一个分组被旨在用于一个容器中的主机接收,它被封装在层,使得每个层有助于所述网络控制器,该层后剥离分组层到发送到它的目的地。 (同样,在传出时,数据包被逐层封装)

所以,我认为这也回答了你的两个问题。

  1. 这不完全是一个广播。其他容器看不到与它们无关的数据包(命名空间)。
  2. 由于图层是在数据包进入外部网络时添加的,因此外部图层(对于不同的主机不同)将有助于数据包唯一识别其接收者。

P.S:

如果有人找了一些资料错误,请让我知道在评论中。我已经写了这个匆忙,将尽快更新与更好的审查文本。

谢谢。