Hitachi

JP1 Version 12 JP1/Base 運用ガイド


付録O.5 PodmanコンテナにJP1/Baseを導入する場合の注意事項

PodmanコンテナにJP1/Baseを導入し,Podmanホストまたは他のホストと連携する場合には,次の前提条件と,設定手順が必須となります。

なお,Podman が導入されているホストをPodmanホスト,Podmanが提供するコンテナをコンテナと呼びます。

〈この項の構成〉

(1) 前提条件

JP1/Baseを導入したコンテナをコンテナ間以外で連携する場合は,両方向から問題なくTCP/IP 通信ができるよう設定してください。例として次の方法を示します。

(a) ポートフォワーディング機能を使用した方法

  1. コンテナごとに,連携するホストと通信できるIPアドレスを静的に付与

    JP1/Baseを導入したコンテナをコンテナ間以外で連携する場合は,コンテナごとに対応するIPアドレスを,Podmanホストに静的に割り当ててください。

  2. 明示的にIPアドレスを指定したPodmanコンテナへのポートフォワーディング設定

    コンテナをコンテナ間以外で連携する場合は,手順1で割り当てたIPアドレスに対して,Podmanホスト側のJP1/Baseが使用するポート番号から,コンテナ側のJP1/Baseが使用するポート番号へのポートフォワーディングの設定が必須となります。

    JP1/Baseの使用するポートについては,「付録C ポート番号一覧」を参照してください。

    # podman run -p 外部IPアドレス:外部IPアドレス上のJP1/Baseが使用するポート:コンテナ上のJP1/Baseが使用するポート ...

    -p:コンテナ内のJP1/Baseのポートを,外部から通信可能なIPアドレス上のポートにマップします。

    # podman run --privileged -p xxx.xxx.xxx.xxx:20098:20098
      -p xxx.xxx.xxx.xxx:20099:20099 -p xxx.xxx.xxx.xxx:20237:20237
      -p xxx.xxx.xxx.xxx:20238:20238 -p xxx.xxx.xxx.xxx:20239:20239
      -p xxx.xxx.xxx.xxx:20240:20240 -p xxx.xxx.xxx.xxx:20306:20306
      -p xxx.xxx.xxx.xxx:20600:20600 --name コンテナ名 --hostname ホスト名 -id ベースイメージ名:タグ名

    なお,xxx.xxx.xxx.xxxは手順1でPodmanホストに静的に割り当てたIPアドレスです。

    各オプションの詳細についてはpodman.io掲載のリリースノートを参照してください。

  3. コンテナを特権モードで起動

    JP1/Baseの一部のコマンドで,特権モードでのコンテナ起動が必須となります。JP1/Baseを導入するコンテナは特権モード(--privileged)で起動してください。設定例は手順2を参照してください。

  4. コンテナからの転送されたJP1イベントについて

    コンテナに導入されたJP1/Baseから,他のホストにJP1イベントを転送する場合,転送されたJP1イベントの「発行元IPアドレス」に手順1および手順2で設定されたIPアドレスが設定されません。そのため,転送先ホストでは,コンテナから転送されたイベントの「発行元IPアドレス」を使用した運用は避けてください。

(b) Podmanホスト上でmacvlanブリッジを使用する方法

  1. コンテナを特権モードで起動

    JP1/Baseの一部のコマンドで,特権モードでのコンテナ起動が必須となります。JP1/Baseを導入するコンテナは特権モード(--privileged)で起動してください。設定例を次に示します。

    # podman run --privileged --name コンテナ名 --hostname ホスト名 -id ベースイメージ名:タグ名
  2. Podmanホストでmacvlanを設定し,VNICを作成する。

    # ip link add link 外部へ接続するIPアドレスが設定されているIF name VNIC名 type macvlan mode private
  3. PodmanホストでVNICをコンテナに割り当てる。

    # ID=コンテナID
    # ip link set VNIC名 netns $(podman inspect --format "{{.State.Pid}}" $ID)
  4. Podmanホストからコンテナを操作し,割り当てられたVNICにIPアドレスを付与する。

    # podman exec $ID yum install -y iproute libmnl libnfnetlink libnetfilter_conntrack iptables
    # podman exec $ID ip addr add dev VNIC名 付与するIPアドレス/ネットマスク
    # podman exec $ID ip link set VNIC名 up

    各IPアドレス設定コマンドをインストール済みの場合は不要です。

  5. コンテナからの転送されたJP1イベントについて

    コンテナに導入されたJP1/Baseから,他のホストにJP1イベントを転送する場合,転送されたJP1イベントの「発行元IPアドレス」に手順1および手順2で設定されたIPアドレスが設定されません。そのため,転送先ホストでは,コンテナから転送されたイベントの「発行元IPアドレス」を使用した運用は避けてください。

(2) 設定手順

  1. コンテナ内のJP1/Baseの認証サーバーを再設定する。

    DockerfileでJP1/Baseをインストールする場合,インストール時(Podmanイメージ作成時)とコンテナ起動時でホスト名が異なることで,インストール時に設定されるプライマリー認証サーバー名が,コンテナ起動時の物理ホスト名と異なる状態となります。そのため,認証サーバーをコンテナ内で使用する場合は,コンテナ起動時のホスト名を再度設定する必要があります。

    次のコマンドラインの実行が必須です。

    # /opt/jp1base/bin/jbssetusrsrv `hostname`
  2. コンテナ内のJP1/Baseで,連携するホストをJP1hosts2に設定する。

    コンテナ内のhostsファイルは,起動(start)・停止(stop)のたびにオーバーライトされ,他のホストの記載が消えてしまいます。そのため,連携するホスト情報はjp1hosts2に設定してください。

  3. 連携するホストで,コンテナのホスト名から手順1および手順2によって設定されたコンテナに対応するIPアドレスを名前解決できるよう設定する。

    Podmanコンテナが外部からの要求を受け付ける場合,コンテナに対応するIPアドレスで待ち受けます。そのため,連携するホスト側では,コンテナのホスト名からコンテナに対応するIPアドレスを名前解決できるよう設定してください。

  4. コンテナの起動について

    Podmanコンテナ起動時にJP1/Baseのサービス自動起動機能は使用できません。コンテナ起動後に,JP1/Baseの起動コマンドからJP1/Baseのサービスを起動してください。もしくは,Podmanコンテナ起動時に実行するコマンドをシェルにして,そのシェルからJP1/Baseの起動コマンドを実行するなどを検討してください。

    JP1/Baseの起動コマンドについては,「7.2 JP1/Baseを起動および終了する(UNIXの場合)」を参照してください。

  5. コンテナの停止について

    JP1/Baseの終了コマンドからJP1/Baseのサービスを停止後,コンテナを停止してください。

    JP1/Baseの終了コマンドについては,「7.2 JP1/Baseを起動および終了する(UNIXの場合)」を参照してください。

  6. コンテナ同士の連携について

    Podmanでは、コンテナ・リンク機能(--link)は非サポートです。コンテナ同士の連携は,ホスト名とコンテナのIPアドレスをマッピングするよう各コンテナの/etc/hostsファイルを編集してください。