容器网络硬核技术内幕 (7) 大海航行靠舵手

2022-07-27 21:54:20 浏览数 (1)

让我们小结一下基于docker引擎的容器网络:

每个docker容器需要连接到网络上,才能对外提供服务,否则其存在没有任何意义。因此,默认在每个宿主机上,有一个docker0网桥,所有的容器默认连接到这个网桥,如下图所示:

如图,172.17.0.2这个容器运行的是ubuntu实例,而172.17.0.3这个容器运行的是nginx实例,二者可以通过docker0互通。

对于访问宿主机以外的网络,需要通过NAT:

当然,对外访问宿主机内部的容器,也需要经过NAT。

对于两台宿主机之间互访的情况,可以利用swarm实现基于VXLAN隧道的互通:

有了这些基础的容器网络机制,我们是可以构建一个基于容器的对外服务系统的。

然而,仅仅有docker引擎,还不够……

-----------------------分割线-----------------------

我们知道,正是中国的几亿劳动者,紧密团结起来,才打败了三座大山、联合国军、血吸虫病和新型冠状病毒。

我们也知道,在linux docker的体系中,创建容器、销毁容器、将容器连入网络、监控容器性能等操作,都需要手工进行。

如果单一容器无法满足性能或功能的需求,也无法通过自动化的手段自动扩容,或将多个不同功能的容器进行耦合关联。

只有让容器团结起来,才能发挥更大的作用!

DOCKERS OF THE WORLD, UNITE!

一个幽灵,云原生的幽灵,在生产力最发达的中美互联网领域悄悄游荡——

工程师们创立了容器编排平台:Kubernetes。

Kubernetes的字面意义是“舵手”。

Kubernetes可以自动化地调度容器资源,进行容器的创建、入网、扩容和销毁,结合Harbor镜像仓库、Istio API网关、Prometheus性能监控、Jenkins构建流水线等组件,能够实现从代码提交到自动部署的CI/CD(持续集成/持续开发),使得容器真正地驶入蓝海——

大海航行靠舵手!

“舵手” kubernetes 的架构如下:

在如此复杂的架构中,目前我们只需要掌握:

  1. Kubernetes的容器资源分配单位是pod,一个pod中可以有多个容器,但对pod之外呈现为一个整体(一个IP地址);
  2. Kubernetes的容器运行载体是node,一个node可以运行多个Pod。node有自己的操作系统(一般为Linux)。

我们可以将node类比为虚拟机世界中的宿主机,pod类比为虚拟机世界中的VM。

下面的讨论均以此为依据。

敬请期待下期——

0 人点赞