容器管理

XenServer 包括两项可增强 XenServer 中的 Docker 容器部署的新功能

  • 支持 CoreOS Linux VM 和配置云配置驱动器

  • 面向 CoreOS、Debian 8、Ubuntu 14.04 和 RHEL/CentOS/OEL 7.0 的容器管理功能

  • 面向 Windows Server 2016 技术预览版中 Windows Server 容器的容器管理预览功能

CoreOS 是精简版 Linux 发行版,已普遍用于托管 Docker 应用程序。CoreOS 云配置驱动器允许用户自定义各种操作系统配置选项。如果在 VM 上启用了容器管理,XenServer 将能够识别 VM 中运行的任何 Docker 容器。

注意

有关如何安装 CoreOS 来宾、配置云配置参数以及管理 Docker 容器的信息,请参阅 XenCenter 联机帮助。按 F1 或单击“帮助”。

通过容器管理增补包,XenServer 能够查询 VM、与云配置驱动器交互、发现应用程序容器以及在 XenCenter 的基础结构视图中显示这些容器。XenCenter 还能够与容器交互,以允许执行启动、停止和暂停操作以及使用其他监视功能。有关详细信息,请参阅容器管理补充包

Docker 是什么

Docker 是一个开放式平台,开发人员和系统管理员能够在此平台上构建、交付和运行已分发的应用程序。Docker 容器仅由应用程序及其依赖项组成。该容器在主机操作系统上的用户空间中作为独立的进程运行,与其他容器共享内核和基本文件系统。有关详细信息,请参阅:https://www.docker.com/whatisdocker

注意

XenServer 容器管理功能已实现,但不会替代 Docker 生态系统。VM 中的各个 Docker Engine 实例可以通过可用的多个 Docker 管理工具之一进行管理。

容器管理补充包

容器管理补充包提供以下功能:

  • 监视和可见性:允许您查看哪些 VM 正在用于 Docker 托管,以及 VM 上的哪些容器正在运行。

  • 诊断:提供对基础容器信息的轻松访问,例如转接的网络端口和原始 Docker 映像名称。这有助于加快对可能会影响基础结构或应用程序层的问题的调查速度。

  • 性能:深入了解哪些容器正在该 VM 上运行。提供与容器上运行的进程和应用程序以及占用的 CPU 资源有关的信息,具体取决于操作系统提供的信息。

  • 控制应用程序:使用 XenCenter 启动、停止和暂停能够快速终止有问题的应用程序的应用程序容器(如果受操作系统支持)。

注意

XenServer 支持使用 XenCenter 安装补充包。有关如何使用 XenCenter 安装补充包的信息,请参阅 XenCenter 帮助。如果您更偏向于使用 xe CLI 进行安装,请参阅《XenServer 补充包和 DDK 指南》。

使用 XenCenter 管理 Docker 容器

本节介绍与使用 XenCenter 管理您的 CoreOS VM 有关的信息。要管理 CoreOS VM,应执行以下操作:

  1. 将主机安装或升级到 XenServer 7.1。

  2. 安装 XenServer 7.1 附带的 XenCenter。

  3. 安装可从 Citrix Web 站点下载页面获取的容器管理增补包。

  4. 创建 CoreOS VM 并将该 VM 的配置驱动器包括在内。

    在 XenCenter 中创建 CoreOS VM 时,“新建 VM”向导将提示您为 VM 指定云配置参数。配置驱动器为 VM 实例提供用户数据。如果打算使用 XenServer 来管理 VM 内部运行的容器,应创建一个配置驱动器。

    默认情况下,XenCenter 在“云配置参数”页面上包括一组预定义的参数。可以根据您的要求修改这些参数。有关支持的配置参数的详细信息,请参阅 CoreOS 文档。

    警告

    如果没有为 VM 创建配置驱动器,容器管理可能无法运行。

  5. 为 VM 启用容器管理。可以在 XenCenter 中的 VM“属性”选项卡中更新此设置。

注意

如果要使用 Ubuntu 14.04、Debian 8、RHEL/CentOS/Oracle Linux 7、Windows Server 2016 TP VM 来管理 Docker 容器,应先使用 CLI 启用容器管理。在这些 VM 上启用容器管理后,可以使用 XenCenter 执行生命周期操作,例如启动、停止、暂停和恢复容器。

在其他 Linux 来宾上管理容器

系统会自动为容器管理准备通过默认云配置驱动器配置创建的 CoreOS VM,并且只需要启用该功能。可以手动准备其他 Linux 来宾系统。只有 Debian 8、Ubuntu 14.04 和 RHEL/CentOS/OEL 7.x VM 支持此功能。

