了解网络命名空间

我们下馆子吃饭,在大厅有很多桌子,那么这些人共享一个"吃饭空间"。

如果我们去包间吃饭,每一个包间都是一个"吃饭空间",包间和包间,包间和大厅之间都是独立的,互不干扰的。

对于一个系统来说,这个系统里所有的应用不管是微信还是QQ,他们“都在大厅吃饭”,他们共享一个“吃饭空间”,我们所要说的网络空间就类似于这里的“吃饭空间”。
file
如果在这里如果跑两个web应用程序,比如先运行了nginx,再运行apache,因为他们是在同一个网络空间里的,所以apache是运行不起来的,因为会造成端口冲突,一山不能容二虎。

如果我们在宿主机里运行了三台虚拟机,宿主机的网络空间是“大厅”,每个虚拟机都是“包间”,他们有自己的独立网络空间,所以我们在宿主机上运行了nginx,在三台虚拟机上分别运行nginx或者apache也不会造成冲突,因为他们分别在自己的网络空间里。
file

对应的容器也是一样。
file

如果我们在宿主机里运行了三个容器,宿主机的网络空间是“大厅”,每个容器都是“包间”,他们有自己的独立网络空间,所以我们在宿主机上运行了nginx,在三台虚拟机上分别运行nginx或者apache也不会造成冲突,因为他们分别在自己的网络空间里。

如果我们把容器C1和C2的头都给它“剪掉”,如同把两个包间的门都给拆掉,那么这些容器也就共享了宿主机的网络空间了。假设在c1里运行了nginx的话,他占用的就是宿主机的端口80,那么C2或者宿主机就不能运行nginx或者apache了,因为他们共享一个网络空间,端口80已经被占用了,但是这并不影响C3上运行apache或者nginx。
file

对于一些C/S架构的应用来说,我们把客户端安装在k8s集群里以pod方式运行,服务器可能是在集群之外的某主机或者虚拟机上运行,如下图。
file
然后就会有人反映说,这些代理可以连接到服务器,但是服务器联系不到这些代理那么该怎么办?其实我们在创建这些代理用的pod时,就设置这些pod使用宿主机的网络空间即可,即在pod的.spec.下添加hostNetwork: true,这样访问服务器的的IP即可访问到这些pod了。

相关新闻

发表回复

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

                                                                                                                                    RHCE9学习指南连载,点击阅读