6.3 eDirectoryコンテナのデプロイ

eDirectory DockerイメージのOSベースイメージはopenSUSE Leap 15.1です。eDirectoryイメージのtarファイルをDockerホストマシンにダウンロードする必要があります。tarballをダウンロードした後、次のコマンドを使用して、そのイメージをDockerのローカルレジストリにロードする必要があります。

# tar xf eDirectory_920.tar.gz
# docker load --input edir920.tar

eDirectory Dockerコンテナは、Docker Runコマンドでndsconfigユーティリティのすべてのパラメータを受け入れます。ndsconfigユーティリティの詳細については、ndsconfigユーティリティを使用してeDirectoryレプリカサーバを追加または削除するを参照してください。

メモ:Docker Runコマンドでndsconfigユーティリティの-wオプションを使用してパスワードを設定することはお勧めできません。このオプションを使用して設定したパスワードは、Docker inspectコマンドを使用してプレーンテキストで表示できます。管理者の資格情報を設定するには、管理者のFDNと管理者パスワードをプロンプトで指定する方法がより安全です。

eDirectory Dockerコンテナでは、次のndsconfigパラメータに対してデフォルト値が使用されます。したがって、Docker runコマンドではこれらのパラメータを設定しないでください。

  • 設定ファイル: /config/eDirectory/inst/conf/nds.conf

  • インスタンスの場所: /config/eDirectory/inst/data/data

  • DIB保存先: /config/eDirectory/inst/data/data/dib

メモ:インスタンスデータと環境設定をコンテナの/configフォルダに含めることが大切です。これは、eDirectoryコンテナの永続的な保存とアップグレードの機能を有効にするためです。詳細については、eDirectoryデータストレージの管理を参照してください。

eDirectoryコンテナのデフォルトのログファイルの場所は、/config/eDirectory/inst/data/logです。

eDirectoryをデプロイする前に、次の推奨事項を考慮する必要があります。

  • Dockerコンテナには、デフォルトではリソースの制約がありません。そのため、すべてのコンテナには、ホストのカーネルによって提供されるすべてのCPUリソースおよびメモリリソースへのアクセスが提供されます。コンテナで使用できるリソースの量に制限を設定することにより、実行中の1つのコンテナによってより多くのリソースが消費され、実行中の他のコンテナがリソース不足になることがないようにする必要があります。

    • Docker runコマンドの--memoryフラグを使用して、Dockerコンテナで、コンテナによって使用されるメモリに対してハード制限が適用されるようにする必要があります。

    • Docker runコマンドの--cpuset-cpusフラグを使用して、Dockerコンテナで、実行中のコンテナによって使用されるCPUの容量に制限が適用されるようにする必要があります。

    • --pids-limitには300を設定して、任意の時点でコンテナ内で生成されるカーネルスレッドの数を制限する必要があります。これは、DoS攻撃を防ぐためです。

  • Docker runコマンドの--restartフラグを使用して、障害発生時のコンテナ再起動ポリシーを5に設定する必要があります。

  • eDirectoryコンテナは、必ず、コンテナの起動後にヘルスステータスが[正常]と表示されてから使用する必要があります。コンテナのヘルスステータスを確認するには、次のコマンドを実行します。

    docker ps <container_name/ID>
  • 通常、DockerコンテナではLinux機能のデフォルトリストが有効になっています。eDirectoryコンテナで次の機能のみが有効になっていることを確認し、その他の機能をドロップする必要があります。

    • AUDIT_WRITE

    • CHOWN

    • DAC_OVERRIDE

    • SETGID

    • SETUID

    • NET_BIND_SERVICE

    • SYS_CHROOT (SLPサービスを有効にしている場合のみ)

    • SYS_PTRACE (Linux ptraceを活用するユーティリティを使用する場合のみ。gdbなど)

    機能の追加とドロップの詳細については、「Runtime privilege and Linux capabilities」を参照してください。

  • eDirectoryコンテナは、常にroot以外のユーザ(nds)として起動されます。追加のセキュリティ対策として、デーモンでのユーザ名前空間の再マッピングを有効にして、コンテナ内からの特権昇格攻撃を防止します。ユーザ名前空間の再マッピングの詳細については、「ユーザ名前空間でコンテナを分離する」を参照してください。

メモ:以前のバージョンのスタンドアロンeDirectoryを使用している場合は、eDirectory 9.2 Dockerコンテナを使用して、セットアップをDocker環境に移行することはできません。

eDirectory Dockerコンテナでは、マルチホストのDocker環境にデプロイするためのホストおよびオーバーレイネットワークドライバがサポートされています。

6.3.1 ホストネットワークでのeDirectoryコンテナのデプロイ

eDirectoryコンテナは、Linux上でのみホストネットワークドライバを使用してハイブリッド環境にデプロイできます。Dockerネットワークの詳細については、「Configure Networking」を参照してください。

メモ:ホストネットワークはWindowsではサポートされていません。

ハイブリッド環境は、同じツリーにeDirectoryサーバのレガシデプロイメントおよびコンテナベースのデプロイメントの両方を組み合わせたものです。ハイブリッドネットワークを使用すると、レガシeDirectoryデプロイメントをすでにホストしている既存の運用環境に、eDirectory Dockerコンテナをシームレスに導入できます。Dockerホストネットワーキングでは、ホストのネットワークスタックがレガシeDirectoryデプロイメントとコンテナ化されたeDirectoryデプロイメントの両方によって共有されているため、サービスポートを再使用することはできません。また、コンテナ化されたeDirectoryサーバは、クライアントとツリー内の他のサーバに対して、レガシeDirectoryサーバとして表示されます。

次の例は、eDirectoryコンテナを使用して新しいツリーを作成する方法を示しています。