要手动准备 Linux 来宾,请执行以下操作:

  1. 确保 VM 已安装 XenServer PV Tools,并且已按网络要求和安全性中所述配置了 VM 网络。

  2. 在 VM 中安装 Docker、ncat 和 SSHD。

    对于 Ubuntu 14.04:apt-get install docker.io nmap openssh-server

    对于 RHEL/CentOS/OEL 7.x:yum install docker nmap openssh-server

  3. 对 docker.service 启用自动启动:

systemctl enable docker.service

  1. 启动 docker.service

systemctl start docker.service

应使用非 root 用户进行容器管理;请将该用户添加到“docker”组中以提供对 Docker 的访问权限。
  1. 为容器管理功能准备 VM;请对池中的其中一个主机上的控制域 (dom0) 运行以下命令:

xscontainer-prepare-vm -v vm-uuid -u username

其中,vm-uuid 为要准备的 VM,username 为容器管理功能用于管理访问的 VM 上的用户名。

准备脚本将引导您完成该过程,并自动为此 VM 启用容器管理功能。

访问 Docker 容器控制台和日志

对于 Linux VM,XenCenter 允许客户访问容器控制台和查看日志,从而管理和监视在 Docker 容器上运行的应用程序。要使用 XenCenter 访问容器控制台和日志,请执行以下操作:

  1. 在资源窗格中选择容器。

  2. 在容器的常规属性部分,单击查看控制台查看容器控制台。要查看控制台日志,请单击查看日志。此时将在运行 XenCenter 的计算机上打开 SSH 客户端。

  3. 在系统提示时,使用 VM 用户名和密码登录 SSH 客户端。

    注意

    客户可以通过配置 SSH 公钥/私钥来自动完成身份验证过程。有关详细信息,请参阅以下部分。

自动完成身份验证过程(可选)

访问容器控制台和日志时,客户需要输入 VM 的登录凭据才能验证 SSH 连接。但是,客户可以自动完成身份验证过程,以免手动输入凭据。按照以下说明配置自动身份验证过程:

  1. 生成公钥/私钥对。

  2. 将 SSH 公钥添加到运行容器的 VM 的用户目录。

    例如,对于在 CoreOS VM 中运行的容器,公钥应添加到 XenCenter 的 VM“常规”选项卡的“云配置参数”部分。对于 Ubuntu 14.04、RHEL/CentOS/Oracle Linux 7.x 和 Debian 8,公钥应手动添加到 ~/.ssh/authorized_keys

  3. 将 SSH 私钥添加到运行 XenCenter 的计算机上的 %userprofile% 目录,并将该密钥重命名为 ContainerManagement.ppk

管理 Windows Server 容器

Windows Server 容器属于 Windows Server 2016 来宾操作系统的一部分。这些容器允许通过将进程隔离到各自的命名空间中来封装 Windows 应用程序。XenServer 容器管理功能支持在 Windows Server 2016 来宾操作系统上监视和管理 Windows Server 容器。

注意

此功能要求为 Windows Server 2016 VM 配置一个或多个静态 IP 地址以用于 TLS 通信,因为 TLS 服务器证书将绑定到某些 IP 地址。

要为容器管理功能准备 Windows Server 容器,请执行以下操作:

  1. 确保 VM 已安装 XenServer PV Tools,并且已按网络要求和安全性中所述配置了 VM 网络。

  2. Microsoft 文档中所述在 VM 中安装 Windows Server 容器支持功能。Windows Server 容器不是 HyperV 容器。

  3. 在文件夹 C:\ProgramData\docker\config 中创建一个名为 daemon.json 并且包含以下内容的文件:

    {
    "hosts": ["tcp://0.0.0.0:2376", "npipe://"],
    "tlsverify": true,
    "tlscacert": "C:\\ProgramData\\docker\\certs.d\\ca.pem",
    "tlscert": "C:\\ProgramData\\docker\\certs.d\\server-cert.pem",
    "tlskey": "C:\\ProgramData\\docker\\certs.d\\server-key.pem"
    }
    
  4. 为容器管理功能准备 VM;请对池中的其中一个主机上的控制域 (dom0) 运行以下命令之一:

    方案 1(对于单用户 VM):使用 XenServer 为此 VM 生成 TLS 证书。

    重要

    此方案仅在单个用户访问 VM 的环境中是安全的。TLS 服务器和客户端密钥将被插入到使用虚拟 CD 的 VM 中,这些密钥在准备过程中可能会被恶意用户复制。

    xscontainer-prepare-vm -v vm-uuid -u root --mode tls --generate-certs
    

    其中 vm-uuid 为要准备的 VM。按照屏幕上的说明进行操作,完成准备 Windows Server 容器的过程。该过程涉及与 dom0 和 VM 交互。

    方案 2:使用外部生成的 TLS 证书配置 XenServer

    xscontainer-prepare-vm -v vm-uuid -u root --mode tls --client-cert client-cert
    --client-key client-key --ca-cert ca-cert
    

    其中,vm-uuid 为要准备的 VM,client-cert 为 TLS 客户端证书,client-key 为 TLS 客户端密钥,ca-cert 为 CA 证书。此方案假定已在 VM 中为 TLS 配置 Docker。

