您现在的位置:首页 >> 装修知识

制品模拟实现 Docker 容器网络

发布时间:2025/08/25 12:17    来源:句容家居装修网

外是一个纯Linux稳定状态的东西,但为了顺应各种各样使用者层相同的消费,Linux开放了一些洞口借助于来专供使用者层来打压。其中都面 iptables 就是一个比较常用的打压Linux行为的机器,它在Linux中都埋下了五个钩子入口,这就是俗称的五氨基酸。

Linux 在转给数据库的时候,在 IP 层转至 ip_rcv 中都面执行。便执行氨基酸路推论,发掘借助于是本装置的话就转至 ip_local_deliver 来进行本装置转给,最终送往 TCP 协议层。在这个现实生活中都面,埋了两个 HOOK,第一个是 PRE_ROUTING。这段编译器亦会执行到 iptables 中都面 pre_routing 中都的各种备注。发掘借助于是本地转给后接着又亦会执行到 LOCAL_IN,这亦会执行到 iptables 中都面系统设计的 input 比赛规则。

在收发数据库的时候,查回来氨基酸路备注回来到借助于口通讯设备后,依序通过 紧接ip_local_out、 ip_output 等变量将机器箱送至通讯设备层。在这两个变量中都面分别过了 OUTPUT 和 POSTROUTING 开的各种比赛规则。

如果是发来现实生活,Linux 发来氨基酸路器发掘借助于不是本装置的机器箱可以通过查回来自己的氨基酸路备注回来到适当的通讯设备把它发来借助于去。那就起再行在 ip_rcv 中都面将机器箱送至 ip_forward 变量中都面执行,最终在 ip_output 变量中都面将机器箱发来借助于去。在这个现实生活中都面分别过了 PREROUTING、FORWARD 和 POSTROUTING 三个比赛规则。

综上所述,iptables 中都的五个氨基酸在Linux在线端口中都面的位置就可以归纳如此一来如下这幅图。

数据库转给现实生活停下来的是 1 和 2,收发现实生活停下来的是 4 、5,发来现实生活是 1、3、5。有了这张图,我们能更是清楚地备注达借助于来 iptable 和Linux的关联。

在 iptables 中都面,根据充分利用的基本功能的相同,又分作了四张备注。分别是 raw、mangle、nat 和 filter。其中都面 nat 备注充分利用我们常却说的 NAT(Network AddressTranslation) 基本功能。其中都面 nat 又分作 SNAT(Source NAT)和 DNAT(Destination NAT)两种。

SNAT 解决的是内网位址到访结构上在线的解决办法。它是通过在 POSTROUTING 中都改写到来源 IP 来充分利用的。

DNAT 解决的是内网的免费要能够被结构上到访到的解决办法。它在通过 PREROUTING 改写到尽可能 IP 充分利用的。

2. 充分利用各种类型在线外网通讯

基于以上的一门,我们用纯手工的方式搭建一个可以和 Docker 相同的各种类型在线。而且要充分利用和外网通讯的基本功能。

2.1 实验者生稳定状态系统马上

我们再行来始创一个各种类型的在线生稳定状态系统借助于来,其名称紧致为 net1。宿主装置的 IP 是 10.162 的物理层,可以到访结构上微电脑。各种类型在线为其分派 192.168.0 的物理层,这个物理层是私有财产的,结构上微电脑不会识别。

这个各种类型在线的搭建现实生活如下。再行始创一个 netns 借助于来,名称为 net1。

# ip netns add net1

始创一个 veth 对儿(veth1 - veth1_p),把其中都面的一头 veth1 放于 net1 中都面,给它系统设计上 IP,并把它叫停一起。

# ip link add veth1 type veth peer name veth1_p# ip link set veth1 netns net1# ip netns exec net1 ip addr add 192.168.0.2/24 dev veth1 # IP# ip netns exec net1 ip link set veth1 up

始创一个 bridge,给它也特设上 ip。年中把 veth 的另外前端 veth1_p 插到 bridge 上亦会。最终把网桥和 veth1_p 都叫停一起。

# brctl addbr br0# ip addr add 192.168.0.1/24 dev br0# ip link set dev veth1_p master br0# ip link set veth1_p up# ip link set br0 up这样我们就在 Linux 上始创借助于了一个各种类型的在线。2.2 催促外网能源

现在论据我们上亦会的 net1 这个在线生稳定状态系统中都面想到访外网。这中都的外网是同义的各种类型在线宿主装置结构上的在线。

