容器核心技术-Namespace

一、容器

基于Linux 内核的 Cgroup, Namespace,以及Union FS等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术,由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。

1.1 容器主要特性

  • 安全性
  • 隔离性
  • 便携性
  • 可配额

二、Namespace

·Linux Namespace 是一种 Linux Kernel 提供的资源隔离方案:

  1. 系统可以为进程分配不同的 Namespace;
  2. 并保证不同的Namespace资源独立分配、进程彼此隔离,即 不同的Namespace下的进程互不干扰。

2.1 Namespace类型

容器核心技术-Namespace_第1张图片

2.2 隔离性

容器核心技术-Namespace_第2张图片

  1. pid namespace

    • 不同的用户进程就是通过pid namespace隔离开的,且不同不同namesapce中可以有相同的pid,但是这些pid都能映射到主机上的不同pid,本质还是主机上起的进程。
    • 有了pid namespace,每个namespace的pid能够相互隔离。
  2. net namespace

    • 网络隔离是通过net namespace 实现的,每个 net namespace 有独立的 network devices, IP addresses, IP routing tables。
    • Docker默认采用veth 的方式将 container 中的虚拟网卡同host上的一个docker bridge:docker0连接在一起。
  3. mnt namespace

    • mnt namespace 允许不同 namespace 的进程看到的文件结构不同,这样每个namespace中的进程所看到的文件目录就被隔离开了。
  4. uts namespace

    • UTS("UNIX Time-sharing System”) namespace允许每个 container 拥有独立的 hostname 和 domain name,使其在网络上可以被视作一个独立的节点而非Host上的一个进程。
  5. user namespace

    • 每个container 可以有不同的user和group id,也就是说可以在 container 内部用 container 内部的用户执行程序而非Host 上的用户。

三、Namespace示例

创建新的network namespace,并执行 sleep 指令:

unshare -fn sleep 100

查看进程信息:
在这里插入图片描述
查看网络namespace:
容器核心技术-Namespace_第3张图片
进入该进程所在Namespace 查看网络配置,与主机不一致:
在这里插入图片描述

你可能感兴趣的:(云原生,kubernetes,容器)