笔记 -- Kubernetes网络简介(一)

笔记 -- Kubernetes网络简介(一)

  1. The Kubernetes Bible for Beginners & Developers
  2. How Does The Kubernetes Networking Work? : Part 2
  3. How Does The Kubernetes Networking Work? : Part 3

单个pod内部

Pod是Kubernetes应用的基本组成单位,一个pod包含了一个或多个容器,这些容器在一个host中并且共用一套network stack,这意味着它们可以在localhost中彼此访问。它们也可以共享一些其他资源,比如volume。
在这里插入图片描述
例如,考虑上图中的Kubernetes Pod 1,假设容器1是nginx并且在端口80监听,容器2是scrapyd。那么容器2可以通过http://localhost:80访问容器1。这是如何实现的呢?让我们来通过在本地启动Docker容器的典型情况来解释。
在这里插入图片描述
上图中,物理网络接口为eth0,和桥接网络接口docker0以及虚拟网络接口veth0连接。请注意docker0和veth0是出于同一个网络中的(172.17.0.0/24),它们各自的IP分别是172.17.0.1和172.17.0.2。在启动容器1时,其中的进程只能看到vth0,但是这些进程可以通过docker0和eth0与外界联通。下面我们启动第二个容器。
在这里插入图片描述
假设第二个容器被分配了一个新的虚拟网络接口,标记为veth1,分配IP为172.17.0.3。逻辑上Veth1与docker0和veth0共享一个局域网。两个容器可以相互发现彼此的IP,并且通过docker0相互访问。

但是这种结构是有问题的,并没有达到容器间能在localhost上相互访问的目的。但幸运的是docker可以在启动容器时,指定容器使用一个已经存在的网络接口,如下图所示。

容器1和容器2共享veth0网络接口,这意味着:1. 两个容器都可以从外界通过172.17.0.2访问,并且两个容器可以相互在localhost上访问。2. 两个容器不能同时使用同一个端口,这和在同一主机上各个进程不能使用同一端口是相似的,但又有区别:因为这里进程是在各自分别的容器中的。
在这里插入图片描述
kubernetes用自己的方式实现了上图中的模式。kubernetes为每一个pod创建了一个特殊的容器。这个容器只有一个任务:为其他容器提供网络接口。如果你ssh到一个启动了容器并正在工作的Kubernetes集群节点中,你会看到至少有一个容器是用pause命令创建的,这个命令让该容器睡眠,直到Kubernetes向其发送SIGTERM信号为止。

这个pause容器非常重要,它为同一个pod中的其他容器提供了网络接口。如下图所示。
在这里插入图片描述

多个pod的网络

在下一篇文章中将介绍service,这对理解pod网络更加深入,但是现在先来简单介绍一下pod网络。Kubernetes的设计目标就是pod间可以相互访问。

一个Kubernetes集群包含了一个或多个节点,每个节点是一个主机,每个节点包含了多种Kubernetes系统的组成部分。这些节点连接到同一个网络中,不同节点间的相互访问就依赖该网络完成。下图是一个简化后的,只包含两个节点的集群。
在这里插入图片描述
上图中私有网络是10.100.0.0/24,路由器地址是10.100.0.1,两个主机地址分别是10.100.0.2和10.100.0.3。主机内部的通讯通过eth0完成。但是pod的虚拟网络veth0是在桥接网络docker0下的,如下图所示。
在这里插入图片描述
左侧:dokcer0是桥接在eth0上的,地址为172.17.0.1,而虚拟网络接口veth0是连接在docker0上的,并且地址是172.17.0.2。任何到达10.100.0.2且目的地为172.17.0.2的包都会被路由到docker0,然后再到veth0。下面让我来看右边的主机,它的IP地址是10.100.0.3,并且连接在同一个路由10.100.0.1上,内部的桥接网络是docker0,地址是172.17.0.1。这样就产生了一个问题:这个桥接网络和左边的桥接网络一样,都是172.17.0.1。事实上,节点并不知道彼此内部分配的桥接网络地址是多少。
在这里插入图片描述
Kubernetes的解决方案分为两步:1.每一个节点上的桥接网络分配不同的IP段,这样在每个节点内部,各个容器在桥接网络的IP段内分配IP,如左侧分配10.0.1.0/24,右侧分配10.0.2.0/24;2. 在路由器内部规定路由规则,将每个桥接网络的IP段与相应的物理网络接口地址对应,例如上图中第一行是左侧节点的路由规则,任何目的地是10.0.1.0/24的包下一站应该传到10.100.0.2。
这个由虚拟网络接口(上图中的veth)、桥接(上图中的cbr, custom bridge),和路由规则构成的整体就称为“overlay network”,在Kubernetes中又称为“pod network”。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值