![[OpenShift Container Platform]](ngocp.gif)
![[Kubernetes]](ngkube.gif)
![[亚马逊EKS]](ngeks.gif)
![[IBM Cloud Pak for Integration]](ngcp4i.gif)
使用 IBM MQ Operator 配置多实例队列管理器
此示例通过使用 IBM® MQ Operator.部署了一个多实例队列管理器。 相互认证( TLS )用于身份验证,将 TLS 证书映射到队列管理器中的身份。
开始之前
要完成此示例,必须首先完成以下先决条件:
- 在您的集群上为这个示例创建一个项目/命名空间。
- 在命令行中登录到集群,然后切换到上述命名空间。
- 确保 IBM MQ Operator 已安装并在以上名称空间中可用。
关于本任务
此示例提供了一个自定义资源 YAML 文件,用于定义待部署的队列管理器。 它还详细说明了在启用 TLS 的情况下部署队列管理器所需的额外步骤。
过程
- 确定合适的存储类集群 Kubernetes 中的存储可通过多种持久卷访问模式进行访问。 多实例队列管理器创建多个持久卷: 每个队列管理器一个持久卷,至少一个共享卷。 多实例队列管理器的共享卷必须使用
ReadWriteMany存储类。 Kubernetes 集群中的缺省存储类通常用于ReadWriteOnce存储类 (块存储器)。 例如,如果您正在使用 Red Hat® OpenShift® Data Foundation,那么存储类 ocs-storagecluster-cephfs 将提供合适的共享文件系统。 文件系统的选择非常重要,因为并非所有共享文件系统都以相同的方式处理文件锁定。 参见 《多平台规划文件系统支持》 及 《 IBM MQ 多实例队列管理器文件系统测试说明》。 - 按照 《使用 OpenSSL 创建自签名PKI 》中的说明创建一对证书。
- 创建包含 MQSC 命令和 INI 文件的配置映射创建包含 MQSC 命令的 Kubernetes ConfigMap ,以创建新队列和 SVRCONN 通道,并添加允许访问该通道的通道认证记录。请确保您当前处于先前创建的命名空间中(参见 开始之前),然后通过命令行输入以下 YAML 内容,或可选地使用 Web Red Hat OpenShift 控制台 进行 如果你正在使用一个 Red Hat OpenShift 集群操作。
MQSC 定义了一个名为apiVersion: v1 kind: ConfigMap metadata: name: example-miqm-configmap data: example-tls.mqsc: | DEFINE CHANNEL('MTLS.SVRCONN') CHLTYPE(SVRCONN) SSLCAUTH(REQUIRED) SSLCIPH('ANY_TLS13_OR_HIGHER') REPLACE SET CHLAUTH('MTLS.SVRCONN') TYPE(SSLPEERMAP) SSLPEER('CN=*') USERSRC(NOACCESS) ACTION(REPLACE) SET CHLAUTH('MTLS.SVRCONN') TYPE(SSLPEERMAP) SSLPEER('CN=example-app1') USERSRC(MAP) MCAUSER('app1') ACTION(REPLACE) SET AUTHREC PRINCIPAL('app1') OBJTYPE(QMGR) AUTHADD(CONNECT,INQ) DEFINE QLOCAL('EXAMPLE.QUEUE') REPLACE SET AUTHREC PROFILE('EXAMPLE.QUEUE') PRINCIPAL('app1') OBJTYPE(QUEUE) AUTHADD(BROWSE,PUT,GET,INQ) example-tls.ini: | Service: Name=AuthorizationService EntryPoints=14 SecurityPolicy=UserExternalMTLS.SVRCONN的通道和一个名为 的EXAMPLE.QUEUE队列。 该通道配置为仅允许向客户端提供证书,且该证书的"通用名称"为example-app1。 这是在步骤2 中创建的其中一份证书中使用的通用名称。 此通道上具有此通用名称的连接被映射到用户ID,app1该用户ID被授权连接到队列管理器并访问示例队列。 INI文件启用了一项安全策略,这意味着用户app1ID无需存在于外部用户注册表中——它仅作为名称存在于此配置中。 - 部署队列管理器使用以下自定义资源 YAML 创建新的队列管理器。 开始此任务前,请确保您已处于之前创建的命名空间中。
可用性类型设置
MultiInstance为,这将导致持久化存储被自动选中。切换
STORAGE_CLASS至步骤 1中确定的存储类。请注意,
example-qm-tls密钥是在步骤2 中创建的,而 ConfigMapexample-miqm-configmap是在步骤3 中创建的注: 以下 YAML 采用 许可证 IBM MQ Advanced ,但您也可以使用 IBM MQ 许可证。 有关详细信息,请参阅 《使用 IBM MQ 操作符通过 IBM MQ 许可证注释配置队列管理器 》。重要提示: 若您接受许可 IBM MQ Advanced 协议,请将 替换accept: false为accept: true。 有关许可证的详细信息,请参阅 mq.ibm.com/v1beta1: 当前许可证版本。- 示例 QueueManager 用于 Red Hat OpenShift
- 使用命令行或Web Red Hat OpenShift Container Platform 控制台,以以下配置部署队列管理器。
apiVersion: mq.ibm.com/v1beta1 kind: QueueManager metadata: name: exampleqm spec: license: accept: false license: L-NUUP-23NH8Y use: Production queueManager: name: EXAMPLEQM availability: type: MultiInstance mqsc: - configMap: name: example-miqm-configmap items: - example-tls.mqsc ini: - configMap: name: example-miqm-configmap items: - example-tls.ini storage: defaultClass: STORAGE_CLASS version: 9.4.5.0-r2 pki: keys: - name: default secret: secretName: example-qm-tls items: - tls.key - tls.crt - ca.crt - 示例 QueueManager 用于 Amazon EKS
在 Amazon EKS 集群上部署队列管理器时,请使用以下配置:
apiVersion: mq.ibm.com/v1beta1 kind: QueueManager metadata: name: exampleqm spec: license: accept: false license: L-NUUP-23NH8Y use: Production queueManager: name: EXAMPLEQM availability: type: MultiInstance mqsc: - configMap: name: example-miqm-configmap items: - example-tls.mqsc ini: - configMap: name: example-miqm-configmap items: - example-tls.ini storage: defaultClass: STORAGE_CLASS route: enabled: false metrics: serviceMonitor: enabled: false version: 9.4.5.0-r2 pki: keys: - name: default secret: secretName: example-qm-tls items: - tls.key - tls.crt - ca.crt web: enabled: false route: enabled: falsespec.queueManager.route.enabled,spec.queueManager.metrics.serviceMonitor.enabled, 和spec.web.route.enabled被设置为false,因为这些是默认启 Red Hat OpenShift 用的特定功能。 这些功能必须在 Amazon EKS. 上明确禁用。
- 确认队列管理器正在运行现在正在部署队列管理器。 请先确认其处于
Running状态,然后再继续。 例如:- 在以下环境中的 Red Hat OpenShift Container Platform部署:
oc get qmgr exampleqm - 部署于 Amazon EKS:
kubectl get qmgr exampleqm
- 在以下环境中的 Red Hat OpenShift Container Platform部署:
- 测试与队列管理器的连接要确认队列管理器已配置为支持 TLS 互通通信,请根据您的平台选择相应链接中的步骤操作:
- Red Hat OpenShift测试从笔记本电脑到队列管理器的互通 TLS 连接,用于 Red Hat OpenShift
- Amazon EKS测试笔记本电脑上的客户端应用程序与Amazon EKS队列管理器之间的 TLS 互通连接
- 强制活动 pod 失败要验证队列管理器的自动恢复,请模拟 pod 故障:
- 查看活动和备用 pod运行以下命令:
- 在以下环境中的 Red Hat OpenShift Container Platform部署:
oc get pods --selector app.kubernetes.io/instance=exampleqm - 部署于 Amazon EKS:
kubectl get pods --selector app.kubernetes.io/instance=exampleqm
1/1,而备用 pod 返回值0/1。 - 在以下环境中的 Red Hat OpenShift Container Platform部署:
- 删除活动 pod运行以下命令,并指定活动 pod 的全名:
- 在以下环境中的 Red Hat OpenShift Container Platform部署:
oc delete <ACTIVE_POD> exampleqm-ibm-mq-<VALUE> - 部署于 Amazon EKS:
kubectl delete <ACTIVE_POD> exampleqm-ibm-mq-<VALUE>
- 在以下环境中的 Red Hat OpenShift Container Platform部署:
- 再次查看 pod 状态(参见步骤 7.a )。
- 查看队列管理器状态运行以下命令并指定其他 pod 的全名:
- 在以下环境中的 Red Hat OpenShift Container Platform部署:
oc exec -t <POD> -- dspmq -x - 部署于 Amazon EKS:
kubectl exec -t <POD> -- dspmq -x
您应该会看到状态显示活动实例已更改,例如:QMNAME(EXAMPLEQM) STATUS(Running as standby) INSTANCE(exampleqm-ibm-mq-1) MODE(Active) INSTANCE(exampleqm-ibm-mq-0) MODE(Standby) - 在以下环境中的 Red Hat OpenShift Container Platform部署:
- 再次测试与队列管理器的连接注意: 您无需重复配置连接的步骤,只需执行向队列发送和从队列接收消息的操作即可要确认队列管理器已恢复,请根据您所在平台的相应链接执行以下步骤:
- Red Hat OpenShift测试从笔记本电脑到队列管理器的互通 TLS 连接,用于 Red Hat OpenShift
- Amazon EKS测试笔记本电脑上的客户端应用程序与Amazon EKS队列管理器之间的 TLS 互通连接
- 查看活动和备用 pod
结果
您部署了一个采用相互 TLS 认证的多实例队列管理器,并验证了当活动Pod发生故障时,该队列管理器能够自动恢复。