深入浅出Docker

深入浅出Docker

—–第5章 Docker引擎—–

5.1 Docker引擎——简介

至本书撰写时,Docker引擎由如下主要的组件构成:Docker客户 端(Docker Client)、Docker守护进程(Docker daemon)、 containerd以及runc。它们共同负责容器的创建和运行。

image-20231124103416026

5.2 Docker引擎——详解

初始:

Docker引擎由两个核心组件构成:LXC和 Docker daemon。

  • Docker daemon是单一的二进制文件,包含诸如Docker客户端、 Docker API、容器运行时、镜像构建等。
  • LXC提供了对诸如命名空间(Namespace)和控制组(CGroup)等 基础工具的操作能力,它们是基于Linux内核的容器虚拟化技术。

拆分后:

image-20231124103625010

—— 第7章 Docker容器 —–

7.2 Docker容器——详解

7.2.1 容器vs虚拟机

  • 什么是 Hypervisor?

    Hypervisor是一种系统软件,它充当计算机硬件和 虚拟机 之间的中介,负责有效地分配和利用由各个虚拟机使用的硬件资源,这些虚拟机在物理主机上单独工作,因此,Hypervisor也称为虚拟机管理器。

在虚拟机模型中,首先要开启物理机并启动Hypervisor引导程序 (本书跳过了BIOS和Bootloader代码等)。一旦Hypervisor启动,就 会占有机器上的全部物理资源,如CPU、RAM、存储和NIC。Hypervisor 接下来就会将这些物理资源划分为虚拟资源,并且看起来与真实物理 资源完全一致。然后Hypervisor会将这些资源打包进一个叫作虚拟机 (VM)的软件结构当中。这样用户就可以使用这些虚拟机,并在其中 安装操作系统和应用。前面提到需要在物理机上运行4个应用,所以在 Hypervisor之上需要创建4个虚拟机并安装4个操作系统,然后安装4个 应用。当操作完成后,结构如图7.2所示

image-20231124102539497

与 虚拟机模型相同,OS也占用了全部硬件资源。在OS层之上,需要安装 容器引擎(如Docker)。容器引擎可以获取系统资源 ,比如进程 树、文件系统以及网络栈,接着将资源分割为安全的互相隔离的资源 结构,称之为容器每个容器看起来就像一个真实的操作系统,在其 内部可以运行应用。按照前面的假设,需要在物理机上运行4个应用。 因此,需要划分出4个容器并在每个容器中运行一个应用,如图7.3所 示

image-20231124102721671

​ 图7.3 划分4个容器

总结:从更高层面上来讲,

  • Hypervisor是硬件虚拟化(Hardware Virtualization) ——Hypervisor将硬件物理资源划分为虚拟资 源;另外,
  • 容器是操作系统虚拟化(OS Virtualization) ——容器 将系统资源划分为虚拟资源。

7.3 容器——命令

  • docker container run 是启动新容器的命令。该命令的最简 形式接收镜像和命令作为参数。镜像用于创建容器,而命令则是 希望容器运行的应用。docker container run -it ubuntu /bin/bash 命令会在前台启动一个Ubuntu容器,并运 行Bash Shell。
  • Ctrl-PQ 会断开Shell和容器终端之间的链接,并在退出后保持 容器在后台处于运行(UP )状态。
  • docker container ls 用于列出所有在运行(UP)状态的容 器。如果使用-a 标记,还可以看到处于停止(Exited)状态的 容器。
  • docker container exec 允许用户在运行状态的容器中,启 动一个新进程。该命令在将Docker主机Shell连接到一个运行中容 器终端时非常有用。docker container exec -it bash 命令会在容 器内部启动一个Bash Shell进程,并连接到该Shell。为了使该命 令生效,用于创建容器的镜像必须包含Bash Shell。
  • docker container stop 命令会停止运行中的容器,并将状 态置为Exited(0) 。该命令通过发送SIGTERM信号给容器内PID 为1的进程达到目的。如果进程没有在10s之内得到清理并停止运 行,那么会接着发送SIGKILL信号来强制停止该容器。docker container stop 可以接收容器ID以及容器名称作为参数。
  • docker container start 会重启处于停止(Exited)状态 的容器。可以在docker container start 命令中指定容器 的名称或者ID。
  • docker container rm 会删除停止运行的容器。可以通过容 器名称或者ID来指定要删除的容器。推荐首先使用docker container stop 命令停止容器,然后使用docker container rm 来完成删除。
  • docker container inspect 命令会显示容器的配置细节和 运行时信息。该命令接收容器名称和容器ID作为主要参数。

