4.13. 保护集群连接


集群中的代理之间的内部连接使用内部连接器和接收器,它们分别命名为 artemis。您可以使用传输层安全(TLS)协议启用 SSL 来保护集群中代理间的连接。

在启用了 SSL 的接收器上,您可以指定一个 secret,其中包含集群中所有代理的通用 TLS 证书。在启用了 SSL 的连接器中,您可以指定一个信任存储,其中包含 TLS 证书的公钥。每个代理的信任存储中都需要公钥,因此代理可以在建立 TLS 连接时信任集群中的其他代理。

以下示例流程描述了如何使用自签名证书保护集群中代理之间的内部连接。

流程

  1. 生成自签名 TLS 证书,并将它添加到密钥存储文件中。

    • 在证书的 Subject Alternative Name (SAN)字段中,指定一个通配符 DNS 名称以匹配集群中的所有代理,如下例所示。该示例基于使用名为 ex-aao 的 CR,该 CR 部署到 测试 命名空间中。

      $ keytool -storetype jks -keystore server-keystore.jks -storepass artemis -keypass artemis -alias server -genkey -keyalg "RSA" -keysize 2048 -dname "CN=AMQ Server, OU=Artemis, O=ActiveMQ, L=AMQ, S=AMQ, C=AMQ" -validity 365 -ext bc=ca:false -ext eku=sA -ext san=dns:*.ex-aao-hdls-svc.test.svc.cluster.local
      Copy to Clipboard Toggle word wrap
    • 如果证书不支持使用通配符 DNS 名称,您可以在集群中所有代理 pod 的证书的 SAN 字段中包含以逗号分隔的 DNS 名称列表。例如:

      keytool -storetype jks -keystore server-keystore.jks -storepass artemis -keypass artemis -alias server -genkey -keyalg "RSA" -keysize 2048 -dname "CN=AMQ Server, OU=Artemis, O=ActiveMQ, L=AMQ, S=AMQ, C=AMQ" -validity 365 -ext bc=ca:false -ext eku=sA -ext san=dns:ex-aao-ss-0.ex-aao-hdls-svc.test.svc.cluster.local,dns:ex-aao-ss-1.ex-aao-hdls-svc.test.svc.cluster.local
      Copy to Clipboard Toggle word wrap
    • 如果 TLS 证书不支持使用 DNS 名称,您必须在 ActiveMQArtemis CR 中禁用主机验证,如下所述。
  2. 从密钥存储文件导出 TLS 证书的公钥,以便它可以导入到信任存储文件中。例如:

    $ keytool -storetype jks -keystore server-keystore.jks -storepass artemis -alias server -exportcert -rfc > server.crt
    Copy to Clipboard Toggle word wrap
  3. 将 TLS 证书的公钥导入到信任存储文件中,以便集群中的其他代理可以信任证书。例如:

    $ keytool -storetype jks -keystore server-truststore.jks -storepass artemis -keypass artemis -importcert -alias server -file server.crt -noprompt
    Copy to Clipboard Toggle word wrap
  4. 创建一个机密,以存储密钥存储和信任存储文件及其关联的密码。例如:

    oc create secret generic artemis-ssl-secret --namespace test --from-file=broker.ks=server-keystore.jks --from-file=client.ts=server-truststore.jks --from-literal=keyStorePassword=artemis --from-literal=trustStorePassword=artemis
    Copy to Clipboard Toggle word wrap
  5. 编辑用于代理部署的 ActiveMQArtemis CR,再添加名为 artemis 的内部接收器。在 artemis acceptor 中,将 sslEnabled 属性设置为 true,并指定您在 sslSecret 属性中创建的 secret 名称。例如:

    spec:
      ..
      deploymentPlan:
        size: 2
      acceptors:
      - name: artemis
        port: 61616
        sslEnabled: true
        sslSecret: artemis-ssl-secret
      ..
    Copy to Clipboard Toggle word wrap
  6. artemis 连接器启用 SSL,供集群中的每个代理用来连接到集群中的其他代理。使用 brokerProperties 属性启用 SSL,并指定包含 TLS 证书公钥的信任存储文件的路径和凭证。

    spec:
      ..
      deploymentPlan:
        size: 2
      acceptors:
      - name: artemis
        port: 61616
        sslEnabled: true
        sslSecret: artemis-ssl-secret
      brokerProperties:
      - 'connectorConfigurations.artemis.params.sslEnabled=true'
      - 'connectorConfigurations.artemis.params.trustStorePath=/etc/artemis-ssl-secret-volume/client.ts'
      - 'connectorConfigurations.artemis.params.trustStorePassword=artemis'
      ..
    Copy to Clipboard Toggle word wrap
    connectorConfigurations.artemis.params.trustStorePath
    这个值必须与信任存储文件的位置匹配,client.ts 在代理 pod 中。secret 中的 truststore 文件和附带的密码文件挂载到每个代理 pod 的 /etc/<secret name>-volume 目录中。上例指定信任存储的位置,该位置位于名为 artemis-ssl-secret 的 secret 中。
  7. 如果 TLS 证书不支持使用 DNS 名称,请使用 brokerProperties 属性来禁用主机验证。例如:

    spec:
      ..
      brokerProperties:
      ..
      - 'connectorConfigurations.artemis.params.verifyHost=false'
      ..
    Copy to Clipboard Toggle word wrap
  8. 保存 CR。
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat