IBM Cloud Docs
使用 IBM Cloud Satellite 连接器连接到内部部署队列管理器

使用 IBM Cloud Satellite 连接器连接到内部部署队列管理器

Satellite 连接器是不推荐使用的服务 IBM Cloud Secure Gateway 的替换服务- 请参阅声明

Satellite 连接器提供用于在 IBM Cloud 服务与本地应用程序之间建立安全连接的端点。

部署到 IBM Cloud 部署位置 的 IBM MQ on Cloud 队列管理器可以使用 Satellite 连接器连接到安全的本地应用程序。

此图显示了云上的 IBM MQ 队列管理器,使用 Satellite 连接器连接到本地应用程序

Satellite 连接器端点仅在 IBM Cloud 专用端点网络中可接触,并且只能从 IBM Cloud中访问。 使用 IBM Cloud Satellite 连接器将云上的 IBM MQ 队列管理器连接到内部部署队列管理器时,必须从 IBM Cloud 队列管理器启动通道以对此进行说明。 本地网络中的 Satellite 连接器代理程序将连接路由到本地队列管理器的正确端点。

要实现此目的,可以使用以下通道定义:

  • 请求者 (云)-服务器 (本地)
    • 此模式支持从本地到云的消息流。
    • 向请求者通道提供 Satellite 连接器的主机名和端口作为其连接详细信息。
    • 服务器通道由请求者通道启动。
  • 发送方 (云)-接收方 (本地)
    • 此模式支持从云到本地的消息流。
    • 将为发送方通道提供 Satellite 连接器的主机名和端口作为其连接详细信息。
    • 接收方通道由发送方通道启动。

准备工作

以下方案有四个主要组件: 云队列管理器,本地队列管理器,Satellite 连接器实例和 Satellite 连接器代理程序。

  1. IBM MQ on Cloud on Cloud 服务实例中的云托管队列管理器。
  1. 在本地环境中设置的 IBM MQ 队列管理器。
  • 在以下步骤中,本地队列管理器的名称称为 ONPREM
  • 遵循以下 指示信息 在配置了 TLS 的容器中设置 IBM MQ 队列管理器。
  1. 在 IBM Cloud 帐户中创建 Satellite 连接器
  2. 在本地环境中设置 Satellite 连接器代理程序
  3. 在 Satellite 连接器实例中设置 用户端点
  • 如果您正在使用 IBM MQ 容器,请运行以下命令以获取其 IP 地址
  • docker inspect <container-id> | grep IPAddress

要在两个队列管理器之间启用连接,必须定义可通过 Satellite 连接器创建的 TLS 隧道进行连接的通道。 在每个队列管理器上,还必须配置本地和远程队列配置,以启用每个队列管理器之间的消息流。

设置本地队列管理器

要设置本地队列管理器,需要完成以下步骤:

  • 将云队列管理器公用证书添加到内部部署队列管理器信任库。
  • 配置队列以将消息发送到云队列管理器
  • 定义从云队列管理器启动的服务器通道,以允许将消息从本地发送到云
  • 设置通道认证记录以允许来自云队列管理器的连接
  • 定义从云队列管理器接收消息的本地队列
  • 定义接收方通道,以供云队列管理器使用发送方通道进行连接,以启用从云到内部部署的消息流量
  • 设置接收方通道的通道认证记录
  • 刷新安全设置以启用新的 SSL 配置

如果尚未设置队列管理器,请遵循以下 指示信息 在启用了 TLS 的容器中设置 IBM MQ。

将云队列管理器公用证书添加到本地队列管理器密钥库

要在两个队列管理器之间启用相互 TLS,我们必须将公用证书添加到彼此各自的信任库配置中。

获取云队列管理器的公用证书;

  • 在 IBM Cloud 服务控制台中登录到服务实例
  • 单击表中队列管理器的行以打开其详细信息页面
  • 单击 密钥库,然后查找前缀为 Default: 的证书。
  • 单击 操作 图标 "操作" 图标,然后单击 下载公用证书
  • 将此证书保存在适当的位置并继续。

下载后,现在可以将此证书添加到本地队列管理器的密钥库。

如果已设置 IBM MQ 容器,那么可以遵循以下步骤将证书添加到其信任库。

docker cp qmgrcert <container-id>:/run/runmqserver/tls

docker exec -ti <container-id> bash

cd /run/runmqserver/tls
runmqakm -cert -add -db key.kdb -stashed -label ibmwebspeheremqcloud -file /run/runmqserver/tls/qmgrcert.pem

使用以下命令检查密钥库的内容,请参阅示例输出以查看典型响应的外观。

runmqakm -cert -list -db key.kdb -stashed

Certificates found
* default, - personal, ! trusted, # secret key
!	ibmwebspeheremqcloud
!	"CN=R3,O=Let's Encrypt,C=US"
!	"CN=ISRG Root X1,O=Internet Security Research Group,C=US"
-	mykey

在本地队列管理器上定义队列

在本地队列管理器上启动 runmqsc,并运行以下命令以创建所需的队列。

  • 名为 "TO.CLOUD" 是通过通道发送消息的传输队列。
  • 名为 "CLOUD" 的远程队列是我们放置要发送到云队列管理器的消息的位置。
DEFINE QLOCAL(TO.CLOUD) USAGE(XMITQ)
DEFINE QREMOTE(CLOUD) RNAME(CLOUD) RQMNAME('CLOUD') XMITQ(TO.CLOUD)

使 runmqsc 会话保持打开状态,然后继续执行下一步。

在本地队列管理器上定义服务器通道

定义从云队列管理器上的请求者通道连接的服务器通道

DEFINE CHANNEL(ONPREM.TO.CLOUD) CHLTYPE(SVR) XMITQ(TO.CLOUD) TRPTYPE(TCP) SSLCIPH(ANY_TLS12_OR_HIGHER) SSLCAUTH(REQUIRED) HBINT(15) KAINT(15) DISCINT(0)

接下来,定义通道认证记录以允许远程队列管理器连接到新通道。

SET CHLAUTH(ONPREM.TO.CLOUD) TYPE(QMGRMAP) QMNAME('CLOUD') ACTION(ADD) USERSRC(CHANNEL)

在本地队列管理器上定义本地队列

要从云队列管理器接收消息,请定义名为 ONPREM 的本地队列。

DEFINE QLOCAL(ONPREM)

在本地队列管理器上定义接收方通道

需要接收方通道以允许将消息从云队列管理器发送到本地队列管理器。

DEFINE CHANNEL(CLOUD.TO.ONPREM) CHLTYPE(RCVR) TRPTYPE(TCP) SSLCIPH(ANY_TLS12_OR_HIGHER) SSLCAUTH(REQUIRED) CERTLABL('mykey') HBINT(15) KAINT(15)

为此通道设置必需的通道认证记录。

SET CHLAUTH(CLOUD.TO.ONPREM) TYPE(QMGRMAP) QMNAME('CLOUD') ACTION(ADD) USERSRC(CHANNEL)

现在,请刷新 TLS 安全配置,确保在队列管理器上更新密钥库文件中的证书数据。

REFRESH SECURITY TYPE(SSL)

从此 runmqsc 会话中退出,并继续执行将在其中设置云队列管理器的后续步骤。

设置云队列管理器

接下来,现在是创建和配置云队列管理器及其相应通道和队列以启用两个队列管理器之间的连接的时候了。

将本地证书上载到云队列管理器

要在云队列管理器上设置相互 TLS 配置,必须上载本地队列管理器的公用证书。

首先访问本地队列管理器并抽取其证书的副本,将此证书复制到本地工作空间,然后上载到云队列管理器。

  • 访问本地环境,以下是针对 IBM MQ 队列管理器容器运行命令的示例。
docker exec <container> bash

cd /run/runmqserver/tls

runmqakm -cert -extract -db key.kdb -stashed -label mykey -target onpremcert.pem -format ascii -fips

exit

然后,将该文件复制到本地工作站。

docker cp <container>:/run/runmqserver/tls/onpremcert.pem onpremcert.pem
  • 在 Web 浏览器中,转至 IBM Cloud 控制台并找到 IBM MQ on Cloud 服务实例。
  • 从队列管理器列表中,单击包含队列管理器的行以转至其详细视图,然后单击 信任库 选项卡。
  • 单击 导入证书,然后单击 浏览文件,找到在先前步骤中下载的 onpremcert.pem 文件,然后选择 it.s
  • 然后,单击下一步。 将证书标签设置为 ibmmqonprem,然后单击 保存

新导入的证书现在应显示在信任库中的证书列表中,并且应显示为可信证书

连接到使用 runmqsc 的云队列管理器

要执行云队列管理器的设置,您需要连接 runmqsc 实例以应用必要的配置。

遵循以下 指示信息 来配置 runmqsc 以使用标准“单向”TLS 连接。

配置并连接到云队列管理器后,继续执行后续步骤。

在云队列管理器上定义本地队列

要从本地队列管理器接收消息,必须定义本地队列。 此队列与本地队列管理器上的远程队列的名称相匹配。

DEFINE QLOCAL(CLOUD)

在云队列管理器上定义请求者通道

接下来,在云队列管理器上定义请求者通道。 这用于启动与远程内部部署队列管理器的连接。

DEFINE CHANNEL(ONPREM.TO.CLOUD) CHLTYPE(RQSTR) CONNAME('<connector-hostname>(<port>)') TRPTYPE(TCP) SSLCIPH(ANY_TLS12_OR_HIGHER) SSLCAUTH(REQUIRED) HBINT(15) KAINT(15)

应用此通道的相应通道认证记录。

SET CHLAUTH(ONPREM.TO.CLOUD) TYPE(QMGRMAP) QMNAME('CLOUD') ACTION(ADD) USERSRC(CHANNEL)

在云队列管理器上定义队列

在以云队列管理器为目标的 runmqsc 中,运行以下命令以创建所需的队列

  • 名为 "TO.ONPREM" 是通过通道发送消息的传输队列。
  • 名为 "ONPREM" 的远程队列是我们放置要发送到本地队列管理器的消息的位置。
DEFINE QLOCAL(TO.ONPREM) USAGE(XMITQ)
DEFINE QREMOTE(ONPREM) RNAME(ONPREM) RQMNAME('ONPREM') XMITQ(TO.ONPREM)

在云队列管理器上定义发送方通道

在同一 runmqsc 会话中,定义允许云队列管理器启动与内部部署队列管理器接收方通道的连接的发送方通道。

DEFINE CHANNEL(CLOUD.TO.ONPREM) CHLTYPE(SDR) CONNAME('<connector-hostname>(<port>)') TRPTYPE(TCP) XMITQ(TO.ONPREM) SSLCIPH(ANY_TLS12_OR_HIGHER) DISCINT(0) HBINT(15) KAINT(15)

然后,您可以定义通道认证记录以允许远程队列管理器连接到新通道。

SET CHLAUTH(CLOUD.TO.ONPREM) TYPE(QMGRMAP) QMNAME('ONPREM') ACTION(ADD) USERSRC(CHANNEL)

现在,请刷新 TLS 安全性配置。 这将确保在队列管理器上更新密钥库文件中的证书数据。

REFRESH SECURITY TYPE(SSL)

验证连接

通过使用 runmqsc 运行以下命令来启动连接。

START CHANNEL(CLOUD.TO.ONPREM)
START CHANNEL(ONPREM.TO.CLOUD)

检查每个通道的状态以查看它们现在是否正在运行。

DIS CHSTATUS(CLOUD.TO.ONPREM)
DIS CHSTATUS(ONPREM.TO.CLOUD)

现在,通道已连接并正在运行,您可以继续放置和获取消息。

将 amqsput 样本应用程序连接到云队列管理器

如果已安装 IBM MQ 客户机或在本地使用 IBM MQ 工具箱,那么您可以访问 IBM MQ 样本应用程序。

要将应用程序连接到云队列管理器,需要创建应用程序凭证。 这是用户名和 API 密钥组合,用于向队列管理器认证应用程序。 遵循以下 指示信息 以创建应用程序凭证。

遵循以下 指示信息 来设置密钥库和连接详细信息以用于样本应用程序。

要向本地队列管理器发送消息,请使用 amqsputc 应用程序将消息放入名为 ONPREM 的远程队列。 输入应用程序用户密码,然后输入消息,按 Enter 键以发送消息。 请注意,此会话中的每个新行都是一条新消息。 要退出,请按 ctrl+c

amqsputc <queue-name> <queue-manager>

amqsputc ONPREM CLOUD
Enter password: *******
hello from the cloud

在内部部署队列管理器 IBM MQ Console 中读取消息

为了本指南的目的,我们假定您的队列管理器已安装 IBM MQ 控制台。 如果您使用的是 IBM MQ Container,那么缺省情况下应该配置此安装。 如果您无法执行这些 指示信息,那么可以执行此操作。

假定您已安装此产品,请在浏览器中浏览至 https://localhost:9443/ibmmq/console 以启动控制台。

您的浏览器可能会警告您存在不安全的连接。 这是因为缺省情况下,运行 IBM MQ 的服务器正在使用自签名证书,因此可以接受警告并继续访问控制台。

您将首先进入登录页面,并提示您输入用户名和密码。 在 IBM MQ Console 安装指南中的 步骤 2 中,它定义了 IBM MQ 容器的缺省用户名密码。 输入正确的用户名和密码,然后单击 登录

在控制台中,单击导航侧边栏中的 管理。 现在,在队列管理器视图中,单击 队列,然后在表中找到名为 ONPREM本地 队列。 这应显示 最大深度 1/5000。 单击此队列的表行以打开消息浏览器。 您应该会看到一条消息,而在 应用程序数据 列中,您应该会看到消息 Hello from a cloud

从内部部署队列管理器 IBM MQ 控制台发送消息

在控制台中,单击导航侧边栏中的 管理。 现在,在队列管理器视图中,单击 队列,然后在表中找到名为 CLOUD远程 队列。 单击此队列的表行上的 操作 图标 "操作" 图标,然后单击 创建消息。 在 应用程序数据下的文本字段中,输入文本 Hello from on-premises,然后单击 创建

将 amqsgetc 样本应用程序连接到云队列管理器

先前 复用同一应用程序配置设置,使用 amqsgetc 应用程序在云队列管理器上检索消息,以从名为 CLOUD 的本地队列获取消息。

amqsgetc <queue-name> <queue-manager>

amqsputc CLOUD CLOUD
Sample AMQSGET0 start
Enter password: ****
message <hello from on-premises>