我们论据它要到访的另外4台微电脑 IP 是 10.153.*.* ,这个 10.153.*.* 后面两段由于是我的核心在线,所以隐藏一起了。你在实验者的现实生活中都面,用自己的 IP 代替即可。

我们实际上来到访一下就让:

# ip netns exec net1 ping 10.153.*.*connect: Network is unreachable

提示在线通达,这是怎么回事?用这段报错关键字在Linux软件包中都搜索一下:

//file: arch/parisc/include/uapi/asm/errno.h#define ENETUNREACH 229 /* Network is unreachable *///file: net/ipv4/ping.cstatic int ping_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg, size_t len){ ... rt = ip_route_output_flow(net, Cofl4, sk); if (IS_ERR(rt)) { err = PTR_ERR(rt); rt = NULL; if (err == -ENETUNREACH) IP_INC_STATS_BH(net, IPSTATS_MIB_OUTNOROUTES); goto out; } ... out: return err; }

在 ip_route_output_flow 这中都的返回值推论如果是 ENETUNREACH 就重新加入了。这个惠判别正文上来看报错的数据库就是 “Network is unreachable”。

这个 ip_route_output_flow 主要是执行氨基酸路所选路。所以我们可知确实是氨基酸路借助于解决办法了,看一下这个名称紧致的氨基酸路备注。

# ip netns exec net1 route -nKernel IP routing tableDestination Gateway Genmask Flags Metric Ref Use Iface192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 veth1

怪不得,本来 net1 这个 namespace 下选项只有 192.168.0.* 这个物理层的氨基酸路比赛规则。我们 ping 的 IP 是 10.153.*.* ,根据这个氨基酸路备注中都回来大概借助于口。自然就收发败北了。

我们来给 net 添加上选项氨基酸路比赛规则,只要匹配大概其它比赛规则就选项送至 veth1 上,同时所选定下一条是它所相连的 bridge(192.168.0.1)。

# ip netns exec net1 route -nKernel IP routing tableDestination Gateway Genmask Flags Metric Ref Use Iface192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 veth1# ip netns exec net1 route add default gw 192.168.0.1 veth1

便 ping 一下就让。

# ip netns exec net1 ping 10.153.*.* -c 2PING 10.153.*.* (10.153.*.*) 56(84) bytes of data.源泉- 10.153.*.* ping statistics 源泉-2 packets transmitted, 0 received, 100% packet loss, time 999ms

额好吧,基本上通达。上亦会氨基酸路大哥我们把氨基酸路器从 veth 应该送至了 bridge 这个网桥上。年中网桥还能够 bridge 发来到 eth0 端口上。所以我们得关上下面这两个发来牵涉到的系统设计

# sysctl net.ipv4.conf.all.forwarding=1# iptables -P FORWARD ACCEPT

不过这个时候,还发挥作用一个解决办法。那就是结构上的微电脑并不一定相识 192.168.0.* 这个物理层的 ip。它们密切关联都是通过 10.153.*.* 来来进行通讯的。蓝图下我们指导工作中都面的电脑上并未外网 IP 的时候是如何但会上网的呢?结构上的在线只相识外网 IP。没错,那就是我们上亦会却说的 NAT 电子技术。

我们这次的消费是充分利用核心各种类型在线到访外网,所以能够适用的是 SNAT。它将 namespace 催促中都面的 IP(192.168.0.2)用上结构上在线相识的 10.153.*.*,进而达到但会到访结构上在线的效果。

# iptables -t nat -A POSTROUTING -s 192.168.0.0/24 ! -o br0 -j MASQUERADE

来便 ping 一下就让,欧耶,通了!

# ip netns exec net1 ping 10.153.*.*PING 10.153.*.* (10.153.*.*) 56(84) bytes of data.64 bytes from 10.153.*.*: icmp_seq=1 ttl=57 time=1.70 ms64 bytes from 10.153.*.*: icmp_seq=2 ttl=57 time=1.68 ms

这时候我们可以开启 tcpdump 不放机器箱核对一下,在 bridge 上不放到的机器箱我们能看不到还是原始的源 IP 和 借以 IP。

便到 eth0 上核对的话,源 IP 仍未被代替可和外网通讯的 eth0 上的 IP 了。

至此,罐就可以通过宿主装置的端口来到访结构上在线上的能源了。我们来归纳一下这个收发现实生活。

3. 开放罐适配器

我们便考虑另外一个消费,那就是把在这个名称紧致内的免费提专供给结构上在线来适用。

和上亦会的解决办法一样,我们的各种类型在线生稳定状态系统中都面 192.168.0.2 这个 IP 外界是不相识它的。只有这个宿主装置告诉它是谁。所以我们都只还能够 NAT 基本功能。

这次我们是要充分利用结构上在线到访核心位址,所以能够的是 DNAT 系统设计。DNAT 和 SNAT 系统设计中都面有一个不一样的地方就是能够清楚所选定罐中都面的适配器在宿主装置上是近似于哪个。比如在 docker 的适用中都面,是通过 -p 来所选定适配器的近似于关联。

# docker run -p 8000:80 ...

我们通过如下这个命令来系统设计 DNAT 比赛规则

# iptables -t nat -A PREROUTING ! -i br0 -p tcp -m tcp 源泉dport 8088 -j DNAT 源泉to-destination 192.168.0.2:80

这中都暗示的是宿主装置在氨基酸路之前推论一下如果流量不是来自 br0,并且是到访 tcp 的 8088 的话,那就发来到 192.168.0.2:80 。

在 net1 生稳定状态系统中都面叫停一个 Server

# ip netns exec net1 nc -lp 80

结构上所选一个ip,比如 10.143.*.*, telnet 连一下 10.162.*.* 8088 就让,通了!

# telnet 10.162.*.* 8088Trying 10.162.*.*...Connected to 10.162.*.*.Escape character is '^]'.

开启不放机器箱, # tcpdump -i eth0 host 10.143.*.*。可见在催促的时候,借以是宿主装置的 IP 的适配器。

但氨基酸路器到宿主装置协议缓冲区以后炮弹都面了我们系统设计的 DNAT 比赛规则,宿主装置把它发来到了 br0 上。在 bridge 上由于并未那么多的在线流量机器箱,所以无需处理现实生活实际上不放机器箱就行,# tcpdump -i br0。

在 br0 上不放到的借以 IP 和适配器是仍未去除过的了。

bridge 当然告诉 192.168.0.2 是 veth 1。于是,在 veth1 上窃听 80 的免费就能发来来自外界的催促了!我们来归纳一下这个转给现实生活:

3. 归纳

现在借助于版界仍未有很多公司都迁移到罐上了。我们的开发新写到借助于来的编译器大均值是要开始运行在罐上的。因此深刻备注达借助于来罐在线的指导工作数学模型比较的重要。这有这样未来遇到解决办法的时候才告诉该如何骗执行。

本文开头我们起再行恰当介绍了 veth、bridge、namespace、氨基酸路、iptables 等一门。Veth 充分利用相连,bridge 充分利用发来,namespace 充分利用隔离,氨基酸路备注遏制收发时的通讯设备可所选择,iptables 充分利用 nat 等基本功能。

接着基于以上一门,我们采用纯手工的方式搭建了一个各种类型在线生稳定状态系统。

这个各种类型在线可以到访外网能源,也可以提专供适配器免费专供外网来调用。这就是 Docker 罐在线指导工作的基本数学模型。

整个实验者我打机器箱写到如此一来一个 Makefile,放到了这中都:

最终,我们便扩展一下。那时候我们提问的解决办法是 Docker 在线通讯的解决办法。Docker 罐通过适配器映射的方式提专供实质上免费。结构上微电脑到访罐免费的时候,基本上能够通过罐的宿主装置 IP 来到访。

在 Kubernets 中都面,对跨主在线通讯有很高的承诺,要相同宿主装置密切关联的罐可以实际上互联。所以 Kubernets 的在线模型也更是为多样。

- EOF -

推荐阅读 浏览篇名可跳转

1、Docker 多之前构建最佳倡导

2、5分钟迅速相识到Docker的底层数学模型

3、当Docker遇到Intellij IDEA,便次解放了劳动力~

看完本文有进帐?请发来透过给更是多人

关注「ImportNew」,大幅提高Java战技

点赞和在看就是远超过的支持者❤️

重庆男科医院哪里比较好
发生腱鞘炎是什么症状
上海皮肤病医院哪家治疗最好
治疗癫痫
动脉硬化
前列腺癌
咽喉肿
中医养生

上一篇: 全民话冬奥!#我是冬奥感官官#冰雪季燃情来袭

下一篇: 短片《不间断的别离》被指抄袭,包贝尔否认:都有完整创作记录

友情链接