—— 第10章 Docker Swarm —–

10.3 Docker Swarm——命令

  • docker swarm init 命令用户创建一个新的Swarm。执行该命 令的节点会成为第一个管理节点,并且会切换到Swarm模式。
  • docker swarm join-token 命令用于查询加入管理节点和工 作节点到现有Swarm时所使用的命令和Token。要获取新增管理节 点的命令,请执行docker swarm join-token manager 命 令;要获取新增工作节点的命令,请执行docker swarm join-token worker 命令。
  • docker node ls 命令用于列出Swarm中的所有节点及相关信 息,包括哪些是管理节点、哪个是主管理节点。
  • docker service create 命令用于创建一个新服务。
  • docker service ls 命令用于列出Swarm中运行的服务,以及 诸如服务状态、服务副本等基本信息。
  • docker service ps 命令会给出更多关于某个 服务副本的信息。 d

—— 第11章 Docker 的网络 ——

11.2 Docker网络——详解

11.2.1 基础理论

1、CNM

设计规范文档

抽象来讲,CNM定义了3个基本要素:沙盒(Sandbox)、终端(Endpoint)和网络(Network)。

  • 沙盒 : 是一个独立的网络栈。其中包括以太网接口、端口、路由表以及DNS配置。
  • 终端 :就是虚拟网络接口。就像普通网络接口一样,终端主要职
    责是负责创建连接。在CNM中,终端负责将沙盒连接到网络。
  • 网络 : 是802.1d网桥(类似大家熟知的交换机)的软件实现。因
    此,网络就是需要交互的终端的集合,并且终端之间相互独立。

image-20231124092156136

image-20231124092209005

image-20231124092220503

2、Libnetwork

CNM 的标准实现

3、驱动

  • 单机桥接网络 – 桥接网络
  • 覆盖网络 — overlay 网络,
  • Mac Vlan 驱动 — MAC 与 VLAN ,让容器拥有MAC,能够在同一个 VLAN 上通信

image-20231124092554945

11.2.2 单机桥接网络

最简单的Docker网络就是单机桥接网络。

从名称中可以看到两点。

  • 单机 意味着该网络只能在单个Docker主机上运行,并且只能与 所在Docker主机上的容器进行连接。
  • 桥接 意味着这是802.1.d桥接的一种实现(二层交换机)

image-20231124093522261

  • Docker默认“bridge”网络和Linux内核中的“docker0”网桥之 间的关系如图11.7所示。

image-20231124100004864

创建桥接网络

接下来使用docker network create 命令创建新的单机桥接 网络,名为“localnet”。

1
2
3
4
//Linux
$ docker network create -d bridge localnet
//Windows
> docker network create -d nat localnet

容器与桥接网络

如果在相同网络(local net)中继续接入新的容器,那么在新接入容器中是可 以通过“c1”的容器名称来ping通的。这是因为新容器都注册到了指 定的Docker DNS服务,所以相同网络中的容器可以解析其他容器的名 称。

image-20231124095848975

(1)创建名为“c2”的容器,并接入“c1”所在的localnet 网络。

1
2
3
4
//Linux
$ docker container run -it --name c2 \
--network localnet \
alpine sh

(2)在“c2”容器中,通过“c1”容器名称执行ping 命令。

容器间通信:

到目前为止,本书提到的桥接网络中的容器只能与位于相同网络
中的容器进行通信。但是,可以使用端口映射(Port Mapping)来绕
开这个限制。
端口映射允许将某个容器端口映射到Docker主机端口上。对于配
置中指定的Docker主机端口,任何发送到该端口的流量,都会被转发
到容器。图11.11中展示了具体流量动向

image-20231124093134152

(1)运行一个新的Web服务容器,并将容器80端口映射到Docker 主机的5000端口。

