コンテナ管理

Citrix Hypervisorには、Citrix Hypervisor上でのDockerコンテナの展開を拡張する2つの新機能があります。

  • CoreOS Linux仮想マシンのサポートとクラウド構成ドライブの構成

  • CoreOS、Debian 8、Ubuntu 14.04、RHEL/CentOS/OEL 7のコンテナ管理

  • Windows Server 2016 Technology Preview上のWindows Serverコンテナのコンテナ管理のプレビュー

CoreOSはミニマリズムLinuxディストリビューションで、Dockerアプリケーションをホストするため人気となりました。CoreOSのクラウド構成ドライブにより、さまざまなオペレーティングシステム構成オプションのカスタマイズが可能となります。仮想マシンでコンテナ管理が有効な場合、Citrix Hypervisorは仮想マシンで実行されている任意のDockerコンテナを認識します。

注:

CoreOSゲストのインストール方法、クラウド構成パラメーターの構成方法、およびDockerコンテナの管理方法について詳しくは、XenCenterヘルプを参照してください。F1キーを押すか、[ヘルプ] をクリックします。

Container Management Supplemental Packによって、Citrix Hypervisorは次の操作を実行できます:

  • 仮想マシンへのクエリ
  • クラウド構成ドライブとの相互通信
  • アプリケーションコンテナの検出
  • XenCenterのインフラストラクチャビューでアプリケーションのコンテナの表示

またXenCenterはコンテナとの相互通信を有効にして、開始、停止、および一時停止操作と、そのほかの監視機能を許可します。詳しくは、「Container Management Supplemental Pack」を参照してください。

Dockerについて

Dockerは、開発者およびシステム管理者が配布アプリケーションを構築、出荷、および実行するためのオープンプラットフォームです。Dockerコンテナは、アプリケーションとその依存関係のみで構成されます。これは、ホストオペレーティングシステムのユーザースペースで分離されたプロセスとして実行され、ほかのコンテナとカーネルおよび基本ファイルシステムを共有します。詳しくは、「https://www.docker.com/whatisdocker」を参照してください。

注:

Citrix Hypervisorコンテナ管理機能はDocker環境を補足しますが、代わりになるものではありません。仮想マシンの個々のDocker Engineインスタンスは、利用可能な多くのDocker管理ツールの1つによって管理できます。

Container Management Supplemental Pack

Container Management Supplemental Packでは、次のものが提供されます。

監視および可視性: Dockerのホスティングに使用されている仮想マシンと、仮想マシン上の実行中のコンテナを確認できるようになります。

診断:転送されるネットワークポートや発信元のDockerイメージ名などの基本的なコンテナ情報にアクセスできます。この機能は、インフラストラクチャおよびアプリケーションレイヤーに影響を与える可能性がある場所の問題を迅速に調査するのに役立ちます。

パフォーマンス:その仮想マシンで実行されているコンテナの詳細情報を確認できます。オペレーティングシステムから提供される情報に応じて、コンテナで実行されているプロセスおよびアプリケーションと、消費されたCPUリソースに関する情報が提供されます。

アプリケーションの制御:XenCenterを使用して、アプリケーションコンテナを開始、停止、および一時停止(オペレーティングシステムでサポートされている場合)して、問題のあるアプリケーションを迅速に終了できます。

注:

Citrix Hypervisorでは、XenCenterを使用したサプリメンタルパックのインストールがサポートされています。XenCenterを使用したサプリメンタルパックのインストール方法について詳しくは、XenCenterのヘルプを参照してください。xe CLIを使用してインストールする場合は、『Citrix Hypervisor Supplemental Packs and the DDK Guide』を参照してください。

XenCenterを使用したDockerコンテナの管理

このセクションでは、XenCenterを使用したCoreOS仮想マシンの管理について説明します。CoreOS仮想マシンを管理するには、次の手順を完了します:

  1. Citrix Hypervisor 8.0をホストにインストールまたはアップグレードします。

  2. Citrix Hypervisor 8.0と共に出荷されたXenCenterをインストールします。

  3. シトリックスWebサイトから取得できるContainer Management Supplemental Packをインストールします。

  4. CoreOS仮想マシンを作成し、仮想マシンの構成ドライブを含めます。

    XenCenterでCoreOS仮想マシンを作成している場合、新規VMウィザードにより仮想マシンのクラウド構成パラメーターを指定するよう求められます。構成ドライブは仮想マシンインスタンスにユーザーデータを提供します。Citrix Hypervisorを使って仮想マシン内で実行中のコンテナを管理しようとする場合は、構成ドライブを作成します。

    デフォルトでは、XenCenterの[クラウド構成パラメーター]ページにはパラメーターの事前定義セットが含まれていいます。必要に応じてこれらのパラメーターを変更できます。サポートされている構成パラメーターについて詳しくは、CoreOSのドキュメントを参照してください。

    警告:

    仮想マシンの構成ドライブを作成しないと、コンテナ管理が機能しない場合があります。

  5. 仮想マシンに対するコンテナ管理を有効にします。この設定はXenCenterの仮想マシンの[プロパティ]タブでアップデートできます。

