[OpenShift Container Platform][IBM Cloud Pak for Integration][Linux]

ラップトップからキュー・マネージャーへの相互 TLS 接続のテスト

IBM® MQ Operatorを使用してキュー・マネージャーを作成した後、そのキュー・マネージャーに接続し、メッセージの書き込みと読み取りを行うことによって、そのキュー・マネージャーが機能しているかどうかをテストできます。 このタスクでは、ラップトップなどの Kubernetes クラスター外部のマシン上で IBM MQ サンプル・プログラムを実行することにより、それらのプログラムを使用して接続する方法について説明します。

始める前に

この例を完了するには、まず以下の前提条件を満たしておく必要があります。

  • IBM MQ clientをインストールします。 amqsputc コマンドと amqsgetc コマンドが必要です。これらのコマンドは、以下のように IBM MQ client の一部としてインストールできます。
  • 必要な鍵ファイルと証明書ファイルがマシン上のディレクトリーにダウンロードされていること、および鍵ストアのパスワードがわかっていることを確認してください。 例えば、これらのファイルは 、OpenSSLを使用して自己署名PKIを作成する際に作成されます
    • example-app1.p12
    • example-app1-chain.crt ( arm64 Apple Macを使用している場合のみ)
  • TLS を使用して構成されたキュー・マネージャーを OCP クラスターにデプロイします。例えば、 例: 相互 TLS 認証を使用したキュー・マネージャーの構成 の手順に従います。

本タスクについて

この例では、ラップトップなどの Kubernetes クラスター外部のマシン上で実行されている IBM MQ サンプル・プログラムを使用して、TLS で構成された QueueManager に接続し、メッセージの書き込みと取得を行います。

手順

  1. キュー・マネージャーが稼働していることの確認
    キュー・マネージャーがデプロイされます。 続行する前に、Running 状態であることを確認してください。 以下に例を示します。
    oc get qmgr exampleqm
  2. キュー・マネージャーのホスト名の検索
    自動的に作成される経路を使用して、OCP クラスターの外部からキュー・マネージャーの完全修飾ホスト名を検索するには、次のコマンドを使用します。 exampleqm-ibm-mq-qm
    oc get route exampleqm-ibm-mq-qm --template="{{.spec.host}}"
  3. IBM MQ クライアント・チャネル定義テーブル (CCDT) の作成
    以下の内容を含む ccdt.json というファイルを作成します。
    {
        "channel":
        [
            {
                "name": "MTLS.SVRCONN",
                "clientConnection":
                {
                    "connection":
                    [
                        {
                            "host": "<hostname from previous step>",
                            "port": 443
                        }
                    ],
                    "queueManager": "EXAMPLEQM"
                },
                "transmissionSecurity":
                {
                  "cipherSpecification": "ANY_TLS13",
                  "certificateLabel": "example-app1"
                },
                "type": "clientConnection"
            }
       ]
    }

    この接続では、 Red Hat® OpenShift Container Platform ルーターが listen しているポートであるため、ポート 443 が使用されます。 トラフィックは、ポート 1414 でキュー・マネージャーに転送されます。

    別のチャネル名を使用した場合は、それも調整する必要があります。 相互 TLS の例では、 MTLS.SVRCONN という名前のチャネルを使用します。

    詳しくは、 JSON 形式の CCDT の構成 を参照してください。

  4. 接続の詳細を構成するためのクライアント INI ファイルの作成
    現行ディレクトリーに mqclient.ini という名前のファイルを作成します。 このファイルは、 amqsputc および amqsgetcによって読み取られます。
    Channels:
      ChannelDefinitionDirectory=.
      ChannelDefinitionFile=ccdt.json
    SSL:
      OutboundSNI=HOSTNAME
      SSLKeyRepository=example-app1.p12
      SSLKeyRepositoryPassword=<password you used when creating the p12 file>

    SSLKeyRepositoryPasswordを PKCS#12を作成した際に選択したパスワードに更新してください。 暗号化されたパスワードを使用するなど、鍵ストアのパスワードを設定する方法は他にもあります。 詳しくは、 AIX®, Linux, and Windowsでの IBM MQ MQI client の鍵リポジトリー・パスワードの提供 を参照してください。

    Red Hat OpenShift Container Platform Router は、要求を IBM MQ キュー・マネージャーにルーティングするために SNI を使用することに注意してください。 OutboundSNI=HOSTNAMEは、 IBM MQ クライアントが、 IBM MQ Operator によって設定されたデフォルトルートをルーターが処理するために必要な情報を含めることを保証します。 詳しくは、 Red Hat OpenShift クラスターの外部からキュー・マネージャーに接続するための経路の構成を参照してください。

  5. arm64 Apple Macを使用している場合は、追加の環境変数を構成する必要があります。
    export MQSSLTRUSTSTORE=example-app1-chain.crt
    このファイルには、アプリケーションおよび CA 証明書を含む完全な証明書チェーンが含まれています。
  6. キューへのメッセージの書き込み
    以下のコマンドを実行します。
    /opt/mqm/samp/bin/amqsputc EXAMPLE.QUEUE EXAMPLEQM

    キュー・マネージャーへの接続が成功すると、以下の応答が出力されます。

    target queue is EXAMPLE.QUEUE

    任意のテキストを入力してから Enter を押す操作を何回か繰り返すことで、キューに複数のメッセージを書き込みます。

    書き込みを終了するには、Enter を 2 回押します。

  7. キューからのメッセージの取得
    以下のコマンドを実行します。
    /opt/mqm/samp/bin/amqsgetc EXAMPLE.QUEUE EXAMPLEQM
    前のステップで追加したメッセージがコンシュームされ、出力されます。 数秒後にコマンドが終了します。

結果

これで、TLS が有効になっているキュー・マネージャーの接続のテストが正常に完了し、クライアントからキュー・マネージャーにメッセージを安全に書き込んだり、取得したりできることが示されました。