
课程咨询: 400-996-5531
投诉建议: 400-111-8989
认真做教育 专心促就业
我们在前几期的文章中给大家简单介绍了程序员需要掌握的一些编程基础知识等内容,而本文我们就通过案例分析再来学习一下,Java编程容器基础技术分析。
容器的一大特点就是创造出一个相对隔离的环境。在Linux内核中,实现各种资源隔离功能的技术就叫**LinuxNamespace**,它可以隔离一系列的系统资源,比如PID(进程ID)、UID(用户ID)、Network等。
看到这里,你很容易就会想到开头讲的chroot系统调用。类似于chroot把当前目录变成被隔离出的根目录,使得当前目录无法访问到外部的内容,Namespace在基于chroot扩展升级的基础上,也可以分别将一些资源隔离起来,限制每个进程能够访问的资源。
Linux内核提供了7类Namespace,以下是不同Namespace的隔离资源和系统调用参数。
image
1、PIDNamespace:保障进程隔离,每个容器都以PID=1的init进程来启动。PIDNamespace使用了的参数CLONE_NEWPID。类似于单独的Linux系统一样,每个NameSpace都有自己的初始化进程,PID为1,作为所有进程的父进程,父进程拥有很多特权。其他进程的PID会依次递增,子NameSpace的进程映射到父NameSpace的进程上,父NameSpace可以拿到全部子NameSpace的状态,但是每个子NameSpace之间是互相隔离的。
2、UserNamespace:用于隔离容器中UID、GID以及根目录等。UserNamespace使用了CLONE_NEWUSER的参数,可配置映射宿主机和容器中的UID、GID。某一个UID的用户,虚拟化出来一个Namespace,在当前的Namespace下,用户是具有root权限的。但是,在宿主机上面,他还是那个用户,这样就解决了用户之间隔离的问题。
3、UTSNamespace:保障每个容器都有独立的主机名或域名。UTSNamespace使用了的参数CLONE_NEWUTS,用来隔离hostname和NISDomainname两个系统标识,在UTSNamespace里面,每个Namespace允许有自己的主机名,作用就是可以让不同namespace中的进程看到不同的主机名。
4、MountNamespace:保障每个容器都有独立的目录挂载路径。MountNamespace使用了的参数CLONE_NEWNS,用来隔离各个进程看到的挂载点视图,MountNamespace非常类似于我们前面提到的的chroot系统调用。
5、NETNamespace:保障每个容器有独立的网络栈、socket和网卡设备。NETNamespace使用了参数CLONE_NEWNET,隔离了和网络有关的资源,如网络设备、IP地址端口等。NETNamespace可以让每个容器拥有自己独立的(虚拟的)网络设备,而且容器内的应用可以绑定到自己的端口,每个Namespace内的端口都不会互相冲突。
6、IPCNamespace:保障每个容器进程IPC通信隔离。IPCNamespace使用了的参数CLONE_NEWIPC,IPCNamespace用来隔离SystemVIPC和POSIXmessagequeues,只有在相同IPC命名空间的容器进程之间才可以共享内存、信号量、消息队列通信。
7、CgroupNamespace:保障容器容器中看到的cgroup视图,像宿主机一样以根形式来呈现,同时让容器内使用cgroup变得更安全
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!请读者仅作参考。更多内容请加抖音达内三江区域学习了解。