Solaris 操作系统中的 Solaris Zones 功能提供了一个隔离环境,可在其中运行系统上的应用程序。Solaris Zones 是 Solaris Container 环境的一个组件。
本章包含以下主题:
如果您可以开始在系统上创建区域,请跳至第 17 章。
Solaris Zones 分区技术用于虚拟化操作系统服务,提供安全的隔离环境以便运行应用程序。区域就是在 Solaris 操作系统的某个实例中创建的一个虚拟的操作系统环境。创建区域时,便创建了一个应用程序执行环境,其中的进程与系统的其余部分相隔离。这种隔离阻止了在一个区域中运行的进程监视或影响在其他区域中运行的进程。即使运行的进程具有超级用户凭证,也不能查看或影响其他区域中的活动。
区域还提供了一个抽象层,用于分隔应用程序和部署这些应用程序的计算机的物理属性。这些属性的示例包括物理设备路径。
可以在任何至少运行 Solaris 10 发行版的计算机上使用区域。系统上区域数量的上限为 8192。单个系统上可有效托管区域的数量由所有区域中运行的应用程序软件的总资源需求确定。
在 Solaris 10 发行版中,有两种类型的非全局区域根文件系统模型:稀疏根和完全根。稀疏根区域 (sparse root zone) 模型优化对象共享。完全根区域 (whole root zone) 模型提供最大配置能力。这些概念在第 18 章中介绍。
Solaris 10 9/10:已安装的产品称为系统资产,通过自动注册功能进行控制。安装期间,用户会提供凭证或匿名注册。系统重新引导时,新产品的服务标签将上载到 My Oracle Support 服务器。此功能仅在全局区域中可用。有关更多信息,请参见《系统管理指南:基本管理》。
标记区域 (Branded zone, BrandZ) 提供了用来创建包含运行时行为的备用集的容器的框架。标记可以指各种操作环境。例如,非全局区域可以模仿 Solaris 8 操作系统或 Linux 等操作环境。
标记定义了可在区域中安装的操作环境并确定系统在该区域内的行为方式,以便在该区域中安装的软件可以正常运行。此外,区域的标记可用于在应用程序启动时识别正确的应用程序类型。所有标记区域管理都通过扩展标准区域命令来执行。所有区域的大多数管理步骤都相同。
在运行 Solaris 10 8/07 操作系统或更高 Solaris 10 发行版的 SPARC 计算机上支持以下两个标记:
solaris8 标记,即《系统管理指南:Solaris 8 容器》中所述的 Solaris 8 Containers
solaris9 标记,即《系统管理指南:Solaris 9 容器》中所述的 Solaris 9 Containers
在 Solaris 10 OS 上支持的其他标记包括:
用于 x86 和 x64 系统的 Linux lx 标记,在第 3 部分, lx 标记区域中进行了介绍
cluster 标记,在 docs.sun.com 上的 Sun Cluster 3.2 1/09 Software Collection for Solaris OS 中进行了介绍
虽然可以在启用了标签的 Trusted Solaris 系统上配置和安装标记区域,但不能在此系统配置中引导标记区域。
对于将多个应用程序整合在一个服务器中的环境而言,使用区域是明智之举。管理大量计算机所带来的成本和复杂性促使在更大、更具伸缩性的服务器上整合多个应用程序。
下图显示了具有四个区域的系统。在整合环境样例中,apps、users 和 work 这几个区域运行的工作负荷都与其他区域的工作负荷无关。此示例说明:为了符合整合要求,不同版本的同一应用程序可以在不同区域中运行,而不会造成负面影响。每个区域都可提供一组自定义的服务。
使用区域,可以更有效地利用系统上的资源。使用动态资源重新分配,可以根据需要将未使用的资源转移到其他容器。故障和安全隔离意味着运行欠佳的应用程序不需要一个未充分利用的专用系统。使用区域,可以将这些应用程序与其他应用程序进行整合。
使用区域,可以在维护整体系统安全的同时委托某些管理功能。
可以将一个非全局区域想象为一个盒子。一个或多个应用程序可在这个盒子中运行,而不与系统的其余部分交互。Solaris 区域使用灵活、软件自定义的边界将各软件应用程序或服务分隔开来。然后,便可分别管理在 Solaris 操作系统的同一实例中运行的应用程序。因此,为了符合配置要求,不同版本的同一应用程序可以在不同区域中运行。
指定给某区域的进程可以处理、监视指定给同一区域的其他进程,并可直接与这些进程进行通信。进程不能对指定给系统中其他区域的进程执行这些功能,也不能对未指定给区域的进程执行这些功能。指定给不同区域的进程只能通过网络 API 进行通信。
从 Solaris 10 8/07 开始,IP 网络可按两种不同的方式进行配置,具体用哪种方式取决于该区域是具有其自己的专用 IP 实例还是将 IP 层配置和状态与全局区域共享。有关区域中 IP 类型的更多信息,请参见区域网络接口。有关配置信息,请参见如何配置区域。
每个 Solaris 系统都包含一个全局区域。全局区域具有双重功能。全局区域既是系统的缺省区域,也是用于在整个系统中实施管理控制的区域。如果全局管理员未创建任何非全局区域(简称为区域),则所有进程都在全局区域中运行。
只能从全局区域配置、安装、管理或卸载非全局区域。只有全局区域才可从系统硬件进行引导。只能在全局区域中进行系统基础结构(如物理设备)的管理、共享 IP 区域中的路由或动态重新配置 (dynamic reconfiguration, DR)。全局区域中运行的具有适当权限的进程可以访问与其他区域关联的对象。
全局区域中的非特权进程可以执行非全局区域中不允许特权进程执行的操作。例如,全局区域中的用户可以查看有关系统中每个进程的信息。如果此功能会使站点出现问题,则可以限制对全局区域进行访问。
包括全局区域在内的每个区域都会被指定一个区域名称。全局区域始终命名为 global。每个区域还具有唯一的数字标识符,这是引导区域时由系统指定的。全局区域始终映射到 ID 0。区域名称和数字 ID 在使用 zonecfg 命令中介绍。
每个区域还具有节点名称,此名称完全独立于区域名称。节点名称由区域管理员指定。有关更多信息,请参见非全局区域节点名称。
每个区域都具有一个与全局区域根目录相对的根目录路径。有关更多信息,请参见使用 zonecfg 命令。
缺省情况下,非全局区域的调度类设置为系统的调度类。有关在区域中设置调度类的方法讨论,请参见区域中的调度类。
您可以使用 priocntl(1) 手册页中所述的 priocntl,在不更改缺省调度类和不重新引导的情况下将正在运行的进程移至其他调度类。
全局管理员具有超级用户权限或主管理员角色。当全局管理员登录到全局区域时,可以将系统作为一个整体进行监视和控制。
区域管理员可以管理非全局区域。全局管理员为区域管理员指定区域管理配置文件。区域管理员的权限仅限于某个非全局区域。
全局管理员使用 zonecfg 命令,通过为区域虚拟平台和应用程序环境指定各种参数来配置区域。然后,全局管理员安装区域,使用区域管理命令 zoneadm 将软件包中的软件安装到为区域建立的文件系统分层结构。全局管理员可以使用 zlogin 命令登录到已安装的区域。首次登录时,会完成区域的内部配置。然后使用 zoneadm 命令引导区域。
有关区域配置的信息,请参见第 17 章。有关区域安装的信息,请参见第 19 章。有关区域登录的信息,请参见第 21 章。
区域配置已完成并提交到稳定存储器。但是,那些必须在初始引导之后指定的区域应用程序环境元素还不存在。
在安装或卸载操作期间,zoneadm 将目标区域的状态设置为未完成。成功完成操作之后,便将状态设置为正确的状态。
已在系统上实例化区域配置。zoneadm 命令用于检验是否可以在指定的 Solaris 系统上成功使用配置。软件包安装在区域的根路径下。在此状态下,区域没有关联的虚拟平台。
已建立区域的虚拟平台。已由内核创建 zsched 进程,已设置网络接口且可用于该区域,已挂载文件系统,并且已配置设备。系统会指定唯一的区域 ID。在此阶段,没有启动与区域关联的进程。
正在运行与区域应用程序环境关联的用户进程。创建了与应用程序环境关联的第一个用户进程 (init) 之后,区域便会立即进入正在运行状态。
这两种状态是停止区域时出现的过渡状态。但是,因某种原因无法关闭的区域将会在这两种状态下停止。
第 20 章和zoneadm(1M) 手册页介绍了如何使用 zoneadm 命令在这些状态之间进行转换。
表 16–1 影响区域状态的命令
当前区域状态 |
适用的命令 |
---|---|
已配置 |
zonecfg -z zonename verify zonecfg -z zonename commit zonecfg -z zonename delete zoneadm -z zonename attach zoneadm -z zonename verify zoneadm -z zonename install zoneadm -z zonename clone 您还可以使用 zonecfg 重命名处于已配置或已安装状态的区域。 |
未完成 |
zoneadm -z zonename uninstall |
已安装 |
zoneadm -z zonename ready(可选) zoneadm -z zonename boot zoneadm -z zonename uninstall 可从系统中卸载指定区域的配置。 zoneadm -z zonename move path zoneadm -z zonename detach zonecfg -z zonename 可用于添加或删除 attr、bootargs、capped-memory、dataset、dedicated-cpu、device、fs、ip-type、limitpriv、net、rctl 或 scheduling-class 属性。您还可以重命名处于已安装状态的区域。无法更改 inherit-pkg-dir 资源。 |
就绪 |
zoneadm -z zonename boot zoneadm halt 加上系统重新引导可使区域从就绪状态恢复为已安装状态。 zonecfg -z zonename 可用于添加或删除 attr、bootargs、capped-memory、dataset、dedicated-cpu、device、fs、ip-type、limitpriv、net、rctl 或 scheduling-class 属性。无法更改 inherit-pkg-dir 资源。 |
正在运行 |
zlogin options zonename zoneadm -z zonename reboot zoneadm -z zonename halt 可使就绪区域恢复为已安装状态。 zoneadm halt 加上系统重新引导可使区域从正在运行状态恢复为已安装状态。 zonecfg -z zonename 可用于添加或删除 attr、bootargs、capped-memory、dataset、dedicated-cpu、device、fs、ip-type、limitpriv、net、rctl 或 scheduling-class 属性。无法更改 zonepath 和 inherit-pkg-dir 资源。 |
通过 zonecfg 更改的参数不会影响正在运行的区域。必须重新引导区域才能使更改生效。
区域提供的隔离几乎可细化到您所需的任何程度。区域不需要专用的 CPU、物理设备或部分物理内存。可以在单个域或系统中运行的多个区域之间复用这些资源,也可借助操作系统中可用的资源管理功能为每个区域分别分配这些资源。
每个区域都可提供一组自定义的服务。要执行基本进程隔离,一个进程只能看到同一区域中的各个进程,或向这些进程发送信号。区域间的基本通信是通过每个区域的 IP 网络连接来完成的。在某个区域中运行的应用程序看不到其他区域的网络流量。即使各个软件包的流使用同一物理接口,也会维护这种隔离。
每个区域都在文件系统分层结构中拥有一个位置。因为每个区域都只限于文件系统分层结构中的一个子树,所以在某一特定区域中运行的工作负荷不能访问在其他区域中运行的另一个工作负荷的盘上数据。
命名服务使用的文件驻留在区域本身的根文件系统视图中。因此,不同区域的命名服务之间相互分离并可单独配置。
如果您使用资源管理功能,则应当使此功能可以完全控制区域范围。通过指定上述控制范围,可以创建更完整的虚拟机模型,可对其中的名称空间访问、安全隔离和资源使用情况进行完全控制。
对于将各种资源管理功能用于区域的任何特殊要求,将在本手册中介绍这些功能的各章节中介绍。
一旦将进程放入全局区域之外的区域,此进程或其后续子进程便不能更改区域。
可以在区域中运行网络服务。通过在区域中运行网络服务,可限制出现安全违规时可能引起的损坏。如果入侵者成功利用了区域中运行的软件中的安全缺陷,则此入侵者只能在此区域中执行一部分可能的操作。区域中可用的权限是整个系统中可用权限的一部分。
使用区域,可以在同一计算机上部署多个应用程序,即使这些应用程序运行在不同的信任域中,需要独占访问全局资源或者全局配置出现问题也是如此。例如,使用与每个区域关联的特定 IP 地址或通配符地址,可以将同一系统的不同共享 IP 区域中运行的多个应用程序绑定到同一网络端口。应用程序还无法监视或拦截其他应用程序的网络流量、文件系统数据或进程活动。
如果需要在网络上的 IP 层隔离某个区域,例如,将其连接到与全局区域和其他非全局区域不同的 VLAN 或不同的 LAN,此时出于安全原因考虑,该区域可以有一个专用 IP。专用 IP 区域可用于整合必须在不同子网(这些子网位于不同的 VLAN 或不同的 LAN)上通信的应用程序。
也可以将区域配置为共享 IP 区域。这些区域将连接到与全局区域相同的 VLAN 或相同的 LAN,并与全局区域共享 IP 路由配置。共享 IP 区域具有单独的 IP 地址,但共享 IP 的其他部分。
区域提供了一个虚拟环境,此环境可以在应用程序中隐藏详细信息(例如物理设备、系统的主 IP 地址以及主机名)。可以在不同的物理计算机上维护同一应用程序环境。通过虚拟环境,可以单独管理每个区域。区域管理员在非全局区域中执行的操作不会影响系统的其余部分。
区域提供的隔离几乎可细化到任何程度。有关更多信息,请参见非全局区域特征。
区域不更改应用程序的执行环境,但为实现安全和隔离目标而必须更改的情况除外。区域不显示应用程序必须连接的新 API 或 ABI。相反,区域提供具有某些限制的标准 Solaris 接口和应用程序环境。这些限制主要影响尝试执行特权操作的应用程序。
无论是否配置其他区域,全局区域中的应用程序始终会运行而无需修改。
下表简要介绍了首次在系统上设置区域所涉及的任务。
任务 |
说明 |
参考 |
---|---|---|
标识您要在区域中运行的应用程序。 |
查看正在系统上运行的应用程序:
|
如有必要,请参阅您的业务目标和系统文档。 |
确定要配置的区域数。 |
评估:
|
请参见评估当前的系统设置。 |
确定是否将资源池与区域结合使用,以便创建容器。 |
如果您还要在系统上使用资源管理功能,则需要使资源管理范围能够覆盖这些区域。请在配置区域之前配置资源池。 请注意,从 Solaris 10 8/07 发行版开始,您可以使用 zonecfg 属性将区域范围的资源控制和池功能快速添加到区域中。 | |
执行预配置任务。 |
确定区域名称和区域路径。确定此区域是共享 IP 区域还是专用 IP 区域,然后获取 IP 地址或数据链路名称。确定每个区域的必需文件系统和设备。确定用于区域的调度类。确定在标准缺省权限集不充足的情况下,应为区域内的进程设置的权限集。请注意,有些 zonecfg 设置会自动添加权限。例如,ip-type=exclusive 会自动添加配置和管理网络栈所需的多个权限。 |
有关区域名称和路径、IP 类型、IP 地址、文件系统、设备、调度类以及权限的信息,请参见第 17 章和评估当前的系统设置。有关缺省权限和可在非全局区域中配置的权限的列表,请参见非全局区域中的权限。有关 IP 功能可用性的信息,请参见共享 IP 非全局区域中的联网和Solaris 10 8/07:专用 IP 非全局区域中的联网。 |
开发配置。 |
配置非全局区域。 |
请参见配置、检验并提交区域和 zonecfg(1M) 手册页。 |
以全局管理员身份检验和安装已配置的区域。 |
必须在登录之前检验和安装区域。 | |
以全局管理员身份,使用带有 -C 选项的 zlogin 命令登录到每个非全局区域,或将 sysidcfg 文件放置到区域的 /etc 目录中。 |
| |
以全局管理员身份引导非全局区域。 |
引导每个区域以将区域置于运行状态。 | |
为生产使用准备新区域。 |
创建用户帐户,添加其他软件,并自定义区域配置。 |
请参阅用于设置新安装的计算机的文档。本指南中介绍了适用于区域环境的特殊注意事项。 |