1
2
3
4
$ docker container run -d --name web \
--network localnet \
--publish 5000:80 \
nginx

(2)确认端口映射。

1
2
$ docker port web
80/tcp -> 0.0.0.0:5000

这表示容器80端口已经映射到Docker主机所有接口上的5000端 口。

(3)通过Web浏览器访问Docker主机5000端口,验证配置是否生 效,如图11.12所示。为了完成测试,读者需要知道Docker主机的IP地 址或者DNS名称。如果读者使用Windows版Docker或者Mac版Docker,可 以使用localhost 或者127.0.0.1 。

11.2.3 多机覆盖网络

Docker为覆盖网络提供了本地驱动。这使得创建覆盖网络非常简 单,只需要在docker network create 命令中添加–d overlay 参数

(overlay 覆盖物 ) 覆盖网络

11.2.4 接入现有网络 - MAC VLAN驱动

下面的命令会创建一个名为macvlan100 的Macvlan网络,该网 络会连接到VLAN 100。

该命令会创建macvlan100 网络以及eth0.100 子接口。当前 配置如图11.16所示。

1
2
3
4
5
6
$ docker network create -d macvlan \
--subnet=10.0.0.0/24 \
--ip-range=10.0.00/25 \
--gateway=10.0.0.1 \
-o parent=eth0.100 \
macvlan100

。但是切记,下层网络(VLAN 100 ) 对Macvlan的魔法毫不知情,只能看到容器的MAC和IP地址。在该基础 注: 之上,mactainer1 容器可以ping通任何加入VLAN 100的系统,并进 行通信。

image-20231124094000691

11.2.5 服务发现

作为核心网络架构,Libnetwork还提供了一些重要的网络服务。

服务发现(Service Discovery) 允许容器和Swarm服务通过 名称互相定位。唯一的要求就是需要处于同一个网络当中。

其底层实现是利用了Docker内置的DNS服务器,为每个容器提供 DNS解析功能。图11.19展示了容器“c1”通过名称ping容器“c2”的 过程。Swarm服务原理相同。

image-20231124094503008

步骤

  • (1)ping c2 命令调用本地DNS解析器,尝试将“c2”解析为 具体IP地址。每个Docker容器都有本地DNS解析器。
  • (2)如果本地解析器在本地缓存中没有找到“c2”对应的IP地 址,本地解析器会向Docker DNS服务器发起一个递归查询。本地服务 解析器是预先配置好并知道Docker DNS服务器细节的。
  • (3)Docker DNS服务器记录了全部容器名称和IP地址的映射关 系,其中容器名称是容器在创建时通过–name 或者–net-alias 参数设置的。这意味着Docker DNS服务器知道容器“c2”的IP地址。
  • (4)DNS服务返回“c2”对应的IP地址到“c1”本地DNS解析器。 之所以会这样是因为两个容器位于相同的网络当中,如果所处网络不 同则该命令不可行。
  • (5)ping命令被发往“c2”对应的IP地址。

11.2.6 Ingress网络

ingress n. 进口 / 准许进入 / 进入权 / 入境

image-20231124094754901

完整格式如–publish published=5000,target=80,mode=host 。该方式采用逗号分 隔多个参数,并且逗号前后不允许有空格。具体选项说明如下。

  • published=5000 表示服务通过端口5000提供外部服务。
  • target=80 表示发送到published端口5000的请求,会映射到服 务副本的80端口之上。
  • mode=host 表示只有外部请求发送到运行了服务副本的节点才 可以访问该服务。

11.3 Docker网络——命令

Docker网络有自己的子命令,主要包括以下几种。

  • docker network ls 用于列出运行在本地Docker主机上的全 部网络。
  • docker network create 创建新的Docker网络。默认情况 下,在Windows上会采用NAT 驱动,在Linux上会采用Bridge 驱 动。读者可以使用-d 参数指定驱动(网络类型)。
  • docker network create -d overlay overnet 会创建一个新的名 为overnet的覆盖网络,其采用的驱动为Docker Overlay 。
  • docker network inspect 提供Docker网络的详细配置信 息。 docker network prune 删除Docker主机上全部未使用的网 络。
  • docker network rm 删除Docker主机上指定网络。

11.4 本章小结

  • 容器网络模型(CNM)是Docker网络架构的主要设计文档,它定义 了Docker网络中用到的3个主要结构——沙盒、终端以及网络。
  • Libnetwork是开源库,采用Go编写,实现了CNM。Docker使用了该 库,并且Docker网络架构的核心代码都在该库当中。Libnetwork同时 还提供了Docker网络控制层和管理层的功能。
  • 驱动 通过实现特定网络类型的方式扩展了Docker网络栈 (Libnetwork),例如桥接网络和覆盖网络。Docker内置了几种网络 驱动,同时也支持第三方驱动。
  • 单机桥接网络是基本的Docker网络类型,对于本地开发和小型应 用来说也十分适用。单机桥接网络不可扩展,并且对外发布服务依赖 于端口映射。Linux Docker使用内置的Bridge 驱动实现单机桥接网 络,而Windows Docker使用内置的NAT 驱动来实现。
  • 覆盖网络是当下流行的方式,并且是一种出色的多机容器网络方 案。第12章会深入介绍覆盖网络。
  • Macvlan 驱动(在Windows中是Transparent )允许容器接入 现存物理网络以及VLAN。通过赋予容器MAC和IP地址的方式,让容器成 为网络中的“一等公民”。不过,该驱动需要主机的NIC支持混杂模 式,这意味着该驱动在公有云上无法使用。
  • Docker使用Libnetwork实现了基础服务发现功能,同时还实现了 服务网格,支持对入站流量实现容器级别负载均衡。

—— 第12章 Docker覆盖网络 ——

12.0 什么是覆盖网络?

覆盖网络(Overlay Network)是一种在底层网络之上构建的网络结构。它通过在现有的底层网络之上添加一层逻辑结构,使得网络节点能够通过这个逻辑结构进行通信和交互。

覆盖网络通常由一组节点组成,这些节点可以是物理设备、虚拟机、容器或其他计算机系统。这些节点通过在底层网络上建立逻辑连接,形成一个覆盖网络。

覆盖网络的主要特点包括:

  1. 独立性:覆盖网络是在底层网络之上构建的,因此它可以独立于底层网络的拓扑结构和路由协议。这使得覆盖网络可以根据特定的需求和应用场景进行设计和优化。
  2. 灵活性:覆盖网络可以根据需要进行动态调整和扩展。节点可以加入或离开覆盖网络,逻辑连接可以建立或断开,从而实现网络的灵活性和可扩展性。
  3. 功能增强:覆盖网络可以提供一些额外的功能和服务,如数据传输、路由、安全性和负载均衡等。通过在底层网络之上添加逻辑结构,覆盖网络可以实现更高级别的网络功能。

覆盖网络在许多领域中有广泛的应用,例如点对点网络、内容分发网络(CDN)、虚拟专用网络(VPN)和区块链等。它可以提供更灵活、可扩展和功能丰富的网络解决方案。

理解

覆盖网络 就是 在二层网络通信的基础之上(通过IP 不断寻找路由、交换机的,最终到达目的地),对二层的物理传输 进行了一层逻辑封装(类似于协议,借助二层网络传输 实现、简化 逻辑传输)。

离谱,居然还有网络工程师不懂什么是Overlay网络? - 知乎 (zhihu.com)

伴随着网络技术的发展,数据中心的二层组网结构早已出现了阶段性的架构变化。

数据中心网络分为了Underlay和Overlay两个部分,网络进入了Overlay虚拟化阶段。

img

很多小友希望能多输出一些新技术,这不,今天就给你展开说说。

Overlay网络是怎么形成的?与Underlay的区别又在哪?试图解决了什么问题?

今日文章阅读福利:《 Overlay技术白皮书 》

img

关于Overlay技术,你需要了解的还有很多,想学习Overlay技术是怎样实现的,研究典型应用,这份实打实的技术白皮书,收藏必看。

私信我,发送暗号“Overlay”,限量获取资源。

01 为什么需要Overlay网络?

Overlay网络和Underlay网络是一组相对概念,Overlay网络是建立在Underlay网络上的逻辑网络。

