首页
登录 | 注册

3大模型,搞定Kubernetes网络

如今,许多Web应用程序由多个容器组成,利用来自不同位置的不同服务。 Kubernetes有效地简化了实现多容器应用程序的过程,使用Kubernetes,可以在容器编排工具上配置单个应用程序中组合不同容器的功能,今天主要分享Kubernetes中的网络模型。


一、Kubernetes的网络条件

Kubernetes为Pods的网络通信设定了一些条件和要求:

1、Pod都能够彼此通信,而无需使用网络地址转换(NAT)。

2、节点是运行Kubernetes集群的机器。 这些可以是虚拟机或物理机,也可以是能够运行Kubernetes的任何其他机器。 这些节点还能够与所有Pod通信,而无需NAT。

3、每个Pod都会看到自己拥有与其他Pod认为具有的IP相同的IP。

二、Kubernetes的网络模型

为了利用Kubernetes,我们需要解决三个网络挑战:1)容器到容器的网络;2)Pod-to-Pod网络;3)Pod-to-Service网络。

1、容器到容器网络

我们通常认为虚拟机的网络通信由直接与之交互的单个以太网设备组成。 然而,情况的现实比这更微妙。


在Linux中,每个正在运行的进程都在网络命名空间内相互通信, 此命名空间为命名空间内包含的所有进程提供新的网络堆栈。 Linux的默认行为是将每个进程分配给根网络命名空间,并在此过程中提供对外部世界的访问。

Pod被建模为一组独立的Docker容器,所有这些容器共享一个网络命名空间。 给服务中的所有容器将具有相同的IP地址和端口空间,该空间由Pod分配的网络命名空间分配。 由于容器都位于同一名称空间内,因此它们可以通过local host相互通信。

2、Pod-to-Pod网络

Kubernetes中的每个Pod都有一个分配的IP地址,这个IP地址是其他Pod将看到的IP地址。 在了解Pod如何通过真实IP地址相互通信时,首先考虑两个位于同一物理机器上的Pod,从而共享一个节点。


就每个Pod而言,它存在于自己的以太网命名空间中。 然后,此命名空间需要与位于同一节点上的其他网络命名空间进行通信。 Linux提供了一种使用虚拟以太网设备(VED或“ veth pair ”)连接命名空间的机制。 VED包括一对虚拟接口,为了连接两个Pod名称空间,VED的一侧被分配给根网络名称空间, 然后将veth pair 的另一个成员分配给Pod的网络名称空间。

然后,VED就像一条虚拟电缆,将根网络命名空间连接到Pod的网络命名空间,并允许它们交换数据。

3、Pod-to-Service网络

Kubernetes中的Pod IP地址并不是固定的,每当应用程序按比例放大或缩小,或遇到错误并需要重新启动时,其IP地址将消失并需要重新分配。 IP地址的此更改在没有警告的情况下发生,为此,Kubernetes利用Service。


在Kubernetes中,Service管理一组Pod的当前状态,这为用户提供了跟踪IP地址和随时间变化的其他属性的方法。Service充当Pod之上的抽象层,为指定的Pod组分配单个虚拟IP地址。一旦这些Pod与该虚拟IP地址相关联,则寻址到该虚拟IP的任何流量将被发送到相应的Pod集合。可以随时更改链接到服务的Pod集,但Service的IP地址将保持不变。

因此,Kubernetes让管理多容器应用程序变得前所未有的简单。另外,基于Kubernetes的容器云平台产品——梯度智能云已发布,想要获取产品试用,欢迎联系。


相关文章

  • Kubernetes从Docker默认的网络模型中独立出来形成一套自己的网络模型.该网络模型的目标是:每一个pod都拥有一个扁平化共享网络命名空间的IP,通过该IP,pod就能够跨网络与其它物理机和容器进行通信.一个pod一个IP模型创建了 ...
  • 目前,容器存储是容器离不开的一个话题,对于无状态的Docker容器,容器重启时容器数据会自动清除,一些静态的数据我们可以通过配置文件或者在容器build时直接写死.但是对于数据库.日志文件等可以实时变化的数据,我们不能够通过这种方法存取,容 ...
  • 对比剖析Swarm Kubernetes Marathon编排引擎
    Docker Native Orchestration 基本结构 可用性 你只需要在其中的一个docker节点运行使用 docker swarm init命令创建一个集群,在您要添加任何其他节点,通过docker swarm join命令加 ...
  • 实现Kubernetes跨集群服务应用的高可用
    在Kubernetes 1.3版本,我们希望降低跨集群跨地区服务部署相关的管理和运营难度.本文介绍如何实现此目标. 我们正式开始.第一步是在谷歌的四个云平台地区通过GKE创建Kubernetes集群. 我们通过下面的命令创建集群: 验证创建 ...
  • Kubernetes代码解读-apiserver之list-watch
    list-watch的需求 上图是一个典型的Pod创建过程,在这个过程中,每次当kubectl创建了ReplicaSet对象后,controller-manager都是通过list-watch这种方式得到了最新的ReplicaSet对象,并 ...

2020 unjeep.com webmaster#unjeep.com
12 q. 0.013 s.
京ICP备10005923号