先堆资料,再整理逻辑

OSI模型

  • 物理层
  • 数据链路层
  • 网络层
  • 传输层
  • 会话层
  • 表示层
  • 应用层

Linux的namespace与cgroup

https://www.cnblogs.com/wjoyxt/p/9935098.html
Linux Namespace 是kernel 的一个功能,它可以隔离一系列系统的资源,比如PID(Process ID),User ID, Network等等。一般看到这里,很多人会想到一个命令chroot,就像chroot允许把当前目录变成根目录一样(被隔离开来的),Namesapce也可以在一些资源上,将进程隔离起来,这些资源包括进程树,网络接口,挂载点等等。

Namespace 是 Linux 内核用来隔离内核资源的方式。通过 namespace 可以让一些进程只能看到与自己相关的一部分资源,而另外一些进程也只能看到与它们自己相关的资源,这两拨进程根本就感觉不到对方的存在。具体的实现方式是把一个或多个进程的相关资源指定在同一个 namespace 中。

在这里插入图片描述

Cgroups(Control Groups) 是Linux内核提供的一种可以限制、记录、隔离进程组(process groups)所使用的物理资源(如:cpu,memory,IO等等)的机制。可以对一组进程及将来的子进程的资源的限制、控制和统计的能力,这些资源包括CPU,内存,存储,网络等。通过Cgroups,可以方便的限制某个进程的资源占用,并且可以实时的监控进程的监控和统计信息。最初由google的工程师提出,后来被整合进Linux内核。Cgroups也是LXC为实现虚拟化所使用的资源管理手段,可以说没有cgroups就没有LXC (Linux Container)。

在这里插入图片描述

Linux网络虚拟设备

https://www.cnblogs.com/bakari/p/10494773.html
https://www.dazhuanlan.com/2019/08/29/5d6795bc1c52f/

网络设备是使多台计算机互联互通的硬件。常见的物理网络设备有:集线器、交换机、网桥、路由器、网关、网卡(又称网络接口控制器 Network Interface Controller;网络适配器 Network adapter)。

对于 Linux 用户,想要使用网络功能,并不是直接操作硬件设备,而是需要操作一个 Linux 为我们抽象出来的设备,既通用的 Linux 网络设备来完成。以物理网卡为例,Linux 会为其生成一个网络设备实例,如 eth0,用户需要对 eth0 发出命令以配置或使用它。像 eth0 这样连接软件和网络硬件、抽象出来的网络设备称为网络接口。

veth

veth 从名字上来看是 Virtual ETHernet 的缩写,它的作用很简单,就是要把从一个 network namespace 发出的数据包转发到另一个 namespace。veth 设备是成对的,一个是 container 之中,另一个在 container 之外,即在真实机器上能看到的。

  • veth和其它的网络设备都一样,一端连接的是内核协议栈。
  • veth设备是成对出现的,另一端两个设备彼此相连
  • 一个设备收到协议栈的数据发送请求后,会将数据发送到另一个设备上去。
    在这里插入图片描述

bridge 虚拟网桥

同 tap/tun、veth-pair 一样,Bridge 也是一种虚拟网络设备,所以具备虚拟网络设备的所有特性,比如可以配置 IP、MAC 等。

除此之外,Bridge 还是一个交换机,具有交换机所有的功能。

对于普通的网络设备,就像一个管道,只有两端,数据从一端进,从另一端出。而 Bridge 有多个端口,数据可以从多个端口进,从多个端口出

Bridge 的这个特性让它可以接入其他的网络设备,比如物理设备、虚拟设备、VLAN 设备等。Bridge 通常充当主设备,其他设备为从设备,这样的效果就等同于物理交换机的端口连接了一根网线。比如下面这幅图通过 Bridge 连接两个 VM 的 tap 虚拟网卡和物理网卡 eth0。

在这里插入图片描述

VxLAN

在这里插入图片描述

docker

对docker而言,它得益于现代linux内核特性,如控件组(control group)、命名空间(namespace)技术,容器和宿主机之间的隔离更加彻底,容器有独立的网络的存储栈,还拥有自己的资源管理能力,使得同一台宿主机的多个容器可以友好地共存

在这里插入图片描述

Docker有什么特别之处呢?Docker在虚拟化的容器执行环境中增加了一个应用程序部署引擎。该引擎的目标就是提供一个轻量、快速的环境,能够运行开发者的程序,并方便高效地将程序从开发者的笔记本部署到测试环境,在部署到生产环境。

在这里插入图片描述

Docker容器网络的原始模型主要有三种:

  • brige(桥接):借助于虚拟网桥设备
  • Host(主机)
  • Container(容器)

在这里插入图片描述

closed container(封闭式容器):此类容器使用None网络,没有对外的网络接口,仅具有IO接口,通常用于不需要对外的后端作业处理场景

bridged container(桥接式容器):此类容器使用bridge模型的网络,对于每个网络接口,容器引擎会为每个容器创建一对虚拟网络设备,一个配置为容器的借口设备,另一个则在节点主机上接入虚拟网桥设备(默认为docker0)

jointed container(联盟式容器):共享使用某个已存在的容器的网络名称空间

Open container(开放式容器):使用host模型的网络,共享节点主机的的网络及接口

K8S网络模型需要解决的问题

我们需要解决四个不同的网络问题:

  • Docker容器和Docker容器之间的网络
  • Pod与Pod之间的网络
  • Pod与Service之间的网络
  • Internet与Service之间的网络

容器间网络

在这里插入图片描述

Pod间网络

在这里插入图片描述

https://blog.csdn.net/fly910905/article/details/103794791?utm_medium=distribute.pc_relevant.none-task-blog-OPENSEARCH-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-OPENSEARCH-1.nonecase

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