而为什么需要建立Overlay网络,就要从底层的Underlay网络的概念以及局限讲起。

01 这得先说回到Underlay网络

Underlay网络正如其名,是Overlay网络的底层物理基础。

如下图所示,Underlay网络可以是由多个类型设备互联而成的物理网络,负责网络之间的数据包传输。

img

在Underlay网络中,互联的设备可以是各类型交换机、路由器、负载均衡设备、防火墙等,但网络的各个设备之间必须通过路由协议来确保之间IP的连通性。

Underlay网络可以是二层也可以是三层网络。

其中二层网络通常应用于以太网,通过VLAN进行划分。

三层网络的典型应用就是互联网,其在同一个自治域使用OSPF、IS-IS等协议进行路由控制,在各个自治域之间则采用BGP等协议进行路由传递与互联。

随着技术的进步,也出现了使用MPLS这种介于二三层的WAN技术搭建的Un derlay网络。

然而传统的网络设备对数据包的转发都基于硬件,其构建而成的Underlay网络也产生了如下的问题:

  • 由于硬件根据目的IP地址进行数据包的转发,所以传输的路径依赖十分严重。
  • 新增或变更业务需要对现有底层网络连接进行修改,重新配置耗时严重。
  • 互联网不能保证私密通信的安全要求。
  • 网络切片和网络分段实现复杂,无法做到网络资源的按需分配。
  • 多路径转发繁琐,无法融合多个底层网络来实现负载均衡。

Underlay网络存在着以上诸多限制,而Overlay带来了Underlay无法提供的灵活性。

02 为啥需要Overlay网络

为了摆脱Underlay网络的种种限制,现在多采用网络虚拟化技术在Underlay网络之上创建虚拟的Overlay网络。

img