docker run -it --name eDir-container-1 --restart on-failure:5 --memory="700M" --cpuset-cpus="1" --pids-limit="300" --volume eDir-volume1:/config --network=host edirectory:9.2.0 new -t docker-tree1 -n novell -S m1 -B 164.99.1.1@1524 -o 1028 -O 1030 -L 1389 -l 1636 --configure-eba-now yes

次の例は、eDirectoryコンテナレプリカサーバを既存のツリーに追加する方法を示しています。

docker run -it --name eDir-container-2 --restart on-failure:5 --memory="700M" --cpuset-cpus="1" --pids-limit="300" --volume eDir-volume2:/config --network=host edirectory:9.2.0 add -t docker-tree1 -n novell -S m2 -B 164.99.10.10@2524 -o 2028 -O 2030 -L 2389 -l 2636 --configure-eba-now yes -p 164.99.1.1@1524

メモ:

  • --networkフラグは、ホストネットワーキングドライバを使用してコンテナをデプロイするために使用します。

  • 同じDockerホスト上で実行されているeDirectoryコンテナ間で、サービスのポート番号を繰り返すことはできません。

  • 上記のコマンドで使用するIPアドレスは、コンテナが実行されることを想定しているDockerホストマシンのものです。

図 6-1 ホストネットワークでのeDirectoryコンテナのデプロイ

6.3.2 ユーザ定義のオーバーレイネットワークでのeDirectoryコンテナのデプロイ

ユーザ定義のオーバーレイネットワークを使用して、複数のDockerデーモンホスト上で実行される、eDirectoryコンテナの分散ネットワークを作成できます。ユーザ定義のオーバーレイネットワーク内のeDirectoryコンテナは、LinuxとWindowsの両方にデプロイできます。DockerホストをSwarmに参加させ、それらのホスト上で実行されているeDirectoryコンテナがシームレスに通信できるようにするには、Docker Swarmサービスを使用する必要があります。Dockerオーバレイネットワークドライバの詳細については「Use Overlay Networks」を参照してください。

メモ:Docker Swarmのスケーリングとスケジューリングの機能は、eDirectoryコンテナでは認定されていません。Swarmサービスによるホスト間でのeDirectoryコンテナのマイグレーションもサポートされていません。

前提条件

  • 少なくとも1つのDockerホストをmanagerとして設定し、他のホストをworkerとして設定してDocker Swarmを作成する必要があります。

  • myOverlayという名前のアタッチ可能なオーバーレイネットワークを作成します。

  • Docker Swarm内でクラスタ管理と通信を行うため、Dockerホスト間のファイアウォールで次のポートを開きます。

    • TCPポート2377

    • TCPおよびUDPポート7946

    • UDPポート4789

  • オーバーレイネットワークにデプロイされたコンテナには、myOverlayサブネットに属するスタティック内部IPアドレスを割り当てる必要があります。

Swarmをデプロイし、ユーザ定義のオーバーレイネットワークを作成する方法については、「Networking with overlay networks」を参照してください。

ユーザ定義のオーバーレイネットワークにeDirectoryコンテナをデプロイする前に、次の推奨事項を考慮する必要があります。

  • eDirectoryコンテナのマスタレプリカサーバとそのR/Wレプリカを同じオーバレイネットワーク内にデプロイする必要があります。オーバーレイネットワークの外部で実行されている他のスタンドアロンのeDirectoryサーバまたはコンテナとの通信はサポートされません。

  • iManager Dockerコンテナは、eDirectory管理用の同じユーザ定義のオーバーレイネットワークにデプロイすることをお勧めします。iManager Dockerコンテナのデプロイ方法の詳細については、「Deploying iManager Using Docker Container」を参照してください。

  • 次のコマンドを実行すると、ユーザ定義のオーバーレイネットワークのネットワークに関する詳細を確認できます。

    docker inspect myOverlay

次のコマンドは、eDirectoryコンテナを使用して新しいツリーを作成する方法を示しています。

docker run -it --name eDir-container-1 --restart on-failure:5 --memory="700M" --cpuset-cpus="1" --pids-limit="300" --volume eDir-volume1:/config --network=myOverlay --ip=10.0.0.5 edirectory:9.2.0 new -t docker-tree1 -n novell -S m1 –b 524 -o 8028 -O 8030 -L 389 -l 636 --configure-eba-now yes

次のコマンドは、上で作成したeDirectoryコンテナのIPアドレスを取得する方法を示しています。

docker inspect eDir-container-1 --format {{.NetworkSettings.Networks.myOverlay.IPAddress}}

表示されたIPアドレスは、eDirectoryコンテナのレプリカサーバをツリーに追加するときに、remote_IP_Addressとして使用できます。

次のコマンドは、eDirectoryコンテナレプリカサーバを既存のツリーに追加する方法を示しています。

docker run -it --name eDir-container-2 --restart on-failure:5 --memory="700M" --cpuset-cpus="1" --pids-limit="300" --volume eDir-volume2:/config --network=myOverlay --ip=10.0.0.6 edirectory:9.2.0 add -t docker-tree1 -n novell -S m2 –b 524 -o 8028 -O 8030 -L 389 -l 636 --configure-eba-now yes -p <remote_IP_Address>

メモ:

  • --networkフラグは、オーバーレイネットワークドライバを使用してmyOverlayというユーザ定義のオーバーレイネットワーク内にコンテナをデプロイするために使用されます。

  • 上の例では、--ipフラグを使用して、myOverlayサブネットに属するコンテナにスタティック内部IPアドレスを割り当てます。

図 6-2 ユーザ定義のオーバーレイネットワークでのeDirectoryコンテナのデプロイ