网络要求和安全

重要

要使用容器管理功能,可能需要放宽与网络隔离有关的安全要求。

为使虚拟化环境具有最高安全性,Citrix 建议管理员对网络进行分区,方法是将 XenServer 的管理网络(包括 XenServer 控制域 dom0)与 VM 隔离。

启用容器管理功能需要在这两个网络之间进行路由,这增加了恶意 VM 攻击管理网络(即 dom0)的风险。为了缓解允许在 VM 与管理网络进行通信的风险,我们建议配置防火墙规则,以仅允许可信源在这两个网络之间启动连接。

如果建议的此网络配置与您的风险状况不一致,或者如果您缺乏必要的网络或防火墙专业知识来针对您的特定用例充分保护此路由的安全,Citrix 建议您不要在生产中使用此功能。

网络分区和防火墙

与其他 VM 一样,应将容器管理的 VM 直接连接到 XenServer 的管理网络,才能提供必要的隔离。

托管 VM 必须能够从 XenServer 的控制域 (dom0) 进行访问,容器管理功能才可使用。要监视基于 Linux 的操作系统中的容器,网络连接拓扑和防火墙必须允许从 dom0(XenServer 管理网络)到容器托管的 VM(VM 网络)的出站 SSH(目标 TCP 端口 22)连接。要监视 Windows Server 容器 - 网络连接拓扑和防火墙必须允许从 dom0(XenServer 管理网络)到容器托管的 VM(VM 网络)的出站 Docker TLS(目标 TCP 端口 2376)连接。

为缓解允许在 VM 与管理网络之间进行通信的风险,所有流量都应流经外部有状态防火墙。必须由专业人员根据您的具体业务和安全要求手动设置和配置此防火墙。

下面是一个示例配置:

为确保网络之间的连接安全,请执行以下操作:

  • 阻止 XenServer 管理网络(包括 dom0)与 VM 网络(包括容器管理的 VM)之间的所有连接。

添加启用容器管理功能的例外:

  • 要监视基于 Linux 的操作系统,请允许 dom0 与容器管理的 VM 之间的出站 SSH(TCP 端口 22)连接(新连接以及已建立的连接)。

  • 要监视 Windows Server 容器,请允许 dom0 与容器管理的 VM 之间的出站 Docker TLS(TCP 端口 2376)连接(新连接以及已建立的连接)。

  • 允许容器管理的 VM 响应 dom0 启动的(已建立)SSH 或 Docker TLS 连接。

基于 Linux 的操作系统中的身份验证

XenServer 的容器管理功能使用池特有的 4096 位专用/公用 RSA 密钥对在容器管理的 VM 进行身份验证。私钥存储在 XenServer 控制域 (dom0) 中。相应的公钥在准备过程中使用云配置驱动器或 ~user/.ssh/authorized_keys 文件在容器管理的 VM 中注册。与所有私钥/公钥对一样,必须安全地保存私钥,因为私钥允许无密码访问所有容器管理的 VM。这包括当前管理的 VM 以及过去管理的 VM。

XenServer 的容器管理功能将尝试通过 VM 中运行的 XenServer PV Tools 公告的 IP 地址访问容器管理的 VM。首次连接后,XenServer 会存储容器管理的 VM 的公钥,并验证该公钥在任何后续连接中是否匹配。如果网络拓扑无法确保只能通过其公告的 IP(使用 IP Source Guard 或类似的方法)访问容器管理的 VM,Citrix 建议管理员确认 SSH 主机密钥,该密钥是容器管理功能在首次与 VM 建立连接时获取的。

可以使用以下命令访问该注册表项:

xe vm-parm-get-uuid=vm-uuid param-name=other-config  /
param-key=xscontainer-sshhostkey

其中 vm-uuid 为 VM 的 UUID。

适用于 Windows Server 容器的身份验证

XenServer 使用 SSL 或 TLS 监视和控制 Windows Server 容器。在此实例中,XenServer 用作 SSL/TLS 客户端,Windows Server VM 用作 SSL/TLS 服务器。密钥同时存储在 Dom0 和 VM 中。

重要

  • 客户端密钥必须安全保存,因为它允许无密码访问 VM 上的 Docker

  • 必须安全地保存服务器密钥,因为该密钥用于对 VM 上的监视连接进行身份验证

XenServer 容器管理功能使用 –generate-certs 选项生成 TLS 证书和密钥时,会为某个特定池和 VM 生成临时CAserverclient证书。证书使用 sha256 哈希,最长有效期为 2*365 天,超过有效期后,应重复执行准备过程。TLS 连接总是使用 AES128-SHA 密码建立。