在Overlay网络中,设备之间可以通过逻辑链路,按照需求完成互联形成Overlay拓扑。(实现原理:

相互连接的Overlay设备之间建立隧道,数据包准备传输出去时,设备为数据包添加新的IP头部和隧道头部,并且被屏蔽掉内层的IP头部,数据包根据新的IP头部进行转发。

当数据包传递到另一个设备后,外部的IP报头和隧道头将被丢弃,得到原始的数据包,在这个过程中Overlay网络并不感知Underlay网络。

Overlay网络有着各种网络协议和标准,包括VXLAN、NVGRE、SST、GRE、NVO3、EVPN等。

03 Overlay网络如何解决问题?

随着SDN技术的引入,加入了控制器的Overlay网络,有着如下的优点:

  • 流量传输不依赖特定线路。Overlay网络使用隧道技术,可以灵活选择不同的底层链路,使用多种方式保证流量的稳定传输。
  • Overlay网络可以按照需求建立不同的虚拟拓扑组网,无需对底层网络作出修改。
  • 通过加密手段可以解决保护私密流量在互联网上的通信。
  • 支持网络切片与网络分段。将不同的业务分割开来,可以实现网络资源的最优分配。
  • 支持多路径转发。在Overlay网络中,流量从源传输到目的可通过多条路径,从而实现负载分担,最大化利用线路的带宽。

02 Overlay网络是如何形成的?

Overlay是基于软件的,不依赖于传输,它就像物理网络之上的虚拟网络。

Overlay网络的一个典型例子是Internet VPN ,它在Internet上构建了一个虚拟的封闭网络。

通过使用IPsec等协议构建虚拟网络,使私有 IP 地址的通信成为可能。

此外,SDN和SD-WAN也采用了Overlay网络的概念。

但是,要在 SD-WAN 中构建Overlay,需要一个特殊 CPE,称为 SD-WAN 边缘设备。

img

用一个SD-WAN边缘设备建立GRE隧道的例子给你说明下。

相互连接的SD-WAN边缘设备之间建立隧道,数据包准备传输出去时,设备为数据包添加新的IP头部和隧道头部,

并将内部IP头与MPLS域隔离,MPLS转发基于外部IP头进行。

一旦数据包到达其目的地,SD-WAN 边缘设备将删除外部 IP 标头和隧道标头,得到的是原始 IP 数据包。

在整个过程中,Overlay网络感知不到Underlay网络。

img

同样的过程也可以用于Internet Underlay,但需要使用IPSec进行加密。

03 关于Overlay网络的应用说2个具体案例

Overlay网络在SD-WAN、数据中心两大解决方案中被广泛应用。

但由于其底层Underlay网络的架构也不尽相同,使得Overlay网络的拓扑存在不同的形式。

01 数据中心的Overlay网络

随着数据中心架构演进,现在数据中心多采用Spine-Leaf架构构建Underlay网络。

通过VXLAN技术构建互联的Overlay网络,业务报文运行在VXLAN Overlay网络上,与物理承载网络解耦。

img

Leaf与Spine全连接,等价多路径提高了网络的可用性。

Leaf节点作为网络功能接入节点,提供Underlay网络中各种网络设备接入VXLAN网络功能。

同时也作为Overlay网络的边缘设备承担VTEP(VXLAN Tunnel EndPoint)的角色。

Spine节点即骨干节点,是数据中心网络的核心节点,提供高速IP转发功能,通过高速接口连接各个功能Leaf节点。

02 SD-WAN中的Overlay网络

SD-WAN的Underlay网络基于广域网,通过混合链路的方式达成总部站点、分支站点、云网站点之间的互联。

通过搭建Overlay网络的逻辑拓扑,完成不同场景下的互联需求。

img

SD-WAN的Overlay网络(以Hub-Spoke为例)

SD-WAN的网络主要由CPE设备构成,其中CPE又分为Edge和GW两种类型。

  • Edge:是SD-WAN站点的出口设备。
  • GW:是联接SD-WAN站点和其他网络(如传统VPN)的网关设备。

根据企业网络规模、中心站点数量、站点间互访需求可以搭建出多个不同类型的Overlay网络。

Hub-spoke:

适用于企业拥有1~2个数据中心,业务主要在总部和数据中心,分支通过WAN集中访问部署在总部或者数据中心的业务。

分支之间无或者有少量的互访需求,分支之间通过总部或者数据中心绕行。

Full-mesh:

适用于站点规模不多的小企业,或者在分支之间需要进行协同工作的大企业中部署。

大企业的协同业务,如VoIP和视频会议等高价值的应用,对于网络丢包、时延和抖动等网络性能具有很高的要求,因此这类业务更适用于分支站点之间直接进行互访。

分层组网:

适应于网络站点规模庞大或者站点分散分布在多个国家或地区的大型跨国企业和大企业,网络结构清晰,网络可扩展性好。

多Hub组网:

适用于有多个数据中心,每个数据中心均部署业务服务器为分支提供业务服务的企业。

POP组网:

当运营商/MSP面向企业提供SD-WAN网络接入服务时,企业一时间不能将全部站点改造为SD-WAN站点;

网络中同时存在传统分支站点和SD-WAN站点这两类站点,且这些站点间有流量互通的诉求。

一套IWG(Interworking Gateway,互通网关)组网能同时为多个企业租户提供SD-WAN站点和已有的传统MPLS VPN网络的站点连通服务。

04 Overlay网络 VS Underlay网络

Overlay网络和Underlay网络的区别如下所示:

img

05 Overlay 与 VPC

云计算中VPC的由来及浅析

简介

大家购买云主机,无论是国内的阿里云还是亚马逊、谷歌的云的主机,在购买创建主机过程中都会碰到一个概念:VPC。那VPC是什么,创建主机时为何要配置VPC?

VPC的全称是 Virtual Private Cloud,中文有的叫专有网络,有的叫私有网络,核心就是能让你购买的一台或多台机器(或其它资源),能划分到一个私网中,与其它用户隔离,也可以把自己的多台资源的机器隔离(如果你需要的话)。VPC是随着云计算而产生的一种技术,是为了解决传统网络在云环境中无法满足的功能、安全性、灵活性而生的。

VPC的由来

一般的网络,比如我们的家用网络,会在路由器中配置网络地址段,如常见的192.168..,或10...*。在有电脑或手机接入路由器时,路由器会给这些设备分配一个网段内的 IP 地址,这些设备均在这个网段(子网)中,我们家里的设备之间就可以互相通信,电脑可以看NAS中的照片,手机可以投屏到电视机。

如果在机房呢?服务器接在交换机下,交换机上面再接路由器。在同一个路由器中的服务器可以相互通信了。如果要隔离,如同一个路由器下不同用户的服务器要隔离,或同一用户不同业务的服务器要相互隔离,则可以给每个要隔离的服务器创建vlan,使同一个vlan中的服务器可以相互通信,而归属不同vlan的服务器之间相互隔离,无法通信。

而在云计算环境中呢?普通的vlan无法满足云计算的需求。

  • vlan有数量限制,只能创建4000个。
    而云计算的体量大,用户数远超4000个,并且部分用户只有一两台主机,数量限制更加捉襟见肘;
  • vlan配置复杂,不灵活。
  • 受限于物理网络,无法跨地理位置。如在A机房中的服务器和要B机房中的db服务器是同一个业务,需要分到同一个网络中,vlan也是不能办到的。

为此,云计算的领先厂商亚马逊在2010年首先使用了VPC的技术(当然当时名字不叫VPC)。现在的VPC基本都是基于 overlay 技术,在三层网络之上构建二层网络来实现的。

img

AWS的VPC

VPC能做什么

有了vpc之后,云厂商就能让我们最终用户的网络配置更加的灵活、安全、可扩展。每个用户可以根据业务和安全需求定义网络:

  • 选择私有网段、网段大小,业务大需要的主机多,可以配置大的网段;
  • 灵活实现租户间、单个租户不同的业务之间的网络隔离,并制定相关的安全策略;
  • 消除大二层的问题,即在局域网内,没有了ARP广播,隐性减少了网络故障。在经典网络中入网设备的 IP 是用来寻址的,而用了VPC后入网设备的 IP 仅仅是个逻辑上的标签了,具体的寻址由VPC核心层的Mapping Service来控制(不同厂商,这个地址对应服务的名字有所不同)。

VPC由是软件实现了,软件可以虚拟传统的路由器、交换机,最终抽象成上述提到的 Mapping Service 中的对应关系,未来入网设备通信时就可以查询到对应的目标或源设备。由软件定义网络,就是SDN。

定义一个VPC时,要确定VPC使用的私网网段和大小,这个在前期规划时要根据预估的未来入网的设备多少、需要的子网个数来确定;路由器下,会接虚拟交换机,虚拟交换机再接具体的入网设备,如ecs/ec2,负载均衡等。一个VPC有一个虚拟路由器,有1个或多个虚拟交换机。VPC中,可以定义安全局,定义组内的访问策略。

如果用户体量比较大,可以创建多个VPC,如子公司A、子公司B各创建一个VPC,而个别业务需要在两个VPC之间通信时,也可以使用一些技术,如VPC网关等(不同的云厂商名字不同),实现两个VPC的连接。同时,部分云厂商还允许用户将VPC与已有的网络连接,如自有的IDC,或通过IPSec拨号接入,实现了云计算的混合网络。

VPC使网络也转化成了一个云计算的服务,让我们实现与线下部署传统网络一样的功能,并且更加方便灵活,可以在线操作,这是对原来统计网络的云计算提供商使用的经典网络的一次重大升级,并且对其可以扩充,使网络的配置和混布更加的容易,实现企业复杂网络环境的需求。

下面是阿里云的 VPC 相关部分生态环境(来自阿里云官网文档):

img

VPC,是随着云计算的产生,在云计算环境中用SDN来解决网络问题的。由于云计算的发展,很多传统的模式已经无法适应,VPC 就是这种情况。

12.1 Docker覆盖网络——简介

在现实世界中,容器间通信的可靠性和安全性相当重要,即使容 器分属于不同网络中的不同主机。这也是覆盖网络大展拳脚的地方, 它允许读者创建扁平的、安全的二层网络来连接多个主机,容器可以 连接到覆盖网络并直接互相通信。

说明:

  • 目的:对于swarm集群的node1、node2 等多主机节点通信,提供了更加安全 等多种功能的 overlay 覆盖网络。

image-20231124102020847


深入浅出Docker
http://example.com/2023/07/30/云原生-部署/深入浅出Docker/
作者
where
发布于
2023年7月30日
许可协议