搜索

3.2. 使用 JMX 连接配置应用程序

download PDF

要使 Cryostat 检测并与您的目标 Java 应用程序通信,您可以配置应用程序以允许远程 Java 管理扩展(JMX)连接。

前提条件

  • 登录到您的 Cryostat web 控制台。
  • 在项目中创建 Cryostat 实例。

流程

  1. 要启用远程 JMX 连接,请完成以下步骤:

    1. 在应用程序中,定义以下 Java 系统属性:

      -Dcom.sun.management.jmxremote.port=<port_num>
      注意

      要添加 -Dcom.sun.management.jmxremote.port=<port_num > 属性,而无需重建目标应用程序,您可以在应用程序上设置 JAVA_OPTS_APPEND 环境变量。JAVA_OPTS_APPEND 是红帽通用基础镜像(UBI)使用的环境变量。

      如果您使用 Red Hat UBI 构建应用程序镜像,请在应用程序 Docker 文件构建时设置 JAVA_OPTS_APPEND 变量,请运行以下命令:

      oc set env deployment <name> JAVA_OPTS_APPEND="..."

      如果不使用 Red Hat UBI 构建应用程序镜像,请参阅基础镜像的文档,以了解有关如何在构建或运行时添加 Java 系统属性的信息。

    2. 通过允许到应用程序的流量来指定应用程序侦听远程 JMX 连接。使用 Red Hat OpenShift Service,并为其远程 JMX 端口指定以下值:

      service.yaml示例

      apiVersion: v1
      kind: Service
      ...
      spec:
        ports:
          - name: "jfr-jmx"
            port: 9091
            targetPort: 9091
      ...

  2. 保护远程 JMX 连接:

    1. 为应用程序中的远程 JMX 连接启用和配置身份验证和 SSL/TLS:

      -Dcom.sun.management.jmxremote.port=<port_num>
      
       # enable JMX authentication
      -Dcom.sun.management.jmxremote.authenticate=true
      
      # define users for JMX auth
      -Dcom.sun.management.jmxremote.password.file=</path/to/jmxremote.password>
      
      # set permissions for JMX users
      -Dcom.sun.management.jmxremote.access.file=</path/to/jmxremote.access>
      
       # enable JMX SSL
       -Dcom.sun.management.jmxremote.ssl=true
      
      # enable JMX registry SSL
      -Dcom.sun.management.jmxremote.registry.ssl=true
      
      # set your SSL keystore
      -Djavax.net.ssl.keyStore=</path/to/keystore>
      
      # set your SSL keystore password
      -Djavax.net.ssl.keyStorePassword=<password>
    2. 配置 Cryostat 以信任应用程序 TLS 证书。在与 Cryostat 应用程序相同的命名空间中为应用程序创建一个 secret,并将 Cryostat 配置为引用该 secret。要为证书创建 secret,请运行以下命令:

      oc create secret generic myapp-cert --from-file=tls.crt=/path/to/cert.pem
      注意

      证书必须采用 .pem 文件格式。

    3. 在创建 Cryostat 实例时,将 secret 添加到可信 TLS 证书列表中。如需更多信息,请参阅配置 TLS 证书
    4. 要允许应用程序通过密码身份验证以外的方式验证 Cryostat 是否连接到它们,请启用 TLS 客户端身份验证:

      -Dcom.sun.management.jmxremote.ssl.need.client.auth=true
      -Djavax.net.ssl.trustStore=</path/to/truststore>
      -Djavax.net.ssl.trustStorePassword=<password>
      注意

      TLS 客户端身份验证需要 Red Hat OpenShift 的 cert-manager 操作器。

    5. 如果将 TLS 客户端身份验证用于远程 JMX 连接,应用程序信任存储必须包含 Cryostat 证书。Cryostat operator cert-manager 集成为 Cryostat 部署创建一个自签名证书。此证书位于 < cryostat>-tls secret 中,其中 <cryostat> 是您创建的 Cryostat 实例的名称。

      注意

      cert-manager Operator 还会将 Java 密钥存储信任存储放在 secret 中。

      要在应用程序部署中挂载此信任存储,请运行以下命令,将 "<myapp>" 替换为应用程序部署的名称,并将 "<cryostat>" 替换为 Cryostat 实例的名称:

      oc set volumes deploy <myapp> --add --name=truststore \
        --secret-name=<cryostat>-tls --sub-path=truststore.p12 \
        --mount-path=/var/run/secrets/<myapp>/truststore.p12
    6. Cryostat 操作器生成 truststore 密码,您可以在 < cryostat>-keystore secret 中找到。要将它作为环境变量挂载到应用程序部署中,请运行以下命令:

      oc set env deploy <myapp> --from='secret/<cryostat>-keystore'
    7. 为容器配置 Java 参数。运行以下命令:

      -Dcom.sun.management.jmxremote.ssl.need.client.auth=true
      -Djavax.net.ssl.trustStore=/var/run/secrets/<myapp>/truststore.p12
      -Djavax.net.ssl.trustStorePassword="$(KEYSTORE_PASS)"
      警告

      如果您在测试环境中部署 Cryostat 和应用程序,您可能需要配置目标应用程序,而无需任何 JMX 或 TLS 身份验证。您可以使用以下 Java 系统属性集合,但这种配置不安全且不推荐这样做。

      -Dcom.sun.management.jmxremote.port=<port_num>
      -Dcom.sun.management.jmxremote.ssl=false
      -Dcom.sun.management.jmxremote.authenticate=false
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.