Citrix Hypervisor

容器管理

Citrix Hypervisor 支持在您的 VM 中使用以下容器类型:

  • 托管在 Linux VM 上的基于 Linux 的 Docker 容器
  • Windows Server 2016 VM 上的 Windows Server 容器

Citrix Hypervisor 包含以下功能,用于增强 Citrix Hypervisor 上的 Docker 容器的部署:

  • 面向 Debian 8 和 RHEL/CentOS/OEL 7 的容器管理功能

    如果在 VM 上启用了容器管理,Citrix Hypervisor 将能够识别 VM 中运行的任何 Docker 容器。

有关详细信息,请参阅Docker 是什么

Citrix Hypervisor 还包含以下功能,以增强 Citrix Hypervisor 上的 Windows Server 容器的部署:

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

有关详细信息,请参阅Windows Server 容器是什么

容器管理补充包

注意:

容器管理补充包已弃用,将在以后的版本中删除。

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

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

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

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

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

注意:

支持使用 安装补充包。有关如何使用 安装补充包的信息,请参阅 文档。如果您更希望使用 xe CLI 进行安装,请参阅 补充包和 DDK 指南

Docker 是什么?

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

注意:

容器管理功能补充但不会替代 Docker 环境。您可以使用可用的多个 Docker 管理工具之一管理 VM 中的各个 Docker Engine 实例。

管理 Linux VM 上的容器

要在 Linux VM 上运行 Docker 容器,请先准备 Linux VM 以便进行容器管理。只有 Debian 8 和 RHEL/CentOS/OEL 7 VM 支持此功能。

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

  1. 确保 VM 已安装适用于 Linux 的 Citrix VM Tools,并且已按网络要求和安全中所述配置 VM 网络。

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

    对于 RHEL/CentOS/OEL 7:

    yum install docker nmap openssh-server
    <!--NeedCopy-->
    
  3. 对 docker.service 启用自动启动:

    systemctl enable docker.service
    <!--NeedCopy-->
    
  4. 启动 docker.service

    systemctl start docker.service
    <!--NeedCopy-->
    

    使用非 root 用户进行容器管理。将用户添加到 docker 组以提供对 Docker 的访问权限。

  5. 为容器管理功能准备 VM;请对池中的其中一个主机上的控制域 (dom0) 运行以下命令:

    xscontainer-prepare-vm -v vm_uuid -u username
    <!--NeedCopy-->
    

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

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

注意:

如果在池之间迁移容器管理的 VM,容器管理功能将停止对 VM 起作用。出现此行为的原因是,容器管理功能是使用池特定的键实现的。要重新为 VM 启用容器管理功能,请在 VM 上再次运行 xscontainer-prepare-vm 命令。即使在运行此命令后,仍可能可以在原始 池中访问该 VM。

访问 Docker 容器控制台和日志

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

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

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

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

    注意:

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

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

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

  1. 生成公钥/私钥对。

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

    对于 RHEL/CentOS/Oracle Linux 7 和 Debian 8 上运行的容器,手动将公钥应手动添加到 ~/.ssh/authorized_keys

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

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

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

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

可以使用以下命令访问该密钥:

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

vm_uuid 为 VM 的 UUID

备注

使用 容器管理功能和 Docker 时,请注意以下行为:

  • 重命名容器不会触发更新容器管理视图的操作。此行为可能意味着 可能不显示当前(已重命名/已暂停/已取消暂停)的容器状态。根本原因是视图仅刷新以下 Docker 事件通知。解决方法:可以通过对同一 VM 上的无关容器执行某项操作(即启动或停止)来触发刷新操作。

Windows Server 容器是什么?

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

管理 Windows Server 容器

注意:

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

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

  1. 确保 VM 已安装适用于 Windows 的 Citrix VM Tools,并且已按网络要求和安全中所述配置 VM 网络。

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

  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"
    }
    <!--NeedCopy-->
    
  4. 为容器管理功能准备 VM;请对池中的其中一个主机上的控制域 (dom0) 运行以下命令之一:

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

    重要:

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

    xscontainer-prepare-vm -v vm_uuid -u root --mode tls --generate-certs
    <!--NeedCopy-->
    

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

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

    xscontainer-prepare-vm -v vm_uuid -u root --mode tls \
        --client-cert client_cert --client-key client_key --ca-cert ca_cert
    <!--NeedCopy-->
    

    其中,vm_uuid 为要准备的 VM,client_cert 为 TLS 客户端证书,client_key 为 TLS 客户端密钥,ca_cert 为 CA 证书。

Windows Server 容器的身份验证

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

重要:

  • 客户端密钥必须安全保存,因为它允许对 VM 上的 Docker 进行无密码访问
  • 必须安全地保存服务器密钥,因为该密钥用于对 VM 上的监视连接进行身份验证

容器管理功能使用 –generate-certs 选项生成 TLS 证书和密钥时,会为某个特定池和 VM 生成临时 CA、服务器和客户端证书。证书使用 sha256 哈希,最长有效期为 2*365 天。过了此时间后,应重复执行准备过程。TLS 连接始终使用 AES128-SHA 密码建立。

网络要求和安全

重要:

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

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

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

在以下情况下,请勿在生产中使用此功能:

  • 如果建议的此网络配置与您的风险状况不一致
  • 如果您缺乏必要的网络或防火墙专业知识来针对您的特定用例充分保护此路由的安全

网络分区和防火墙

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

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

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

下面是一个示例配置:

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

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

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

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

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

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

容器管理