趣谈网络协议03

容器网络

1. 容器的定义和特性

云计算虚拟机解决的是基础医院层的弹性伸缩,容器解决的是基础资源层弹性伸缩带来的批量,快速部署问题。

容器,英文是container,有另外一个意思是集装箱,可以交付的集装箱两大特性,一是打包,二是标准。

2 容器如何对应用打包

  2.1 首先要有个封闭环境 把东西封装起来,能互不干扰,封闭技术主要用了2种,一种是namespace,命名空间技术,看起来隔离的技术,每个namespace下面看到的是不同的ip,用户空间,一种是cgroup技术,用起来隔离的技术,一台机器有很多cpu和内存,只能用其中的一部分,集装箱的标准就是镜像,将打包那一刻的状态保存下来, 将那一刻的状态保存成文件,无论何时,都能还原成那个状态。

3 namespace 网络命名空间 linux进程可以配置自己的路由规则,多个进程可能会有冲突,为了防止冲突,可以把不同的进程放到不同的命名空间下,可以独立配置网络,可以用namespace技术实现类似路由器的功能,先构建一个独立的网络空间,创建一个网卡,连接到网桥br0上,给网卡配置一个ip地址,这个地址是虚拟机网络的网关地址,为了访问外网,还需要另一个网卡连接到网桥br-ex上,这个网卡配置的ip要和物理外网网络在一个网段,可以在namespace下建立路由表,基于namespace的路由器实现完毕。

4 cgroup controll group,是linux提供的一种可以限制,隔离进程使用的资源机制。cgroup能控制的资源,包括多个子系统

  4.1 CPU子系统使用调度程序为进程控制CPU的访问,

  4.2 CPU set 如果是多核CPU,可以分配单独的CPU和内存

  4.3 memory 子系统设置进程内存的限制以及产生内存资源报告

  4.4 blkio子系统 设置限制每个块设备的输入输出限制

  4.5net_cls 这个子系统使用等级标识符来标记网络数据包,可允许流量控制程序tc识别从具体cgroup生成的数据包 cgroup提供了虚拟文件系统,作为进程分组管理和各子系统设置的用户接    口,使用cgroup,一般挂载在sys/fs/cgroup目录下, 配置TC,先根据cgroup配置路由规则,比如有2个用户,建立2个net_cls,有2个进程,进程id放在各自的net_cls文件,还有flowid,这样a进程发的包和b进程发的包,有各自的flowid,根据flowid做不同的处理。

5 容器网络如何融入物理网络

5.1 docker run运行容器,容器内有张网卡,容器外有张网卡连到网桥上,通过网桥实现互相访问,容器下可以创建veth pair的网卡,一边发包,另一边就能收到 5.2 docker网络如何访问外网 访问外网使用NAT模式,NAT模式分为SNAT模式和DNAT模式。容器内访问外部,需要SNAT模式。多个容器共享一个物理ip,
发送包的时候,会将私ip转换成物理ip,并记录到conntrack表,将连接记下来,服务端返回,会根据conntrack表,将不同的连接,找到不同的私ip,对应到不同的容器
如果容器内的应用,跟外部交互,用不同的端口,映射到容器的80端口,访问。Docker有2种方式,做端口的映射转换,一种是通过单独的进程docker-proxy的方式,
将进程10080转换成80端口,另一种是通过DNAT的方式,在-A PREROUTING阶段,添加一条规则。这样就实现容器和物理网络之间的互通

posted @ 2021-09-25 11:15  大雄的脑袋  阅读(65)  评论(0编辑  收藏  举报