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 に接続し、メッセージの書き込みと取得を行います。
手順
- キュー・マネージャーが稼働していることの確認
キュー・マネージャーがデプロイされます。 続行する前に、
Running 状態であることを確認してください。 以下に例を示します。
oc get qmgr exampleqm
- キュー・マネージャーのホスト名の検索
自動的に作成される経路を使用して、OCP クラスターの外部からキュー・マネージャーの完全修飾ホスト名を検索するには、次のコマンドを使用します。
exampleqm-ibm-mq-qmoc get route exampleqm-ibm-mq-qm --template="{{.spec.host}}"
- 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 の構成 を参照してください。
- 接続の詳細を構成するためのクライアント 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 クラスターの外部からキュー・マネージャーに接続するための経路の構成を参照してください。
- arm64 Apple Macを使用している場合は、追加の環境変数を構成する必要があります。
export MQSSLTRUSTSTORE=example-app1-chain.crt
このファイルには、アプリケーションおよび CA 証明書を含む完全な証明書チェーンが含まれています。
- キューへのメッセージの書き込み
以下のコマンドを実行します。
/opt/mqm/samp/bin/amqsputc EXAMPLE.QUEUE EXAMPLEQM
キュー・マネージャーへの接続が成功すると、以下の応答が出力されます。
target queue is EXAMPLE.QUEUE
任意のテキストを入力してから Enter を押す操作を何回か繰り返すことで、キューに複数のメッセージを書き込みます。
書き込みを終了するには、Enter を 2 回押します。
- キューからのメッセージの取得
以下のコマンドを実行します。
/opt/mqm/samp/bin/amqsgetc EXAMPLE.QUEUE EXAMPLEQM
前のステップで追加したメッセージがコンシュームされ、出力されます。 数秒後にコマンドが終了します。
結果
これで、TLS が有効になっているキュー・マネージャーの接続のテストが正常に完了し、クライアントからキュー・マネージャーにメッセージを安全に書き込んだり、取得したりできることが示されました。