[OpenShift Container Platform][Continuous Delivery][IBM Cloud Pak for Integration]

Red Hat OpenShift クラスターの外部からキュー・マネージャーに接続するためのルートの構成

Red Hat OpenShift クラスターの外部から IBM® MQ キュー・マネージャーにアプリケーションを接続するには、 Red Hat® OpenShift® 経路が必要です。 IBM MQ キュー・マネージャーおよびクライアント・アプリケーションで TLS を有効にする必要があります。SNI は、TLS 1.2 以上のプロトコルが使用されている場合にのみ TLS プロトコルで使用できるためです。 Red Hat OpenShift Container Platform Router は、 IBM MQ キュー・マネージャーに要求をルーティングするために SNI を使用します。

本タスクについて

重要: 本書は、 IBM MQ クライアントのバージョン 9.2.1 Continuous Delivery 以降に適用されます。 クライアントがバージョン 9.2.0 Long Term Support 以前を使用している場合は、 IBM MQ 9.1 資料のページ Red Hat OpenShift クラスターにデプロイされたキュー・マネージャーへの接続を参照してください。

[MQ 9.2.1 Dec 2020]Red Hat OpenShift ルートに必要な設定は、クライアントアプリケーションの Server Name Indication (SNI) の動作によって異なります。 IBM MQ は、構成およびクライアント・タイプに応じて、2 つの異なる SNI ヘッダー設定をサポートします。 SNI ヘッダーは、クライアントの宛先のホスト名に設定されるか、または IBM MQ チャネル名に設定されます。 IBM MQ がチャネル名をホスト名にマップする方法については、 IBM MQ が複数の証明書機能を提供する方法を参照してください。

[MQ 9.2.1 Dec 2020]SNIヘッダーが IBM MQ チャネル名に設定されるか、ホスト名に設定されるかは、 OutboundSNI 属性を使用して制御されます。 可能な値は、 OutboundSNI=CHANNEL (デフォルト値) または OutboundSNI=HOSTNAMEです。 詳しくは、 クライアント構成ファイルの SSL スタンザを参照してください。 CHANNEL および HOSTNAME は、使用する正確な値です。これらは、実際のチャネル名またはホスト名に置き換える変数名ではありません。

[MQ 9.2.1 Dec 2020]
OutboundSNI 設定が異なるクライアントの動作
OutboundSNIHOSTNAME に設定されていて、接続名でホスト名が指定されていると、以下のクライアントではホスト名の SNI が設定されます。
  • C クライアント
  • 非管理対象モードの .NET クライアント
  • Java/JMS クライアント
OutboundSNIHOSTNAME に設定されていて、接続名で IP アドレスが使用されていると、以下のクライアントではブランクの SNI ヘッダーが送信されます。
  • C クライアント
  • 非管理対象モードの .NET クライアント
  • Java/JMSクライアント ( ホスト名の逆引き DNS ルックアップを実行できない )

OutboundSNICHANNELに設定されているか、設定されていない場合、代わりに IBM MQ チャネル名が使用され、ホスト名または IP アドレス接続名のどちらが使用されても常に送信されます。

以下のクライアント・タイプは、SNI ヘッダーを IBM MQ チャネル名に設定することをサポートしていないため、 OutboundSNI 設定に関係なく、常に SNI ヘッダーをホスト名に設定しようとします。
  • AMQP クライアント
  • XR クライアント
  • 管理対象モードの.NETクライアント Long Term SupportIBM MQ 9.2.0 Fix Pack 4の前 およびContinuous DeliveryIBM MQ 9.2.3の前です)
[MQ 9.2.3 Jul 2021][MQ 9.2.0.4 Nov 2021]

IBM MQ 9.2.0 Fix Pack 4 for Long Term Support および IBM MQ 9.2.3 for Continuous Delivery以降、 IBM MQ 管理対象 .NET クライアントが更新され、 OutboundSNI プロパティーが HOSTNAMEに設定されている場合に SERVERNAME がそれぞれのホスト名に設定されるようになりました。これにより、 IBM MQ 管理対象 .NET クライアントは Red Hat OpenShift 経路を使用してキュー・マネージャーに接続できます。 IBM MQ 9.2.0 Fix Pack 4では、 OutboundSNI プロパティーが追加され、 mqclient.ini ファイルからのみサポートされることに注意してください。.NET アプリケーションからこのプロパティーを設定することはできません。

[MQ 9.2.5 Feb 2022]

クライアント・アプリケーションが IBM MQ Internet Pass-Thru (MQIPT) を介して Red Hat OpenShift クラスターにデプロイされたキュー・マネージャーに接続する場合、 MQIPT は、ルート定義内の SSLClientOutboundSNI プロパティーを使用して、 SNI をホスト名に設定するように構成することができます。

OutboundSNI、複数の証明書、および Red Hat OpenShift 経路

IBM MQ は、SNI ヘッダーを使用して複数の証明書機能を提供します。 アプリケーションが、CERTLABL フィールドを介して別の証明書を使用するように構成されている IBM MQ チャネルに接続する場合、アプリケーションは CHANNEL の OutboundSNI 設定を使用して接続する必要があります。

Red Hat OpenShift 経路構成に HOSTNAME SNI が必要な場合は、 IBM MQ の複数の証明書機能を使用できず、 IBM MQ チャネル・オブジェクトに CERTLABL 設定を設定できません。

OutboundSNI に CHANNEL 以外の設定を持つアプリケーションが、証明書ラベルが構成されたチャネルに接続すると、そのアプリケーションは MQRC_SSL_INITIALIZATION_ERROR で拒否され、キュー・マネージャーのエラー・ログに AMQ9673 メッセージが出力されます。

IBM MQ が複数の証明書機能を提供する方法について詳しくは、 IBM MQ が複数の証明書機能を提供する方法 を参照してください。

SNI を MQ チャネルに設定するクライアント・アプリケーションには、接続先のチャネルごとに新しい Red Hat OpenShiftルートが作成されている必要があります。 また、 Red Hat OpenShift Container Platform クラスター全体で固有のチャネル名を使用して、正しいキュー・マネージャーにルーティングできるようにする必要があります。

IBM MQがチャンネル名とSNIヘッダを対応させるため、MQチャンネル名は小文字で終わらないようにすることが重要です。

それぞれの新規Red Hat OpenShiftルートに必要なホスト名を判別するには、各チャネル名を SNI アドレスにマップする必要があります。 詳しくは、 IBM MQ が複数の証明書機能を提供する方法 を参照してください。

次に、クラスターに以下の yaml を適用して、チャネルごとに新しい Red Hat OpenShift 経路を作成する必要があります。
  apiVersion: route.openshift.io/v1
  kind: Route
  metadata:
    name: <provide a unique name for the Route>
    namespace: <the namespace of your MQ deployment>
  spec:
    host: <SNI address mapping for the channel>
    to:
      kind: Service
      name: <the name of the Kubernetes Service for your MQ deployment (for example "<Queue Manager Name>-ibm-mq")>
    port:
      targetPort: 1414
    tls:
      termination: passthrough

クライアント・アプリケーション接続の詳細の構成

以下のコマンドを実行すると、クライアント接続で使用するホスト名を判別できます。
oc get route <Name of hostname based Route (for example "<Queue Manager Name>-ibm-mq-qm")> 
-n <namespace of your MQ deployment> -o jsonpath="{.spec.host}"

クライアント接続用のポートは、 Red Hat OpenShift Container Platform ルーターが使用するポート (通常は 443) に設定する必要があります。