注:

プール間でコンテナ管理された仮想マシンを移行すると、コンテナ管理は仮想マシンに対する動作を停止します。これは、コンテナ管理がプール固有のキーを使用して実装されているため起こります。コンテナ管理機能を再度有効にするには、仮想マシンの設定でクラウド構成ドライブをアップデートします。

そのほかのLinuxゲストでのコンテナの管理

クラウド構成ドライブのデフォルト構成で作成されたCoreOS仮想マシンは、コンテナ管理用に自動的に準備され、機能を有効にするだけで済みます。そのほかのLinuxゲストは手動で準備できます。この機能は、Debian 8、Ubuntu 14.04、RHEL/CentOS/OEL 7.xの仮想マシンでのみサポートされます。

Linuxゲストを手動で準備するには、次の手順に従います:

  1. 仮想マシンにCitrix VM Toolsがインストールされ、ネットワークの要件とセキュリティの説明どおりに仮想マシンネットワークが構成されていることを確認します。

  2. 仮想マシン内に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
    
  4. docker.serviceを起動します。

    systemctl start docker.service
    

    コンテナ管理には非ルートユーザーを使用します。Dockerへのアクセスを提供するために、ユーザーを「docker」グループに追加します。

  5. コンテナ管理用に仮想マシンを準備します。プール内のいずれかのホストのコントロールドメイン(dom0)で次のコマンドを実行します。

    xscontainer-prepare-vm -v vm_uuid -u username
    

    ここで、vm_uuidは準備する仮想マシンで、usernameはコンテナ管理で管理アクセスに使用する仮想マシンのユーザー名です。

準備スクリプトにより、プロセスがガイドされ、この仮想マシンのコンテナ管理が自動的に有効になります。

注:

プール間でコンテナ管理された仮想マシンを移行すると、コンテナ管理は仮想マシンに対する動作を停止します。これは、コンテナ管理がプール固有のキーを使用して実装されているため起こります。コンテナ管理機能を再度有効にするには、xscontainer-prepare-vmコマンドを再実行します。このコマンドの実行後でも、移行前のCitrix Hypervisorプールが仮想マシンにアクセスし続けることがあります。

Dockerコンテナコンソールおよびログへのアクセス

Linux仮想マシンの場合、XenCenterではユーザーがDockerコンテナで実行されているアプリケーションを管理し、監視するためにコンテナコンソールにアクセスし、ログを表示することができます。XenCenterを使用してコンテナコンソールとログにアクセスするには、以下の手順に従います。

  1. [リソース] ペインでコンテナを選択します。

  2. [コンテナの全般プロパティ][コンソールの表示]をクリックし、コンテナコンソールを開きます。コンソールログを表示するには、[ログの表示] をクリックします。これにより、XenCenterを実行しているマシンでSSHクライアントが開きます。

  3. 確認メッセージが表示されたら、仮想マシンのユーザー名とパスワードを使用してSSHクライアントにログインします。

    注:

    公開/秘密SSHキーを構成することで、認証プロセスを自動化できます。詳しくは、以降のセクションを参照してください。

認証プロセスの自動化(オプション)

コンテナコンソールとログにアクセスする場合、仮想マシンのログイン資格情報を入力してSSH接続を認証する必要があります。ただし、この認証プロセスを自動化して、手動による資格情報の入力を省略できます。自動認証プロセスを構成するには、以下の手順に従います。

  1. 公開/秘密キーのペアを生成します。

  2. コンテナを実行している仮想マシンのユーザーディレクトリに公開SSHキーを追加します。

    • CoreOS仮想マシンで実行されているコンテナの場合、XenCenterの仮想マシンの [全般] タブの [クラウド構成パラメーター] に公開キーを追加します。
    • Ubuntu 14.04、RHEL/CentOS/Oracle Linux 7、Debian 8で実行されているコンテナの場合、~/.ssh/authorized_keysに公開キーを追加します。
  3. XenCenterを実行しているマシンの%userprofile%ディレクトリに秘密SSHキーを追加し、キーの名前をContainerManagement.ppkに変更します。

Windows Serverコンテナの管理

Windows Serverコンテナは、Windows Server 2016ゲストオペレーティングシステムの一部です。これらにより、プロセスが独自の名前空間に分離されて、Windowsアプリケーションをカプセル化できます。Citrix Hypervisorコンテナ管理は、Windows Server 2016ゲストオペレーティングシステムでWindows Serverコンテナの監視と管理をサポートします。

注:

TLSサーバー証明書は特定のIPアドレスにバインドされるため、TLS通信用の1つまたは複数の静的IPアドレスを使用してWindows Server 2016仮想マシンを構成する必要があります。

コンテナ管理用にWindows Serverコンテナを準備するには、次の手順に従います。

  1. 仮想マシンにCitrix VM Toolsがインストールされ、ネットワークの要件とセキュリティの説明どおりに仮想マシンネットワークが構成されていることを確認します。

  2. Microsoft社のドキュメントの説明に従って、仮想マシン内にWindows Serverコンテナのサポートをインストールします。Windows ServerコンテナはHyper-Vコンテナではありません。

  3. 以下の内容の「daemon.json」という名称のファイルをフォルダー「C:\ProgramData\docker\config」に作成します:

    {
        "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. コンテナ管理用に仮想マシンを準備します。プール内のいずれかのホストのコントロールドメイン(dom0)で次のいずれかのコマンドを実行します。

    オプション1(単一ユーザー仮想マシンの場合):Citrix Hypervisorを使用して、この仮想マシンのTLS証明書を生成します。

    重要:

    このオプションは、単一ユーザーのみが仮想マシンにアクセスできる場合にのみ安全です。TLSサーバーとクライアントキーは、仮想CDを使用して仮想マシンに挿入されます。この情報は、準備中に悪意のあるユーザーによってコピーされる危険があります。

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

    ここで、vm-uuidは準備する仮想マシンです。画面の指示に従って、Windows Serverコンテナの準備プロセスを完了します。これには、dom0および仮想マシンとの相互通信が含まれます。

    オプション2:外部で生成されたTLS証明書を使用してCitrix Hypervisorを構成します。

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

    ここで、vm_uuidは準備する仮想マシンで、client_certはTLSクライアント証明書で、client_keyはTLSクライアントキーで、ca_certはCA証明書です。このオプションは、仮想マシン内で既にTLS用にDockerが構成されていることを前提としています。

ネットワークの要件とセキュリティ

重要:

コンテナ管理を機能させるために、ネットワークの分離に関するセキュリティ要件を緩和する必要がある場合があります。

仮想化環境の最大限のセキュリティを実現するために、仮想マシンからCitrix Hypervisorの管理ネットワーク(Citrix Hypervisorコントロールドメインを使用)を分離して、管理者がネットワークをパーティション化することをお勧めします。

コンテナ管理を有効にするには、これらの2つのネットワーク間のルートが必要ですが、これにより、管理ネットワーク(つまり、dom0)を攻撃する不正な仮想マシンのリスクが増大します。仮想マシンと管理ネットワークの間のトラフィックを許可するリスクを軽減するために、信頼できるソースのみが2つのネットワーク間の接続を開始できるようにファイアウォールルールを構成することをお勧めします。

次の場合、この機能を実稼働環境で使用しないでください。

  • ここで推奨されるネットワーク構成がリスクプロファイルと一致しない場合
  • 特定の使用シナリオで十分にこのルートを確保するために必要なネットワークまたはファイアウォールの専門知識が不足している場合

ネットワークのパーティション化とファイアウォール

そのほかの仮想マシンと同様に、必要な分離を実現するため、コンテナ管理仮想マシンをCitrix Hypervisorの管理ネットワークに直接接続しないでください。

コンテナ管理を機能させるには、Citrix Hypervisorのコントロールドメイン(dom0)から管理されている仮想マシンに到達できる必要があります。Linuxベースのオペレーティングシステムのコンテナを監視するには、ネットワーキングトポロジおよびファイアウォールが、dom0からコンテナ管理仮想マシンへのアウトバウンドSSH接続を許可する必要があります。Windows Serverコンテナを監視するには、ネットワーキングトポロジおよびファイアウォールが、dom0からコンテナ管理仮想マシンへのアウトバウンドDocker TLS(宛先TCPポート2376)接続を許可する必要があります。

仮想マシンと管理ネットワークの間のトラフィックを許可するリスクを軽減するために、すべてのトラフィックが外部のステートフルなファイアウォールを通過する必要があります。このファイアウォールは、特定のビジネスおよびセキュリティの要件に従って、専門家が手動で設定および構成する必要があります。

次のセクションで構成例を示します。

ネットワーク間の接続を保護するため、次のようにします。

  • Citrix Hypervisor管理ネットワーク(dom0など)と仮想マシンネットワーク(コンテナ管理仮想マシンなど)の間のすべての接続を無効化します。

次のように、コンテナ管理を有効化するための例外を追加します。

  • Linuxベースのオペレーティングシステムを監視するには、dom0でコンテナ管理仮想マシンへのアウトバウンドSSH(TCPポート22)接続(NEWとESTABLISHEDの両方)を許可します。

  • Windows Serverコンテナを監視するには、dom0でコンテナ管理仮想マシンへのアウトバウンドDocker TLS(TCPポート2376)接続(NEWとESTABLISHEDの両方)を許可します。

  • dom0によって開始された(ESTABLISHED)SSHおよびDocker TLSの接続に対するコンテナ管理仮想マシンの応答を許可します。

Linuxベースのオペレーティングシステムでの認証

Citrix Hypervisorのコンテナ管理では、コンテナ管理仮想マシンでの認証のために、プール固有の4096ビットの秘密/公開RSAキーペアが使用されます。秘密キーは、Citrix Hypervisorコントロールドメイン(dom0)に格納されます。各公開キーは、クラウド構成ドライブまたは~user/.ssh/authorized_keysファイルを使用して、準備中にコンテナ管理仮想マシンに登録されます。すべての秘密/公開キーペアと同様に、公開キーによってすべてのコンテナ管理仮想マシンにパスワードなしでアクセスできるため、公開キーを安全に保持する必要があります。この場合、現在管理されている仮想マシンと過去に管理されていた仮想マシンの両方へのアクセスが含まれます。

Citrix Hypervisorのコンテナ管理では、仮想マシン内で実行されているCitrix VM Toolsによって提案されたIPアドレスを使用して、コンテナ管理仮想マシンへのアクセスが試行されます。最初の接続後に、Citrix Hypervisorによってコンテナ管理仮想マシンの公開キーが格納され、以降の接続時にキーが一致するかどうかが検証されます。提案されたIPを使用してコンテナ管理仮想マシンのみにアクセスできることを確認します(IPソースガードなどの手段を使用)。ネットワークトポロジがこれを保証できない場合、管理者が、仮想マシンへの最初の接続時にコンテナ管理で取得したSSHホストキーを確認することをお勧めします。

このキーには、次のコマンドを使用してアクセスできます:

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

ここで、vm_uuidは仮想マシンのUUIDです。

Windows Serverコンテナの認証

Citrix Hypervisorでは、Windows Serverコンテナの監視および制御にSSLまたはTLSが使用されます。このインスタンスでは、Citrix HypervisorはSSL/TLSクライアントとして動作し、Windows Server仮想マシンはSSL/TLSサーバーとして動作します。キーはDom0と仮想マシンの両方に格納されます。

重要:

  • クライアントキーによって仮想マシンでDockerにパスワードなしでアクセスできるため、クライアントキーを安全に保持する必要があります。
  • サーバーキーによって仮想マシンへの監視接続が認証されるため、サーバーキーを安全に保持する必要があります。

Citrix Hypervisorのコンテナ管理で–generate-certsオプションを使用してTLS証明書とキーが生成されると、特定のプールおよび仮想マシン用に一時的なCA、サーバー、クライアントの証明書が生成されます。証明書ではsha256ハッシュが使用されます。また、証明書は最大で2×365日間有効で、その日数が過ぎると準備を繰り返す必要があります。TLS接続は、常にAES128-SHA暗号を使用して確立されます。

Citrix Hypervisorコンテナ管理とDockerを使用する場合は、次の点に注意してください。

  • コンテナの名前を変更しても、コンテナ管理ビューのアップデートはトリガーされません。また、Ubuntu 14.04では、XenCenter外部からコンテナを一時停止または一時停止解除しても、ビューがアップデートされることはありません。つまり、Citrix Hypervisorでは、現在の(名前変更/一時停止/一時停止解除された)コンテナの状態が表示されない場合があります。根本的な原因は、ビューがDockerイベント通知によってのみ更新されることです。回避策として、同じ仮想マシン上の無関係なコンテナで操作(開始や停止など)を実行することで、更新をトリガーできます。