HawtIO tuning Console Guide
使用红帽构建的 HawtIO 管理应用程序
摘要
前言 复制链接链接已复制到粘贴板!
HawtIO 提供用于查看和管理支持 Red Hat HawtIO 的应用程序的企业监控工具。这是一个基于 Web 的控制台,可从浏览器访问,以监控和管理启用了 HawtIO 的容器。HawtIO 基于开源 HawtIO 软件(https://hawt.io/)。HawtIO diagnostics 控制台指南描述了如何使用 HawtIO 管理应用程序。
本指南的受众是 Apache Camel 生态系统开发人员和管理员。本指南假定您对 Apache Camel 有一定的了解以及您的组织的处理要求。
使开源包含更多
红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。我们从这四个术语开始:master、slave、黑名单和白名单。由于此项工作十分艰巨,这些更改将在即将推出的几个发行版本中逐步实施。详情请查看 CTO Chris Wright 的信息。
第 1 章 HawtIO 概述 复制链接链接已复制到粘贴板!
HawtIO 是红帽构建的 Apache Camel 和红帽构建的 AMQ 的诊断控制台。它是一个使用现代 Web 技术(如 React 和 PatternFly )构建的可插拔 Web 诊断控制台。HawtIO 提供了一个中央接口,用于检查和管理一个或多个启用了 HawtIO 的容器的详细信息。当您在 OpenShift 上安装 HawtIO 独立或使用 HawtIO 时,可以使用 HawtIO。您可以在 HawtIO 中查看和管理的集成取决于正在运行的插件。您可以监控 HawtIO 和系统资源,执行更新,以及启动或停止服务。
可插拔架构基于 Webpack Module Federation,具有高度可扩展性;您可以使用插件动态扩展 HawtIO,或者在 JVM 中自动发现插件。HawtIO 已有内置 插件,使其对您的 JVM 应用开箱即用。该插件包括 Apache Camel, Connect, JMX, Logs, Runtime, Quartz, 和 Spring Boot。HawtIO 主要设计用于 Camel Quarkus 和 Camel Spring Boot。它也是用于管理微服务应用的工具。HawtIO 是云原生的;它已准备好接管云!您可以使用 HawtIO Operator 将它部署到 Kubernetes 和 OpenShift。
HawtIO 的优点包括:
- 通过 JMX (特别是 Camel 应用程序和 AMQ 代理)的运行时管理具有专用视图
- Camel 路由的视觉化和调试/追踪
- 简单的管理应用程序指标的管理和监控
下图显示了 HawtIO 的架构概述:
HawtIO Standalone
HawtIO On OpenShift
第 2 章 安装 HawtIO 复制链接链接已复制到粘贴板!
使用 HawtIO 控制台启动几个选项:
2.1. 在 Maven 中添加红帽软件仓库 复制链接链接已复制到粘贴板!
要访问 Red Hat Maven 存储库中的工件,您需要将这些存储库添加到 Maven 的 settings.xml 文件中。Maven 在用户主目录的 .m2 目录中查找 settings.xml 文件。如果没有用户指定的 settings.xml 文件,Maven 将使用 M2_HOME/conf/ 文件中的系统级 settings.xml 文件。
settings.xml
先决条件:
您知道要在其中添加红帽存储库的 settings.xml 文件的位置。
流程
在
settings.xml文件中,为红帽软件仓库添加存储库元素,如下例所示:<?xml version="1.0"?> <settings> <profiles> <profile> <id>extra-repos</id> <activation> <activeByDefault>true</activeByDefault> </activation> <repositories> <repository> <id>redhat-ga-repository</id> <url>https://maven.repository.redhat.com/ga</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> </snapshots> </repository> <repository> <id>redhat-ea-repository</id> <url>https://maven.repository.redhat.com/earlyaccess/all</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>redhat-ga-repository</id> <url>https://maven.repository.redhat.com/ga</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> </snapshots> </pluginRepository> <pluginRepository> <id>redhat-ea-repository</id> <url>https://maven.repository.redhat.com/earlyaccess/all</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> </snapshots> </pluginRepository> </pluginRepositories> </profile> </profiles> <activeProfiles> <activeProfile>extra-repos</activeProfile> </activeProfiles> </settings>
2.2. 从 CLI 运行(JBang) 复制链接链接已复制到粘贴板!
您可以使用 JBang 从 CLI 安装并运行 HawtIO。
如果您尚未在本地安装 JBang,请先安装它: https://www.jbang.dev/download/
流程
使用
jbang命令在您的机器上安装最新版本的 HawtIO :$ jbang app install -Dhawtio.jbang.version=4.1.0.redhat-00015 hawtio@hawtio/hawtio注意这个安装方法仅适用于 jbang>=0.115.0。
它将安装 HawtIO 命令。使用以下命令启动 HawtIO 实例:
$ hawtio该命令将在 http://localhost:8080/hawtio/ 自动打开控制台。要更改端口号,请运行以下命令:
$ hawtio --port 8090如需有关 CLI 配置选项的更多信息,请运行以下代码:
$ hawtio --help Usage: hawtio [-hjoV] [-c=<contextPath>] [-d=<plugins>] [-e=<extraClassPath>] [-H=<host>] [-k=<keyStore>] [-l=<warLocation>] [-p=<port>] [-s=<keyStorePass>] [-w=<war>] Run HawtIO -c, --context-path=<contextPath> Context path. -d, --plugins-dir=<plugins> Directory to search for .war files to install as 3rd party plugins. -e, --extra-class-path=<extraClassPath> Extra class path. -h, --help Print usage help and exit. -H, --host=<host> Hostname to listen to. -j, --join Join server thread. -k, --key-store=<keyStore> JKS keyStore with the keys for https. -l, --war-location=<warLocation> Directory to search for .war files. -o, --open-url Open the web console automatic in the web browser. -p, --port=<port> Port number. -s, --key-store-pass=<keyStorePass> Password for the JKS keyStore with the keys for https. -V, --version Print HawtIO version -w, --war=<war> War file or directory of the hawtio web application.
2.3. 运行 Quarkus 应用程序 复制链接链接已复制到粘贴板!
您可以按照以下步骤将 HawtIO 附加到 Quarkus 应用程序。
流程
将
io.hawt:hawtio-quarkus和支持的 Camel Quarkus 扩展添加到pom.xml中的依赖项:<dependencyManagement> <dependencies> <dependency> <groupId>io.hawt</groupId> <artifactId>hawtio-bom</artifactId> <version>4.1.0.redhat-00015</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> <!-- ... other BOMs or dependencies ... --> </dependencyManagement> <dependencies> <dependency> <groupId>io.hawt</groupId> <artifactId>hawtio-quarkus</artifactId> </dependency> <!-- Mandatory for enabling Camel management via JMX / HawtIO --> <dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-management</artifactId> </dependency> <!-- (Optional) Required for HawtIO Camel route diagram tab --> <dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-jaxb</artifactId> </dependency> <!-- ... other dependencies ... --> </dependencies>通过将以下配置添加到
application.properties来禁用身份验证:quarkus.hawtio.authenticationEnabled = false- 您还可以配置身份验证。请参阅"Quarkus 身份验证机制"。
在开发模式下运行带有 Quarkus 应用程序的 HawtIO,如下所示:
mvn compile quarkus:dev- 打开 http://localhost:8080/hawtio/ 以查看 HawtIO 控制台。
2.4. 运行 Spring Boot 应用程序 复制链接链接已复制到粘贴板!
您可以在两个步骤中,将 HawtIO 附加到 Spring Boot 应用程序。
流程
将
io.hawt:hawtio-springboot和支持的 Camel Spring Boot starters 添加到pom.xml中的依赖项中:<dependencyManagement> <dependencies> <dependency> <groupId>io.hawt</groupId> <artifactId>hawtio-bom</artifactId> <version>4.1.0.redhat-00015</version> <type>pom</type> <scope>import</scope> </dependency> <!-- ... other BOMs or dependencies ... --> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>io.hawt</groupId> <artifactId>hawtio-springboot</artifactId> </dependency> <!-- Mandatory for enabling Camel management via JMX / HawtIO --> <dependency> <groupId>org.apache.camel.springboot</groupId> <artifactId>camel-management-starter</artifactId> </dependency> <!-- (Optional) Required for HawtIO Camel route diagram tab --> <dependency> <groupId>org.apache.camel.springboot</groupId> <artifactId>camel-spring-boot-xml-starter</artifactId> </dependency> <!-- ... other dependencies ... --> </dependencies>通过将以下行添加到
application.properties来启用 HawtIO 和 Jolokia 端点:spring.jmx.enabled = true management.endpoints.web.exposure.include = hawtio,jolokia在开发模式下运行带有 Spring Boot 应用程序的 HawtIO,如下所示:
mvn spring-boot:run- 打开 http://localhost:8080/actuator/hawtio 以查看 HawtIO 控制台。
2.4.1. 配置 HawtIO 路径 复制链接链接已复制到粘贴板!
如果您不更喜欢 HawtIO 端点的 /actuator 基础路径,您也可以执行以下操作:
使用
management.endpoints.web.base-path属性自定义 Spring Boot 管理基础路径:management.endpoints.web.base-path = /您还可以通过设置
management.endpoints.web.path-mapping.hawtio属性来自定义 HawtIO 端点的路径:management.endpoints.web.path-mapping.hawtio = hawtio/consoleExample:
- 有一个可正常工作的 Spring Boot 示例,它演示了如何监控 Web 应用来公开有关 Apache Camel 路由、指标等信息,使用 HawtIO Spring Boot 示例。
-
用于实时值和图表的 MBean 是
java.lang/OperatingSystem。尝试查看 Camel 路由。请注意,当您在树中更改选择时,可以根据内容动态更改可用选项卡列表。
第 3 章 配置 HawtIO 复制链接链接已复制到粘贴板!
HawtIO 由两个主要组件组成:服务器运行时和客户端控制台。
服务器运行时是在服务器端运行的 Java 后端,客户端控制台是部署并在浏览器中运行的 JavaScript 前端。
因此,为 HawtIO 提供了两种类型的配置:
HawtIO 及其插件可以通过系统属性配置其行为。
- 配置属性 - 服务器运行时配置
- hawtconfig.json - 客户端控制台配置
3.1. 配置属性 复制链接链接已复制到粘贴板!
HawtIO 服务器运行时及其插件可以通过系统属性配置它们的行为。
下表列出了 HawtIO 核心系统和各种插件的配置属性。
有关安全性和身份验证的配置属性,请参阅 安全。
| System | default | 描述 |
|---|---|---|
| hawtio.disableProxy | false | 当此属性设置为 true 时,可以禁用 ProxyServlet (/hawtio/proxy configured)。这使得 Connect 插件不可用,这意味着 HawtIO 不再连接到远程 JVM,但有时用户可能希望这样做,因为如果没有使用 Connect 插件。 |
| hawtio.localAddressProbing | true | 在启动时是否启用代理允许列表的本地地址。将此属性设置为 false 以禁用它。 |
| hawtio.proxyAllowlist | localhost, 127.0.0.1 | 以逗号分隔的允许列表,用于连接插件可以通过 ProxyServlet 连接到的目标主机。出于安全原因,未列出的所有主机都将被拒绝进行连接。这个选项可以设置为 * 以允许所有主机。使用 "r:" 前缀列表元素允许定义正则表达式(例如:localhost,r:myserver[0-9]+.mydomain.com) |
| hawtio.redirect.scheme | 方案是在需要身份验证时将 URL 重定向到登录页面。 | |
| hawtio.sessionTimeout | servlet 容器将在客户端访问之间保持打开的最大时间间隔(以秒为单位)。如果没有配置这个选项,则 HawtIO 将使用 servlet 容器的默认会话超时。 |
3.2. Quarkus 复制链接链接已复制到粘贴板!
对于 Quarkus,所有这些属性可以在 application.properties 或 application.yaml 中配置,带有 quarkus.hawtio 前缀。
例如:
quarkus.hawtio.disableProxy = true
3.3. Spring Boot 复制链接链接已复制到粘贴板!
对于 Spring Boot,所有这些属性都可在 application.properties 或 application.yaml 中进行配置。
例如:
hawtio.disableProxy = true
3.4. 通过系统属性配置 Jolokia 复制链接链接已复制到粘贴板!
Jolokia 代理使用 io.hawt.web.JolokiaConfiguredAgentServlet 自动部署,扩展 Jolokia 原生 org.jolokia.http.AgentServlet 类,该类在 hawtio-war/WEB-INF/web.xml 中定义。
如果要使用 Jolokia 文档中定义的配置参数自定义 Jolokia Servlet,您可以将它们作为前缀为 jolokia 的系统属性传递。
例如:
jolokia.policyLocation = file:///opt/hawtio/my-jolokia-access.xml
3.5. HawtIO 的自定义品牌配置 复制链接链接已复制到粘贴板!
hawtconfig.json 是用于配置 HawtIO 的前端控制台的入口点 JSON 文件。它可用于自定义控制台的不同部分:品牌、样式和基本 UI 部分,如登录页面和相关模态,以及一些 HawtIO 插件的特定于控制台的行为。
以下是 hawtconfig.json 的示例文件:
hawtconfig.json 示例 :
{
"branding":
{
"appName": "HawtIO Management Console",
"showAppName": false,
"appLogoUrl": "hawtio-logo.svg",
"companyLogoUrl": "hawtio-logo.svg",
"css": "",
"favicon": "favicon.ico"
},
"login": {
"description": "Login page for HawtIO Management Console.",
"links": [
{ "url": "#terms", "text": "Terms of Use" },
{ "url": "#help", "text": "Help" },
{ "url": "#privacy", "text": "Privacy Policy" }
]
},
"about": {
"title": "HawtIO Management Console",
"description": "A HawtIO reimplementation based on TypeScript + React.",
"imgSrc": "hawtio-logo.svg",
"productInfo": [
{ "name": "ABC", "value": "1.2.3" },
{ "name": "XYZ", "value": "7.8.9" }
],
"copyright": "© HawtIO project"
},
"disabledRoutes": [
"/disabled"
]
}
3.5.1. hawtconfig.json中的配置选项 复制链接链接已复制到粘贴板!
在 hawtconfig.json 的顶部提供了以下选项:
顶级配置选项
| 选项 | Descriptiom |
|---|---|
|
| 控制台的品牌选项。 |
|
| 登录页面配置。 |
|
| 关于模态配置。 |
|
| 应该在控制台中隐藏的插件列表。 |
|
| JMX 插件配置。 |
|
| HawtIO 在线配置。 |
3.5.1.1. 品牌 复制链接链接已复制到粘贴板!
品牌 配置提供了定制控制台品牌的选项,如应用程序名称、徽标、风格和 favicon。
品牌配置选项
| 选项 | 默认 | 描述 |
|---|---|---|
|
|
| 自定义控制台的应用程序名称。名称用于浏览器标题标题,也可选择在控制台页面的标头中使用。 |
|
|
| 在控制台页面的标头中显示应用名称。 |
|
|
| 使用 URL 替换应用程序徽标。 |
|
|
| 使用 URL 替换公司徽标。 |
|
| 提供要应用到控制台的自定义 CSS。 | |
|
| 使用 URL 替换 favicon。 |
以下是 品牌 配置如何出现在 hawtconfig.json 中:
"branding": {
"appName": "HawtIO Management Console",
"showAppName": false,
"appLogoUrl": "hawtio-logo.svg",
"companyLogoUrl": "hawtio-logo.svg",
"css": "",
"favicon": "favicon.ico"
}
3.5.1.2. 登录 复制链接链接已复制到粘贴板!
登录 配置提供了自定义 HawtIO 登录页面中显示的信息的选项。
登录配置选项
| 选项 | 默认 | 描述 |
|---|---|---|
|
| 设置登录页面中显示的文本。 | |
|
| [ ] |
提供登录页面底部的链接。该值应该是带有 |
以下是 登录 配置如何在 hawtconfig.json 中查找:
"login": {
"description": "Login page for HawtIO Management Console.",
"links": [
{ "url": "#terms", "text": "Terms of Use" },
{ "url": "#help", "text": "Help" },
{ "url": "#privacy", "text": "Privacy Policy" }
]
}
3.5.1.3. 关于 复制链接链接已复制到粘贴板!
关于 配置提供了自定义 HawtIO About 模态中显示的信息的选项。
关于配置选项
| 选项 | 默认 | 描述 |
|---|---|---|
|
|
| 自定义关于模态的标题。 |
|
| 为 About 模态提供描述文本。 | |
|
|
| 使用 URL 替换 About 模态中的徽标镜像。 |
|
| [ ] |
提供有关控制台中使用的其他组件的名称和版本信息。该值应该是带有 |
|
| 在 About 模态中设置版权信息。 |
以下是配置 如何在 hawtconfig.json 中查找:
"about":
{
"title": "HawtIO Management Console",
"description": "A HawtIO reimplementation based on TypeScript + React.",
"imgSrc": "hawtio-logo.svg",
"productInfo": [
{ "name": "ABC", "value": "1.2.3" },
{ "name": "XYZ", "value": "7.8.9" }
],
"copyright": "© HawtIO project"
}
3.5.1.4. 禁用的路由 复制链接链接已复制到粘贴板!
disabledRoutes 配置提供了从控制台隐藏插件的选项。
选项的值应当是字符串数组,代表应隐藏的插件的路径。
以下是 disabledRoutes 配置如何在 hawtconfig.json 中查找:
"disabledRoutes": [
"/disabled"
]
3.5.1.5. JMX 插件 复制链接链接已复制到粘贴板!
JMX 插件可通过 hawtconfig.json 中的 jmx 配置自定义。
默认情况下,HawtIO 通过 JMX 插件将所有 MBeans 加载到工作区中。有时,您的自定义 HawtIO 控制台可能只希望加载一部分 MBeans 以减少应用的负载。jmx 配置提供了一个选项,用于限制将 MBeans 加载到工作区中。
JMX 插件配置选项
| 选项 | 默认 | 描述 |
|---|---|---|
|
| 指定应加载到 JMX 插件工作区的 MBean 域和对象名称列表。 |
这个选项可以通过设置 false 来完全禁用工作区,或者以以下格式指定 MBean 路径数组:
<domain>/<prop1>=<value1>,<prop2>=<value2>,...
为了微调 MBeans 加载到工作空间。
禁用工作区还应停用依赖于工作区提供的 MBeans 的所有插件。
以下是 jmx 配置在 hawtconfig.json 中查找的方式:
"jmx": {
"workspace": [
"hawtio",
"java.lang/type=Memory",
"org.apache.camel",
"no.such.domain"
]
}
3.5.1.6. HawtIO Online 复制链接链接已复制到粘贴板!
HawtIO 在线 的前端方面可以通过 hawtconfig.json 中的 在线 配置进行配置。
HawtIO 在线配置选项
| 选项 | 默认 | 描述 |
|---|---|---|
|
|
设置用于监视项目的选择器。只有在 HawtIO 部署类型等于 | |
|
|
配置 OpenShift Web 控制台链接。当 HawtIO 部署与集群相等时,会将链接添加到 |
ConsoleLink 配置选项
| 选项 | 默认 | 描述 |
|---|---|---|
|
| 设置链接的文本显示。 | |
|
|
设置应当在其中显示链接的应用程序菜单的部分。只有在 HawtIO 部署类型等于 | |
|
|
为应用程序菜单中链接前面的图标设置相对于 HawtIO 状态 URL 的路径。只有在 |
以下是 HawtIO 在线 配置如何在 hawtconfig.json 中查找:
"online": {
"projectSelector": "myproject",
"consoleLink": {
"text": "HawtIO Management Console",
"section": "HawtIO",
"imageRelativePath": "/online/img/favicon.ico"
}
}
3.5.2. 部署 hawtconfig.json 复制链接链接已复制到粘贴板!
3.5.2.1. Quarkus 复制链接链接已复制到粘贴板!
对于 Quarkus 应用程序,hawt config.json 文件以及其他companion 静态资源(如 CSS 文件和镜像)应放在项目的 src/main/resources 目录中的 META-INF/resources/hawtio 下。
您可以在此处找到示例 Quarkus 项目。https://github.com/jboss-fuse/hawtio-examples/tree/rhbac-4.8/quarkus
3.5.2.2. Spring Boot 复制链接链接已复制到粘贴板!
对于 Spring Boot 应用程序,hawtconfig.json 文件以及其他companion 静态资源(如 CSS 文件和镜像)应放在项目的 src/main/resources 目录中的 hawtio-static 下。
您可以在此处找到一个 Spring Boot 项目示例。https://github.com/jboss-fuse/hawtio-examples/tree/rhbac-4.8/springboot-authentication
3.5.3. 插件自定义 复制链接链接已复制到粘贴板!
虽然插件无法直接为控制台提供 hawtconfig.json 文件本身,但它们可以在从主控制台应用程序加载该文件后自定义配置。
@hawtio/react NPM 软件包提供 configManager API。您可以在插件的 index.ts 中使用此 API 在加载插件过程中自定义 hawtconfig.json 的配置。
以下是如何从插件自定义 hawtconfig.json 配置的示例:
import
{
HawtIOPlugin, configManager
} from '@hawtio/react'
...
/**
* The entry function of your plugin.
*/
export const plugin: HawtIOPlugin = () =>
{
...
}
// Register the custom plugin version to HawtIO
// See package.json "replace-version" script for how to replace the version placeholder with a real version
configManager.addProductInfo('HawtIO Sample Plugin', '__PACKAGE_VERSION_PLACEHOLDER__')
/*
* This example also demonstrates how branding and styles can be customised from a WAR plugin.
*
* The Plugin API `configManager` provides `configure(configurer: (config: Hawtconfig) => void)` method
* and you can customise the `Hawtconfig` by invoking it from the plugin's `index.ts`.
*/
configManager.configure(config => {
// Branding & styles
config.branding =
{
appName: 'HawtIO Sample WAR Plugin',
showAppName: true,
appLogoUrl: '/sample-plugin/branding/Logo-RedHat-A-Reverse-RGB.png',
css: '/sample-plugin/branding/app.css',
favicon: '/sample-plugin/branding/favicon.ico',
}
// Login page
config.login = {
description: 'Login page for HawtIO Sample WAR Plugin application.',
links: [
{ url: '#terms', text: 'Terms of use' },
{ url: '#help', text: 'Help' },
{ url: '#privacy', text: 'Privacy policy' },
],
}
// About modal
if (!config.about) {
config.about = {}
}
config.about.title = 'HawtIO Sample WAR Plugin'
config.about.description = 'About page for HawtIO Sample WAR Plugin application.'
config.about.imgSrc = '/sample-plugin/branding/Logo-RedHat-A-Reverse-RGB.png'
if (!config.about.productInfo) {
config.about.productInfo = []
}
config.about.productInfo.push(
{ name: 'HawtIO Sample Plugin - simple-plugin', value: '1.0.0' },
{ name: 'HawtIO Sample Plugin - custom-tree', value: '1.0.0' },
)
// If you want to disable specific plugins, you can specify the paths to disable them.
//config.disabledRoutes = ['/simple-plugin']
})
您可以在此处找到一个 WAR 插件项目示例。https://github.com/hawtio/hawtio-sample-war-plugin-ts
第 4 章 HawtIO 的安全性和验证 复制链接链接已复制到粘贴板!
您可以启用运行时/容器(如 Quarkus、OpenShift)的访问日志记录,作为验证访问的安全保护措施。访问记录可用于调查安全事件时的访问尝试。
HawtIO 支持开箱即用的身份验证,具体取决于它所运行的运行时/容器。要将 HawtIO 与您的应用程序搭配使用,需要为运行时设置身份验证或禁用 HawtIO 身份验证。
4.1. 配置属性 复制链接链接已复制到粘贴板!
下表列出了 HawtIO 核心系统的与安全相关的配置属性。
| Name | 默认 | 描述 |
|---|---|---|
| hawtio.authenticationContainerDiscoveryClasses | io.hawt.web.tomcat.TomcatAuthenticationContainerDiscovery | 使用以逗号分开的 AuthenticationContainerDiscovery 实现列表。默认情况下,只有 TomcatAuthenticationContainerDiscovery,用于验证来自 tomcat-users.xml 文件中的 Tomcat 上的用户。如果要从配置的 JAAS 登录模块验证 Tomcat 上的用户,或者可以自由地添加更多类,可以自由删除它。 |
| hawtio.authenticationContainerTomcatDigestAlgorithm | NONE | 使用 Tomcat tomcat-users.xml 文件时,可以散列密码,而不是纯文本。使用它来指定摘要算法;有效的值为 NONE、MD5、SHA-256、SHA-384 和 SHA-512。 |
| hawtio.authenticationEnabled | true | 是否启用安全性。 |
| hawtio.keycloakClientConfig | classpath:keycloak.json | 用于前端的 Keycloak 配置文件。如果启用了 Keycloak 集成,这是强制的。 |
| hawtio.keycloakEnabled | false | 是否启用或禁用 Keycloak 集成。 |
| hawtio.noCredentials401 | false | 在启用身份验证时是否返回 HTTP 状态 401,但没有提供凭证。返回 401 将导致浏览器弹出窗口提示输入凭据。默认情况下,此选项为 false,返回 HTTP 状态 403。 |
| hawtio.realm | hawtio | 用于登录的安全域。 |
| hawtio.rolePrincipalClasses | 完全限定主体类名称。逗号分隔多个类。 | |
| hawtio.roles | admin, manager, viewer | 登录控制台需要用户角色。逗号可以分隔允许的多个角色。设置为 * 或空值,以便在 HawtIO 验证用户时禁用角色检查。 |
| hawtio.tomcatUserFileLocation | conf/tomcat-users.xml | 指定 tomcat-users.xml 文件的替代位置,如 /production/userlocation/。 |
4.2. Quarkus 复制链接链接已复制到粘贴板!
HawtIO 使用 Quarkus 和 Keycloak 提供的身份验证机制进行保护。
如果要禁用 Quarkus 的 HawtIO 身份验证,请将以下内容添加到 application.properties 中:
quarkus.hawtio.authenticationEnabled = false
4.2.1. Quarkus 身份验证机制 复制链接链接已复制到粘贴板!
HawtIO 只是 Quarkus 的 Web 应用程序,因此各种机制 Quarkus 提供的机制用于像验证 Web 应用一样对 HawtIO 进行身份验证。
在这里,我们将演示如何通过 HawtIO 使用 基于属性的身份验证 来进行演示。
不建议在生产环境中使用基于属性的身份验证。这种机制仅用于开发和测试目的。
要将基于属性的身份验证与 HawtIO 搭配使用,请将以下内容添加到
pom.xml中:<dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-elytron-security-properties-file</artifactId> </dependency>然后,您可以在
application.properties中定义用户来启用身份验证。例如,使用密码s3cr3t!和角色admin来定义 用户hawtio,如下所示:quarkus.security.users.embedded.enabled = true quarkus.security.users.embedded.plain-text = true quarkus.security.users.embedded.users.hawtio = s3cr3t! quarkus.security.users.embedded.roles.hawtio = admin
Example:
有关基于属性的身份验证的工作示例,请参阅 Quarkus 示例。
4.2.2. 使用 Keycloak 的 quarkus 复制链接链接已复制到粘贴板!
4.3. Spring Boot 复制链接链接已复制到粘贴板!
除了标准的 JAAS 身份验证外,Spring Boot 上的 HawtIO 也可以通过 Spring Security 或 Keycloak 进行保护。如果要为 Spring Boot 禁用 HawtIO 身份验证,请将以下配置添加到 application.properties 中:
hawtio.authenticationEnabled = false
4.3.1. Spring Security 复制链接链接已复制到粘贴板!
将 Spring Security 与 HawtIO 搭配使用:
将
org.springframework.boot:spring-boot-starter-security添加到pom.xml中的依赖项中:<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency>src/main/resources/application.properties中的 Spring Security 配置应该类似如下:spring.security.user.name = hawtio spring.security.user.password = s3cr3t! spring.security.user.roles = admin,viewer必须定义安全配置类来设置如何使用 Spring Security 保护应用程序:
@EnableWebSecurity public class SecurityConfig { @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http .authorizeHttpRequests(authorize -> authorize .anyRequest().authenticated() ) .formLogin(withDefaults()) .httpBasic(withDefaults()) .csrf(csrf -> csrf .csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse()) .csrfTokenRequestHandler(new SpaCsrfTokenRequestHandler()) ) .addFilterAfter(new CsrfCookieFilter(), BasicAuthenticationFilter.class); return http.build(); } }注意在身份验证成功后刷新令牌,并且需要注销成功,因为
CsrfAuthenticationStrategy和CsrfLogoutHandler将清除前面的令牌。客户端应用程序将无法在不获取新令牌的情况下执行不安全 HTTP 请求,如 POST。
Example:
有关工作 示例,请参阅 springboot-security 示例。
4.3.1.1. 使用 Spring Security 连接到远程应用程序 复制链接链接已复制到粘贴板!
如果您试图连接到启用了 Spring Security 的远程 Spring Boot 应用程序,请确保 Spring Security 配置允许从 HawtIO 控制台访问。最有可能,默认的 CSRF 保护阻止远程访问 Jolokia 端点,因此会导致 HawtIO 控制台的身份验证失败。
请注意,它将使您的应用程序暴露于 CSRF 攻击的风险。
最简单的解决方案是在远程应用程序中禁用 Jolokia 端点的 CSRF 保护,如下所示:
import org.springframework.boot.actuate.autoconfigure.jolokia.JolokiaEndpoint; import org.springframework.boot.actuate.autoconfigure.security.servlet.EndpointRequest; @EnableWebSecurity public class SecurityConfig { @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { ... // Disable CSRF protection for the Jolokia endpoint http.csrf().ignoringRequestMatchers(EndpointRequest.to(JolokiaEndpoint.class)); return http.build(); } }要保护 Jolokia 端点,即使没有 Spring Security 的 CSRF 保护,您需要在
src/main/resources/下提供一个jolokia-access.xml文件,如下所示(snippet),以便只有可信节点可以访问它:<restrict> ... <cors> <allow-origin>http*://localhost:*</allow-origin> <allow-origin>http*://127.0.0.1:*</allow-origin> <allow-origin>http*://*.example.com</allow-origin> <allow-origin>http*://*.example.com:*</allow-origin> <strict-checking /> </cors> </restrict>
4.3.2. 使用 Keycloak 的 Spring Boot 复制链接链接已复制到粘贴板!
4.4. Keycloak 集成 复制链接链接已复制到粘贴板!
您可以使用 Keycloak 保护 HawtIO 控制台。要将 HawtIO 与 Keycloak 集成,您需要:
- 准备 Keycloak 服务器
- 将 HawtIO 部署到 favourite 运行时(Quarkus、Spring Boot、Wild、Jetty、Tomcat 等),并将它配置为使用 Keycloak 进行身份验证
4.4.1. 准备 Keycloak 服务器 复制链接链接已复制到粘贴板!
安装并运行 Keycloak 服务器。最简单的方法是使用 Docker 镜像 :
docker run -d --name keycloak \
-p 18080:8080 \
-e KEYCLOAK_ADMIN=admin \
-e KEYCLOAK_ADMIN_PASSWORD=admin \
quay.io/keycloak/keycloak start-dev
在这里,我们为 Keycloak 服务器使用端口号 18080,以避免与其他应用程序可能使用的端口冲突。
您可以使用用户 admin / password admin 登录 Keycloak 管理控制台 http://localhost:18080/admin/。将 hawtio-demo-realm.json 导入到 Keycloak 中。为此,可单击 Create Realm 按钮,然后导入 hawtio-demo-realm.json。它将创建 hawtio-demo realm。
hawtio-demo 域具有 hawtio-client 应用程序作为公共客户端安装,并且定义了一些 realm 角色,如 admin 和 viewer。这些角色的名称与默认的 HawtIO 角色相同,该角色可以登录 HawtIO 管理控制台和 JMX。
另外,还有 3 个用户:
admin-
用户 用户,其密码为
和 role admin,允许登录 HawtIO。admin viewer-
用户 用户,具有密码
和角色查看器,允许登录 HawtIO。查看器 jdoe-
用户(
passwordpassword)和未分配任何角色,不允许该用户登录 HawtIO。
目前,角色的不同不会影响 Quarkus 和 Spring Boot 上的 HawtIO 访问权限,因为 HawtIO RBAC 功能尚未在这些运行时实施。
4.4.2. 配置 复制链接链接已复制到粘贴板!
HawtIO 的 Keycloak 集成配置由两个部分组成:与运行时中的 Keycloak 集成(服务器侧),并与 HawtIO 控制台中的 Keycloak 集成(客户端侧)。
每个部分都需要进行以下设置:
- 服务器端
- Keycloak 适配器的特定于运行时的配置
- 客户端
-
HawtIO Keycloak 配置
keycloak-hawtio.json
4.4.2.1. Quarkus 复制链接链接已复制到粘贴板!
首先,应用所需的配置, 以将 HawtIO 附加到 Quarkus 应用程序。
您需要将 Quarkus 应用程序与 Keycloak 集成为 Quarkus OIDC 扩展。将以下依赖项添加到 pom.xml 中:
pom.xml
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-oidc</artifactId>
</dependency>
4.4.2.1.1. 服务器端 复制链接链接已复制到粘贴板!
然后,在 application.properties 中添加以下行(配置服务器端 OIDC 扩展):
application.properties
quarkus.oidc.auth-server-url = http://localhost:18080/realms/hawtio-demo
quarkus.oidc.client-id = hawtio-client
quarkus.oidc.credentials.secret = secret
quarkus.oidc.application-type = web-app
quarkus.oidc.token-state-manager.split-tokens = true
quarkus.http.auth.permission.authenticated.paths = "/*"
quarkus.http.auth.permission.authenticated.policy = authenticated
quarkus.oidc.token-state-manager.split-tokens = true 非常重要,因为您可能会遇到大量大小会话 Cookie 令牌问题,且无法与 Keycloak 集成。
4.4.2.1.2. 客户端 复制链接链接已复制到粘贴板!
最后,在 Quarkus 应用程序项目中的 src/main/resources 下创建 keycloak-hawtio.json (充当 client-side HawtIO JS 配置):
keycloak-hawtio.json
{
"realm": "hawtio-demo",
"clientId": "hawtio-client",
"url": "http://localhost:18080/",
"jaas": false,
"pkceMethod": "S256"
}
根据代码 交换代码挑战方法高级配置,将 pkceMethod 设置为 S256。如果没有启用 PKCE,请不要设置这个选项。
构建并运行项目,它将与 Keycloak 集成。
4.4.2.1.3. Example 复制链接链接已复制到粘贴板!
如需工作 示例,请参阅 quarkus-keycloak 示例。
4.4.2.2. Spring Boot 复制链接链接已复制到粘贴板!
首先,应用 [将 HawtIO 附加到 Spring Boot 应用程序所需的配置。
您需要将 Spring Boot 应用程序与 Keycloak 集成的内容是,将以下依赖项添加到 pom.xml 中(将 4.x.y 替换为最新的 HawtIO 发行版本):
pom.xml
<dependency>
<groupId>io.hawt</groupId>
<artifactId>hawtio-springboot-keycloak</artifactId>
<version>4.x.y</version>
</dependency>
4.4.2.2.1. 服务器端 复制链接链接已复制到粘贴板!
然后,在 application.properties 中添加以下行(配置服务器端 Keycloak 适配器):
application.properties
keycloak.realm = hawtio-demo
keycloak.resource = hawtio-client
keycloak.auth-server-url = http://localhost:18080/
keycloak.ssl-required = external
keycloak.public-client = true
keycloak.principal-attribute = preferred_username
4.4.2.2.2. 客户端 复制链接链接已复制到粘贴板!
最后,在 Spring Boot 项目中的 src/main/resources 下创建 keycloak-hawtio.json (充当 client-side HawtIO JS 配置):
keycloak-hawtio.json
{
"realm": "hawtio-demo",
"clientId": "hawtio-client",
"url": "http://localhost:18080/",
"jaas": false
}
构建并运行项目,它将与 Keycloak 集成。
4.4.2.2.3. Example 复制链接链接已复制到粘贴板!
有关工作 示例,请参阅 springboot-keycloak 示例。
第 5 章 plugins 复制链接链接已复制到粘贴板!
HawtIO 是高度模块化的,包括开箱即用不同技术的插件。HawtIO 插件基本上是 React 组件,它们自包含所有 JavaScript、CSS 和镜像,以使它们正常工作。它们可以利用 HawtIO 核心功能,如通过 Plugin API 进行身份验证和事件通知。
插件的唯一要求是提供 HawtIO 可以从中加载它的入口点,它必须符合 Webpack Module Federation 的规范。
HawtIO 使用 JMX 发现存在 MBeans,然后根据发现的内容动态更新导航栏和选项卡。每当重新载入 MBean 时,UI 会被更新,它定期或插件可以显式触发。
依靠 JMX 进行发现并不意味着插件只能与 JMX 交互。它们可以在浏览器都可以进行任何操作,例如,使用 REST 发现 UI 功能和其他插件。
5.1. 内置插件 复制链接链接已复制到粘贴板!
以下插件默认包含在 HawtIO 中:
| 插件 | 描述 |
|---|---|
| 添加了对 Apache Camel 的支持。允许您浏览 Camel 上下文、路由、端点等;显示运行路由及其指标;创建端点;发送消息;追踪消息流;以及配置文件路由,以识别哪些部分运行速度或缓慢。
| |
| 允许您连接到本地或远程 JVM。
| |
| 诊断 |
允许您控制 Java Flight Recorder,请参阅类直方图和对 JVM 标记的访问。 |
| 提供核心 JMX 支持与 MBeans 交互、查看实时属性、图表和调用操作。 | |
| 提供对查看 JVM 中日志的支持。
| |
| 允许您查看 Quartz 调度程序的状态并配置它们。还允许您从控制台配置和触发作业和触发器。如果您将 Camel Quartz 组件用于 Camel 应用程序,则会自动启用此插件。 | |
| 提供 Java 进程的常规概述,包括线程、系统属性和关键指标。 | |
| 显示 Spring Boot 应用程序的信息。
|
5.2. 已知的外部插件 复制链接链接已复制到粘贴板!
以下插件由外部社区开发。
- Apache ActiveMQ Artemis 插件
- Apache ActiveMQ Artemis 附带了自己的 Web 管理控制台,后者在 HawtIO 基础上构建,该插件具有为 Artemis 代理提供专用视图的外部插件。您可以通过控制台浏览接收器和地址,并对它们进行操作。如需更多信息,请参阅 Artemis 用户手册 - 管理控制台。
5.3. 自定义插件 复制链接链接已复制到粘贴板!
您还可以通过开发自定义插件来扩展 HawtIO 功能。
通常,插件开发涉及 TypeScript、React 和 PatternFly v4。现在,我们有几个示例演示了您可以如何开发自定义插件来扩展 HawtIO。
- HawtIO 项目中的插件示例
- https://github.com/hawtio/hawtio/tree/4.x/examples/sample-pluginShawtIO 插件的最简单形式。它将自身打包为 JAR,然后通过将其作为 Java 项目中的依赖项包含在内来使用。
- Spring Boot 插件示例
- https://github.com/hawtio/hawtio-sample-plugin-ts这个示例演示了如何在 Spring Boot 应用程序中编写和使用自定义 HawtIO 插件。
- 插件示例作为 WAR 应用程序
- https://github.com/hawtio/hawtio-sample-war-plugin-tshttps://github.com/hawtio/hawtio-sample-war-plugin-ts 这个示例演示了如何将自定义 HawtIO 插件编写为 WAR 文件,稍后可以部署到应用服务器,如 Jetty、Wild 和 Tomcat。
5.3.1. 插件开发的资源 复制链接链接已复制到粘贴板!
以下是用于开发 HawtIO 插件的有用参考列表。
第 6 章 在 OpenShift 4 中设置 HawtIO 复制链接链接已复制到粘贴板!
虽然 HawtIO 在线应该能够发现 Fuse 7 应用,但包含的 Camel 插件仅支持 Camel 4.x 模型。使用 HawtIO 4 管理 Fuse 7 Camel 路由最可能不可用。
在 OpenShift 4.x 中,设置 HawtIO 涉及安装和部署它。此安装的首选机制是使用 OperatorHub ] 提供的 HawtIO Operator。另外,您还可以为 HawtIO 自定义基于角色的访问控制(RBAC),如 xref:role-based-access-control-for-hawtio-on-openshift-4[ 所述。
6.1. 使用 OperatorHub 在 OpenShift 4 上安装和部署 HawtIO 复制链接链接已复制到粘贴板!
HawtIO Operator 在 OpenShift OperatorHub 中提供,用于安装 HawtIO。若要部署 HawtIO,您必须部署已安装的 Operator 实例以及 HawtIO 自定义资源(CR)。
要安装和部署 HawtIO:
-
在 Web 浏览器中以具有
集群管理员访问权限的用户身份登录 OpenShift 控制台。 - 点 Operators,然后点 OperatorHub。
- 在搜索字段窗口中,键入 HawtIO 来过滤操作器列表。单击 HawtIO Operator。
在 HawtIO Operator 安装窗口中,单击 Install。Create Operator Subscription 表单将打开:
- 对于 更新频道,请选择 stable-v1。
对于 Installation Mode,接受 default (集群中的特定命名空间)。
注意此模式决定了 Operator 将监控 HawtIO CR 的命名空间。这与命名空间 HawtIO 在完全部署时监控它不同。后者可以通过 HawtIO CR 配置。
- 对于 Installed Namespace,选择要在其中安装 HawtIO Operator 的命名空间。
对于 Update Approval,选择 Automatic 或 Manual 来配置 OpenShift 如何处理对 HawtIO Operator 的更新。
- 如果选择了 Automatic 更新选项,且有新版本的 HawtIO Operator,OpenShift Operator Lifecycle Manager (OLM)将自动升级运行 HawtIO 的实例,而无需人为干预;
- 如果选择了 Manual 更新选项,且有较新的 Operator 版本可用,OLM 只会创建更新请求。然后,集群管理员必须手动批准更新请求,使 HawtIO Operator 更新至新版本。
- 点 Install and OpenShift 将 HawtIO Operator 安装到当前命名空间中。
- 要验证安装,点 Operators,然后点 Installed Operators。HawtIO 应在操作器列表中可见。
使用 OpenShift Web 控制台部署 HawtIO:
- 在 Installed Operators 列表中,单击 Name 列下的 HawtIO Operator。
- 在 Provided APIs 下的 Operator Details 页面中,单击 Create HawtIO。
接受配置默认值或选择性地编辑它们。
- 对于 Replicas,要提高 HawtIO 性能(例如在高可用性环境中),可以增加分配给 HawtIO 的 pod 数量;
- 对于 RBAC (基于角色的访问控制),只有在您要自定义默认的 RBAC 行为以及安装 HawtIO Operator 的命名空间中已存在时,才在 Config Map 字段中指定一个值
- 对于 Nginx,请参阅 HawtIO Operator 安装的性能调整
对于 类型,请指定:
- Cluster: 用于 HawtIO 监控 OpenShift 集群上的所有命名空间,适用于任何启用了 HawtIO 的应用;
- 命名空间 :对于 HawtIO,仅监控在同一命名空间中部署的启用了 HawtIO 的应用程序。
- 点 Create。HawtIO Operator Details 页面将打开,并显示部署的状态。
打开 HawtIO :
- 对于 命名空间 部署:在 OpenShift Web 控制台中,打开安装 HawtIO 操作器的项目,然后选择 Overview。在 Project Overview 页面中,向下滚动到 Launcher 部分,再单击 HawtIO 链接。
- 对于 集群部署,在 OpenShift Web 控制台的标题栏中,单击网格图标。在弹出菜单中,单击 Red Hat Applications 下的 HawtIO URL 链接。
- 登录到 HawtIO。在列出所需权限的浏览器中打开 Authorize Access 页面。
- 点击 Allow selected permissions。HawtIO 在浏览器中打开,并显示任何有权访问的 HawtIO 的应用容器集。
- 点 Connect 查看被监控的应用程序。这时将打开一个新的浏览器窗口,显示 HawtIO 中的应用程序。
6.2. OpenShift 4 上 HawtIO 的基于角色的访问控制 复制链接链接已复制到粘贴板!
HawtIO 提供基于角色的访问控制(RBAC),根据 OpenShift 提供的用户授权来推断访问。在 HawtIO 中,RBAC 决定用户在 pod 上执行 MBean 操作的能力。
如需有关 OpenShift 授权的信息,请参阅 OpenShift 文档中的使用 RBAC 定义和应用权限 部分。
当使用 Operator 在 OpenShift 上安装 HawtIO 时,默认启用基于角色的访问控制。HawtIO RBAC 利用 OpenShift 中 pod 资源的操作动词访问,以确定用户在 HawtIO 中对 pod 的 MBean 操作的访问权限。默认情况下,hawtIO 有两个用户角色:
- admin: 如果用户可以在 OpenShift 中更新 pod,则用户会被路由了 HawtIO 的 admin 角色。用户可以在 HawtIO 中对 pod 执行写入 MBean 操作。
- viewer: 如果用户可以在 OpenShift 中获取 pod,则用户会被路由了 HawtIO 的 viewer 角色。用户可以在 HawtIO 中对 pod 执行只读 MBean 操作。
6.2.1. 在 OpenShift 4 上确定 HawtIO 的访问角色 复制链接链接已复制到粘贴板!
HawtIO 基于角色的访问控制从用户的 OpenShift 权限中推断出来。要确定授予特定用户的 HawtIO 访问权限角色,可获取授予某一容器集的用户的 OpenShift 权限。
先决条件:
- 用户名
- pod 的名称
流程 :
要确定用户是否有 pod 的 HawtIO admin 角色,请运行以下命令来查看用户是否可以更新 OpenShift 上的 pod:
oc auth can-i update pods/<pod> --as <user>- 如果响应是 yes,则用户具有 Pod 的 admin 角色。用户可以在 HawtIO 中为 pod 执行写入操作。
要确定用户是否有 pod 的 HawtIO viewer 角色,请运行以下命令来查看用户是否可以在 OpenShift 上获取 pod:
oc auth can-i get pods/<pod> --as <user>- 如果响应是 yes,用户具有 Pod 的 viewer 角色。用户可以在 HawtIO 中为 pod 执行只读操作。根据上下文,S HawtIO 可防止具有 viewer 角色的用户执行写入 MBean 操作,方法是禁用一个选项,或者在用户尝试写 MBean 操作时显示 不允许的操作。
- 如果响应是 no,用户没有绑定到任何 HawtIO 角色,用户无法查看 HawtIO 中的 pod。
6.2.2. 在 OpenShift 4 中自定义对 HawtIO 的基于角色的访问 复制链接链接已复制到粘贴板!
如果您使用 OperatorHub 安装 HawtIO,则默认启用基于角色的访问控制(RBAC)。要自定义 HawtIO RBAC 行为,在部署 HawtIO 之前,必须提供 ConfigMap 资源(定义自定义 RBAC 行为)。此 ConfigMap 的名称应在 HawtIO 自定义资源(CR)的 rbac 配置部分中输入。
自定义 ConfigMap 资源必须添加到安装了 HawtIO Operator 的同一命名空间中。
先决条件 :
- HawtIO Operator 已从 OperatorHub 安装。
流程 :
自定义 HawtIO RBAC 角色:
创建 RBAC ConfigMap:
确保当前的 OpenShift 项目是您要安装 HawtIO 的项目。例如,要在 hawtio-test 项目中安装 HawtIO,请运行以下命令:
oc project hawtio-test从模板创建 HawtIO RBAC ConfigMap 文件,并运行以下命令:
oc process -f https://raw.githubusercontent.com/hawtio/hawtio-online/2.x/docker/ACL.yaml -p APP_NAME=custom-hawtio | oc create -f -使用以下命令编辑新的自定义 ConfigMap:
oc edit ConfigMap custom-hawtio-rbac- 保存编辑后,将更新 ConfigMap 资源
- 如上所述,创建一个新的 HawtIO CR,并在属性 configMap 下添加新 ConfigMap 的名称来编辑 rbac 部分。
- 点 Create。Operator 应该部署一个新的 HawtIO 版本,以使用自定义 ConfigMap
6.3. 从 Fuse 控制台迁移 复制链接链接已复制到粘贴板!
HawtIO 自定义资源定义(CRD)的版本已从 v1alpha1 升级到 v1。这意味着,在安装 HawtIO 操作器时,所有现有的 Fuse-Console 自定义资源(CR)都会升级到这个新版本。CRD 的当前模式属性保持不变。
CRD version 属性保留在 CRD 中,但 HawtIO 操作器不再用于安装 HawtIO;它保留下来,Fuse-Console 操作器仍然可以正确安装 Fuse-Console。
HawtIO 和 Fuse-Console 应作为独立的应用程序执行。
6.4. 在 OpenShift 4 上升级 HawtIO 复制链接链接已复制到粘贴板!
Red Hat OpenShift 4.x 处理 operator 的更新,包括 HawtIO operator。如需更多信息,请参阅 Operators OpenShift 文档。然后,Operator 更新会根据应用程序的配置方式触发应用程序升级。
6.5. 在 OpenShift 4 中调整 HawtIO 的性能 复制链接链接已复制到粘贴板!
默认情况下,HawtIO 使用以下 Nginx 设置:
-
clientBodyBufferSize: 256k -
proxyBuffers: 16 128k -
subrequestOutputBufferSize: 10m
有关这些设置的描述,请参阅 Nginx 文档。
要调整 HawtIO 的性能,您可以设置任何 clientBodyBufferSize、proxyBuffers 和 subrequestOutputBufferSize 环境变量。例如,如果您使用 HawtIO 监控大量 pod 和路由(例如,总计 100 个路由),您可以通过将 HawtIO 的 subrequestOutputBufferSize 环境变量设置为 100 来解决加载超时问题。
m
6.5.1. HawtIO Operator 安装的性能调整 复制链接链接已复制到粘贴板!
在 Openshift 4.x 上,您可以在部署 HawtIO 之前或之后设置 Nginx 性能调整环境变量。如果您这样做,OpenShift 会重新部署 HawtIO。
先决条件 :
-
您必须具有
集群管理员对OpenShift 集群的访问权限。
流程 :
您可以在部署 HawtIO 之前或之后设置环境变量。
要在部署 HawtIO 前设置环境变量 :
- 在 OpenShift Web 控制台中,在安装了 HawtIO Operator 的项目中,选择 Operators> Installed Operators> HawtIO Operator。
- 单击 HawtIO 选项卡,然后单击 Create HawtIO。
- 在 Create HawtIO 页面上的 Form view 中,向下滚动到 Config> Nginx 部分。
展开 Nginx 部分,然后设置环境变量。例如:
-
clientBodyBufferSize: 256k -
proxyBuffers: 16 128k -
subrequestOutputBufferSize: 100m
-
- 单击 Create 以部署 HawtIO。
- 部署完成后,打开 Deployments> HawtIO-console 页面,然后点 Environment 来验证环境变量是否在列表中。
要在部署 HawtIO 后设置环境变量 :
- 在 OpenShift Web 控制台中,打开部署了 HawtIO 的项目。
- 选择 Operators> Installed Operators> HawtIO Operator。
- 单击 HawtIO 选项卡,然后单击 HawtIO。
- 选择 Actions> Edit HawtIO。
-
在 Editor 窗口中,向下滚动到
spec部分。 在
spec部分,添加新的nginx部分并指定一个或多个环境变量,例如:apiVersion: hawt.io/v1 kind: HawtIO metadata: name: hawtio-console spec: type: Namespace nginx: clientBodyBufferSize: 256k proxyBuffers: 16 128k subrequestOutputBufferSize: 100m- 点击 Save。OpenShift 重新部署 HawtIO.
- 重新部署完成后,打开 Workloads> Deployments> HawtIO-console 页面,然后点 Environment 以查看列表中的环境变量。
6.5.2. 在 HawtIO 上查看应用程序的性能调整 复制链接链接已复制到粘贴板!
HawtIO 的增强性能调优功能允许查看有大量 MBeans 的应用。要使用此功能,请执行以下步骤:
先决条件 :
-
您必须具有
集群管理员对OpenShift 集群的访问权限。
流程 :
增加应用程序的内存限值。
在部署 HawtIO 后增加内存限值 :
- 在 OpenShift Web 控制台中,打开部署了 HawtIO 的项目。
- 选择 Operators> Installed Operators> HawtIO Operator。
- 单击 HawtIO 选项卡,然后单击 HawtIO。
- 选择 Actions> Edit HawtIO。
-
在 Editor 窗口中,向下滚动到
spec.resources部分。 - 将 请求和限值 的值更新为首选数量
- 点 Save
- HawtIO 应该使用新的资源规格重新部署。
6.6. HawtIO CR 属性 复制链接链接已复制到粘贴板!
本节包括可以自定义的所有自定义资源属性,包括品牌、相关和控制台链接。
auth: 身份验证配置 | type: object
- clientCertCheckSchedule: CronJob 调度,用于定义检查证书的过期频率。如果没有设置调度,则不会启用客户端轮转 | type: 字符串
- clientCertCommonName: 生成的客户端证书 CN | type: 字符串
- clientCertExpirationDate: 生成的客户端证书过期日期 | type: 字符串 | format: date-time
- clientCertExpirationPeriod :证书过期日期前的持续时间,在此期间可以轮转证书。默认值为 24 小时 | 类型:整数
config: HawtIO 控制台配置 | 类型:对象
关于: 在 About 页面中显示的信息 | type: object
- additionalInfo: description 部分的文本 | type: string
- Copyright: 版权部分的文本 | type: 字符串
- imgSrc :页面中显示的镜像。它可以是相对于 HawtIO 状态 URL 的路径,也可以是绝对 URL | 类型:字符串
productInfo: 产品信息列表 | 类型:数组
items: 在 About 页面中显示的产品信息 | type: object | required: [ "name", "value" ]
- name :产品信息的名称 | type: 字符串
- 值 :产品信息的值 | type: string
- title: 页面的标题 | type: 字符串
品牌 :用户界面品牌 | 类型:对象
- appLogoUrl :导航栏中显示的徽标 URL。它可以是相对于 HawtIO 状态 URL 的路径,也可以是绝对 URL。| type: 字符串
- appName :应用程序标题,它通常显示在 Web 浏览器标签页中。| type:字符串
- CSS :外部 CSS 风格表的 URL,可用于风格应用程序。它可以是相对于 HawtIO 状态 URL 的路径,也可以是绝对 URL。| type: 字符串
- favicon: favicon 的 URL,通常显示在 Web 浏览器选项卡中。它可以是相对于 HawtIO 状态 URL 的路径,也可以是绝对 URL。| type: 字符串
disabledRoutes :禁用具有匹配路由的 UI 组件 | type: 数组 |
- items:type: string
在线 :OpenShift 相关配置 | 类型:对象
ConsoleLink :OpenShift Web 控制台链接的配置。当 HawtIO 部署等于 'cluster' 时,会将链接添加到应用程序菜单。否则,链接会添加到 HawtIO 项目仪表板中。| type: object
-
imageRelativePath :路径相对于 HawtIO 状态 URL,用于应用程序菜单中链接前面的图标。只有在 HawtIO 部署类型等于
集群 时才适用。该镜像应该为方括号,将显示在 24x24 pixels. | type: 字符串 - 第 : 应该出现链接的应用程序菜单的部分。只有在 HawtIO 部署类型等于 'cluster' 时才适用。| type: 字符串
- 文本: 链接的文本显示 | type: 字符串
-
imageRelativePath :路径相对于 HawtIO 状态 URL,用于应用程序菜单中链接前面的图标。只有在 HawtIO 部署类型等于
-
ProjectSelector :用于监视项目的选择器。只有在 HawtIO 部署类型等于 'cluster' 时才适用。默认情况下,登录的用户有权访问的所有项目都将被监视。必须提供选择器的字符串表示,如 opend by the-
selector, or-l, options fromkubectl get命令。请参阅: Kubernetes Labels 和 Selectors | type: 字符串
externalRoutes :将由 Operator 注解的外部路由名称列表,以使用 routes | type: 数组访问控制台。
- items:type: string
metadataPropagation :在 HawtIO 自定义资源上将元数据传播到生成的资源(如部署、Pod、服务和路由 | 类型)的配置
annotations: Annotations to propagate | type: array |
- items:type: string
标签:要传播 | type: 数组 的标签 |
- items:type: string
Nginx :Nginx 运行时配置 类型:object
-
clientBodyBufferSize :读取客户端请求正文的缓冲区大小。默认值为
256k. | type: 字符串 -
proxyBuffers :用于从代理服务器读取响应的缓冲区的数量和大小,用于单个连接。默认为
16 128k. | type: 字符串 -
subrequestOutputBufferSize :用于存储子请求的响应正文的缓冲区的大小。默认值为
10m。| 类型:字符串
-
clientBodyBufferSize :读取客户端请求正文的缓冲区大小。默认值为
RBAC :RBAC 配置 | 类型:对象
- ConfigMap : 包含 ACL 定义的 ConfigMap 名称。| type:字符串
-
disableRBACRegistry :禁用 RBACRegistry 带来的性能改进,并恢复到经典的行为。默认为
false. | type: boolean
- 副本 :所需 pod 的数量。这是一个指针,用于区分显式零和未指定的。默认为 1. | type: integer | format: int32
资源 : HawtIO 控制台计算资源 | 类型:对象
claim : Claims 列出此容器使用的 spec.resourceClaims 中定义的资源名称。这是一个 alpha 字段,需要启用 DynamicResourceAllocation 功能门。此字段不可变。它只能为容器设置。| type: 数组 |
- items: ResourceClaim 引用 PodSpec.ResourceClaims 中的一个条目。| type: object | required: [ "name" ]
- 名称 :名称必须与使用此字段的 Pod.spec.resourceClaims 中的一个条目的名称匹配。它使该资源在容器内可用。| type: 字符串
- 限制 :限制描述了允许的最大计算资源量。请参阅: Kubernetes 资源管理 Pod 和容器 | 类型:对象
- Request: Requests 描述了所需的最少计算资源。如果容器省略了 Requests,则默认为 Limits (如果明确指定),否则默认为实现定义的值。请求不能超过限值。请参阅: Kubernetes 资源管理 Pod 和容器 | 类型:对象
Route: 用于路由的自定义证书配置(在大多数 OpenShift 安装中不需要)。| 类型:对象
caCert: Ca certificate secret key selector | type: object | required: [ "key" ]
- Key: 要从中选择的 secret 的密钥。必须是有效的 secret 密钥。| type: 字符串
- 名称 :引用的名称。请参阅: Kubernetes Names | type: string
- 可选 :指定是否需要定义 Secret 或其密钥 | type: 布尔值
certSecret: TLS secret 的名称,带有用于路由 TLS 终止的自定义证书 | type: object
- 名称 :引用的名称。请参阅: Kubernetes Names | type: string
- routeHostName :在外部公开 HawtIO 服务的路由的边缘主机名。如果没有指定,则自动生成它,格式为: [-]。其中 是为集群配置的默认路由子域。请注意,如果字段被禁止,Operator 将重新创建路由,以便重新生成主机。| type: 字符串
类型 :部署类型。默认为
集群. | type: 字符串-
Cluster : HawtIO 能够发现和管理经过身份验证的用户可以访问的所有命名空间中的应用程序。
-
Namespace: HawtIO 能够发现和管理部署命名空间中的应用程序。
-
Cluster : HawtIO 能够发现和管理经过身份验证的用户可以访问的所有命名空间中的应用程序。
- Version: HawtIO 控制台容器镜像版本。弃用: 为旧的 operator (<1.0.0)仍然需要它进行安装。| type: 字符串
第 7 章 使用 Jolokia 为 HawtIO 在线设置 Spring Boot 应用程序 复制链接链接已复制到粘贴板!
如果停止 Camel 路由将健康状态更改为 DOWN,并触发 OpenShift 重启,则可能存在的解决方案以避免设置此行为:
camel.routecontroller.enabled = true
它将启用 supervised 路由控制器,以便路由将处于 Stopped 状态,健康检查的整体状态为 UP。
本节论述了通过 HawtIO 启用 Spring Boot 应用程序的监控。它从设置简单示例应用程序中的第一个原则开始。
此应用在 OpenShift 上运行,并由 HawtIO 在线发现和监控。
如果您已经部署了 Spring Boot 应用程序,请跳至 第 7.2 节 “在应用程序中添加 Jolokia Starter 依赖项”。
以下基于 Apache Camel Spring-Boot 示例 存储库中的 jolokia 示例应用程序。
先决条件
-
已安装 Maven,在命令行(CLI)上提供了
mvn。
7.1. 设置 Spring Boot 应用程序示例 复制链接链接已复制到粘贴板!
要创建新的 Spring Boot 应用程序,您可以手动创建 maven 项目目录结构,或者执行 archetype 来为标准 java 项目生成构建,您可以针对各个应用进行自定义。
根据需要自定义这些值:
archetypeVersion- 4.8.0.redhat-00022
groupId-
io.hawtio.online.examples artifactId-
hawtio-online-example-camel-springboot-os version-
1.0.0
运行 maven archetype:
mvn archetype:generate \ -DarchetypeGroupId=org.apache.camel.archetypes \ -DarchetypeArtifactId=camel-archetype-spring-boot \ -DarchetypeVersion=4.8.0.redhat-00022 \ -DgroupId=io.hawt.online.examples \ -DartifactId=hawtio-online-example \ -Dversion=1.0.0 \ -DinteractiveMode=false \ -Dpackage=io.hawtio更改到名为
artifactId的新项目(上例中为hawtio-online-example)创建
hello world应用程序示例,您可以编译它。此时,应用程序应该在本地执行。
使用
mvn spring-boot:runmaven 目标来测试应用程序:$ mvn spring-boot:run
7.2. 在应用程序中添加 Jolokia Starter 依赖项 复制链接链接已复制到粘贴板!
要允许 HawtIO 监控应用程序中的 Camel 路由,您必须添加 camel-jolokia-starter 依赖项。它包含所有必要的传输依赖项。
将所需的依赖项添加到 <
dependencies>部分:<dependencies> ... <!-- Camel --> ... <!-- Dependency is mandatory for exposing Jolokia endpoint --> <dependency> <groupId>org.apache.camel.springboot</groupId> <artifactId>camel-jolokia-starter</artifactId> </dependency> <!-- Optional: enables debugging support for Camel --> <dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-debug</artifactId> <version>4.8.0</version> </dependency> ... </dependencies>有关配置详情,请参阅 Jolokia 组件文档
要启用动态监控,根据 Spring Boot 文档 在
application.properties文件中添加以下属性:camel.springboot.inflight-repository-browse-enabled=true
7.3. 将应用程序配置为部署到 OpenShift 复制链接链接已复制到粘贴板!
初学者已经管理 Kubernetes/OpenShift 环境的配置,因此不需要特定的额外配置。
唯一强制配置是 POD 公开的端口的名称,它必须命名为 jolokia。
spec:
containers:
- name: my-container
ports:
- name: jolokia
containerPort: 8778
protocol: TCP
........
.......
7.4. 将 Spring Boot 应用程序部署到 OpenShift 复制链接链接已复制到粘贴板!
验证 Spring Boot 应用程序是否在正确运行:
按照 Red Hat build of Quarkus 文档中的 Deploying Red Hat build of Quarkus Java applications to OpenShift Container Platform 部分中详述的验证步骤。
当您的新 Spring Boot 应用程序正常运行时,由 HawtIO 实例发现它(取决于其模式 - 'Namespace' 模式需要它在同一项目中)。
新容器应在以下屏幕截图中显示:
点 Connect 以检查 Spring Boot 应用程序可以使用 HawtIO:
第 8 章 使用 Jolokia 为 HawtIO 在线设置 Quarkus 应用程序 复制链接链接已复制到粘贴板!
本节论述了通过 HawtIO 启用 Quarkus 应用程序的监控。它从设置简单示例应用程序中的第一个原则开始。但是,如果已实施了 Quarkus 应用程序,则跳至Example Quarkus Application "上启用 Jolokia Java-Agent。
为方便起见,已实施并发布了一个基于本文档的示例 项目。只需克隆其父存储库并跳至"部署 HawtIO-Enabled Quarkus 应用"到 OpenShift"。
Hawtio 在线组件的解释
- 任何来自用户或 Hawtio Next 的交互都与 HTTP 协议与 Nginx web 服务器通信
- Nginx web 服务器是面向外面的接口,对于外部消费者唯一可见的子组件
发出请求时,Nginx web 服务器被传递给内部网关组件,该组件提供两个不同的目的:
master-Guard Agent
- 定向到目标 Master Cluster API Server (OpenShift)的任何请求都必须通过此组件进行检查,以确保请求的端点 URL 已批准。未批准的 URL (例如,对 secret 或 configmap 的请求)将被拒绝;
Jolokia Agent
- 由于 pod 驻留在 Master 集群中,因此最终对 pod 的 Jolokia 信息的请求也必须以安全的方式进行保护和处理。
- 此代理负责将请求从客户端转换为正确的表单,以在内部传输到目标 pod,并将响应传递回客户端。
8.1. 设置 Quarkus 应用程序示例 复制链接链接已复制到粘贴板!
对于新的 Quarkus 应用程序,
maven quarkus quick-start可用,例如:mvn com.redhat.quarkus.platform:quarkus-maven-plugin:<quarkus.platform.version>:create\ -DprojectGroupId=org.hawtio \ -DprojectArtifactId=quarkus-helloworld \ -Dextensions='openshift,camel-quarkus-quartz'注意使用 Camel Quarkus 官方文档中的最新的
quarkus.platform.version。-
使用
quarkus-maven-plugin生成项目构建 -
将项目
maven groupId设置为org.hawtio,并根据情况进行自定义 -
将项目
maven artifactId设置为quarkus-helloworld,并根据情况自定义 使用以下 Quarkus 扩展:
- OpenShift :启用 maven 以部署到本地 OpenShift 集群;
-
camel-quarkus-quartz :启用 Camel 扩展
quartz以便在示例 Quarkus 应用程序中使用
- 执行 quick-start 为 Quarkus 项目创建构建,然后允许对单个应用程序进行进一步自定义。
-
使用
要构建应用并将其部署到 OpenShift,应在
src/main/resources/application.properties文件中指定以下属性( 请参阅相关文档)。# Set the Docker build strategy quarkus.openshift.build-strategy=docker # Expose the service to create an OpenShift Container Platform route quarkus.openshift.route.expose=true
8.2. 实施示例 Camel Quarkus 应用程序 复制链接链接已复制到粘贴板!
在本例中,将实施简单的 Camel 'hello-world' Quarkus 应用。使用以下内容将
src/main/java/org/hawtio/SampleCamelRoute.java文件添加到项目中:package org.hawtio; import jakarta.enterprise.context.ApplicationScoped; import org.apache.camel.builder.endpoint.EndpointRouteBuilder; @ApplicationScoped public class SampleCamelRoute extends EndpointRouteBuilder { @Override public void configure() { from(quartz("cron").cron("{{quartz.cron}}")).routeId("cron") .setBody().constant("Hello Camel! - cron") .to(stream("out")) .to(mock("result")); from("quartz:simple?trigger.repeatInterval={{quartz.repeatInterval}}").routeId("simple") .setBody().constant("Hello Camel! - simple") .to(stream("out")) .to(mock("result")); } }- 这个示例通过 Camel 路由在容器日志中记录 "Hello Camel …" 条目。
使用以下属性修改
src/main/resources/application.properties文件:# Camel camel.context.name = SampleCamel # Uncomment the following to enable the Camel plugin Trace tab #camel.main.tracing = true #camel.main.backlogTracing = true #camel.main.useBreadcrumb = true # Uncomment to enable debugging of the application and in turn # enables the Camel plugin Debug tab even in non-development # environment #quarkus.camel.debug.enabled = true # Define properties for the Camel quartz component used in the # example quartz.cron = 0/10 * * * * ? quartz.repeatInterval = 10000将以下依赖项添加到文件
pom.xml的 <dependencies> 部分。由于src/main/java/org/hawtio/SampleCamelRoute.java中定义的路由需要这些;如果添加到应用程序的 Camel 路由发生了变化,则需要修改它们:<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-stream</artifactId> </dependency> <dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-mock</artifactId> </dependency>
8.3. 在示例 Quarkus 应用程序中启用 Jolokia Java-Agent 复制链接链接已复制到粘贴板!
为确保 maven 属性可以传递给
src/main/resources/application.properties文件,应将以下内容添加到pom.xml文件的 <build> 部分:<resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> </resource> </resources>将以下 Jolokia 属性添加到文件
pom.xml的<properties> 部分。它们将用于在 Quarkus 容器中配置正在运行的 jolokia java-agent (有关属性的说明,请参阅 Jolokia JVM 代理 文档):<properties> ... <!-- The current HawtIO Jolokia Version --> <jolokia-version>2.1.0</jolokia-version> <!-- =============================================================== === Jolokia agent configuration for the connection with HawtIO =============================================================== It should use HTTPS and SSL client authentication at minimum. The client principal should match those the HawtIO instance provides (the default is `hawtio-online.hawtio.svc`). --> <jolokia.protocol>https</jolokia.protocol> <jolokia.host>*</jolokia.host> <jolokia.port>8778</jolokia.port> <jolokia.useSslClientAuthentication>true</jolokia.useSslClientAuthentication> <jolokia.caCert>/var/run/secrets/kubernetes.io/serviceaccount/service-ca.crt</jolokia.caCert> <jolokia.clientPrincipal.1>cn=hawtio-online.hawtio.svc</jolokia.clientPrincipal.1> <jolokia.extendedClientCheck>true</jolokia.extendedClientCheck> <jolokia.discoveryEnabled>false</jolokia.discoveryEnabled> ... </properties>将以下依赖项添加到文件
pom.xml的 <dependencies> 部分:<!-- This dependency is required for enabling Camel management via JMX / HawtIO. --> <dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-management</artifactId> </dependency> <!-- This dependency is optional for monitoring with HawtIO but is required for HawtIO view the Camel routes source XML. --> <dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-jaxb</artifactId> </dependency> <!-- Add this optional dependency, to enable Camel plugin debugging feature. --> <dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-debug</artifactId> </dependency> <!-- This dependency is required to include the Jolokia agent jvm for access to JMX beans. --> <dependency> <groupId>org.jolokia</groupId> <artifactId>jolokia-agent-jvm</artifactId> <version>${jolokia-version}</version> <classifier>javaagent</classifier> </dependency>实施 maven 属性过滤后,
${jolokia…}环境变量应该在构建应用程序期间从 pom.xml 传递。此属性的目的是将 JVM 选项附加到运行 jolokia java-agent 的容器的执行过程中。使用以下属性修改src/main/resources/application.properties文件:# Enable the jolokia java-agent on the quarkus application quarkus.openshift.env.vars.JAVA_OPTS_APPEND=-javaagent:lib/main/org.jolokia.jolokia-agent-jvm-${jolokia-version}-javaagent.jar=protocol=${jolokia.protocol}\,host=${jolokia.host}\,port=${jolokia.port}\,useSslClientAuthentication=${jolokia.useSslClientAuthentication}\,caCert=${jolokia.caCert}\,clientPrincipal.1=${jolokia.clientPrincipal.1}\,extendedClientCheck=${jolokia.extendedClientCheck}\,discoveryEnabled=${jolokia.discoveryEnabled}
要使 HawtIO 发现部署的应用程序,执行容器必须具有名为
jolokia的端口。因此,需要在src/main/resources/application.properties文件中添加以下属性:# Define the Jolokia port on the container for HawtIO access quarkus.openshift.ports.jolokia.container-port=${jolokia.port} quarkus.openshift.ports.jolokia.protocol=TCP
8.5. 将 HawtIO-Enabled Quarkus 应用程序部署到 OpenShift 复制链接链接已复制到粘贴板!
先决条件 :
另请参阅 :
第 9 章 查看容器和应用程序 复制链接链接已复制到粘贴板!
当您登录 OpenShift 的 HawtIO 时,ShawtIO 主页会显示可用的容器。
流程 :
- 若要管理(创建、编辑或删除)容器,请使用 OpenShift 控制台。
- 要在 OpenShift 集群中查看启用了 HawtIO 的应用程序和 AMQ Broker (如果适用),请点 Discover 选项卡
第 10 章 查看并管理 Apache Camel 应用程序 复制链接链接已复制到粘贴板!
在 HawtIO 的 Camel 选项卡中,您可以查看和管理 Apache Camel 上下文、路由和依赖项。
您可以查看以下详情:
- 所有正在运行的 Camel 上下文的列表
- 每个 Camel 上下文的详细信息,如 Camel 版本号和运行时静态
- 每个 Camel 应用程序及其运行时统计中的所有路由列表
- 正在运行的路由的图形表示以及实时指标
您还可以通过以下方法与 Camel 应用程序交互:
- 启动和停止上下文
- 管理所有 Camel 应用程序及其路由的生命周期,以便您可以重新启动、停止、暂停、恢复等。
- 正在运行的路由的实时追踪和调试
- 浏览并发送消息到 Camel 端点
只有在连接到使用一个或多个 Camel 路由的容器时,Camel 选项卡才可用。
10.1. 启动、暂停或删除上下文 复制链接链接已复制到粘贴板!
- 在 Camel 选项卡的树视图中,点 Camel Contexts。
- 选中列表中一个或多个上下文旁边的框。
- 点 Start 或 Suspend。
删除上下文:
- 停止上下文。
- 单击省略图标,然后从下拉菜单中选择删除。
删除上下文时,您可以将其从部署的应用中删除。
10.2. 查看 Camel 应用程序详情 复制链接链接已复制到粘贴板!
- 在 Camel 选项卡的树视图中,点 Camel 应用程序。
- 要查看应用属性和值列表,请单击 Attributes。
- 要查看应用程序属性的图形表示,请点 Chart,然后点 Edit 以选择您要在图表中看到的属性。
- 要查看动态和阻止的交换,请点 Exchanges。
- 要查看应用端点,请单击 Endpoints。您可以根据 URL、路由ID 和 方向 过滤列表。
- 要查看、启用和禁用与 Camel 内置类型转换机制相关的统计信息,该机制用于将消息正文和消息标头转换为不同类型的消息,请单击 Type Converters。
- 要查看和执行 JMX 操作,如从 XML 添加或更新路由,或查找 classpath 中提供的所有 Camel 组件,请单击 Operations。
10.3. 查看 Camel 路由列表并与之交互 复制链接链接已复制到粘贴板!
查看路由列表 :
- 点 Camel 标签页。
在 tree 视图中,点应用程序的 routes 文件夹:
启动、停止或删除一个或多个路由 :
- 选中列表中一个或多个路由旁边的框。
- 点 Start 或 Stop。
要删除路由,您必须首先停止它。然后单击省略图标,然后从下拉菜单中选择 删除。
注意- 删除路由时,您可以将其从部署的应用程序中删除。
- 您也可以在树形视图中选择一个特定的路由,然后单击右上角的菜单来启动、停止或删除。
- 要查看路由的图形图表,请点 Route 图表。
- 要查看动态和阻止的交换,请点 Exchanges。
- 要查看端点,请单击 Endpoints。您可以根据 URL、Route ID 和 direction 来过滤列表。
- 点 Type Converters 查看、启用和禁用与 Camel 内置类型转换机制相关的统计信息,用于将消息正文和消息标头转换为不同的类型。
与特定路由交互 :
- 在 Camel 选项卡的树视图中,选择一个路由。要查看路由属性和值列表,请单击 Attributes。
- 要查看路由属性的图形表示,请点 Chart。您可以点 Edit 来选择要在图表中看到的属性。
- 要查看动态和阻止的交换,请点 Exchanges。
- 单击 Operations 以在路由上查看并执行 JMX 操作,如以 XML 转储路由或获取路由的 Camel ID 值。
通过路由跟踪信息 :
- 在 Camel 选项卡的树视图中,选择一个路由。
- 选择 Trace,然后单击 Start tracing。
发送消息到路由 :
- 在 Camel 选项卡的树视图中,打开上下文的端点文件夹,然后选择端点。
- 点 Send 子选项卡。
- 以 JSON 或 XML 格式配置消息。
- 单击 Send。
- 返回到路由的 Trace 选项卡,以查看通过路由的消息流。
10.4. 调试路由 复制链接链接已复制到粘贴板!
- 在 Camel 选项卡的树视图中,选择一个路由。
- 选择 Debug,然后单击 Start debugging。
要添加断点,请在图表中选择节点,然后单击 Add breakpoint。节点上会出现一个红色点:
该节点被添加到断点列表中:
点下箭头来进入下一个节点,或点 Resume 按钮来恢复运行路由。
- 单击 暂停 按钮,以暂停路由的所有线程。
- 完成后 ,点 Stop debug。所有断点都会被清除。
第 11 章 查看并管理 JMX 域和 MBeans 复制链接链接已复制到粘贴板!
Java 管理扩展(JMX)是一种 Java 技术,可让您在运行时动态管理资源(服务、设备和应用程序)。资源由名为 MBeans (受管 Bean)的对象表示。您可以在创建、实施或安装后立即管理和监控资源。
在 HawtIO 上使用 JMX 插件,您可以查看和管理 JMX 域和 MBeans。您可以查看 MBean 属性、运行命令并创建显示 MBeans 统计信息的图表。
JMX 选项卡提供活动 JMX 域和在文件夹中组织的 MBeans 的树视图。您可以查看 MBeans 的详情并执行命令。
流程 :
要查看并编辑 MBean 属性 :
- 在 tree 视图中,选择一个 MBean。
- 单击 Attributes 选项卡。
- 点属性查看其详情。
执行操作 :
- 在 tree 视图中,选择一个 MBean。
- 单击 Operations 选项卡,展开列出的操作之一。
- 点 Execute 来运行操作。
查看 chart :
- 在树形视图中,选择一个项目。
- 单击 Chart 选项卡。
第 12 章 查看并管理 Quartz Schedules 复制链接链接已复制到粘贴板!
quartz 是一个功能丰富的开源工作调度库,您可以在大多数 Java 应用程序中集成。您可以使用 Quartz 为执行作业创建简单或复杂的计划。
作业定义为一个标准 Java 组件,可虚拟执行您进行编程的任何操作。
如果您的 Camel 路由部署 camel-quartz 组件,则 HawtIO 会显示 Quartz 选项卡。请注意,您可以通过 JMX 树视图访问 Quartz mbeans。
流程 :
- 在 HawtIO 中,单击 Quartz 选项卡。Quartz 页面包含 Quartz 调度程序和调度程序、Triggers 和 Jobs 选项卡的树视图。
- 要暂停或启动调度程序,请单击 调度程序选项卡上的按钮。
点 Triggers 选项卡查看决定作业何时运行的触发器。例如,触发器可以指定在特定时间(从 millisecond)、指定天数或在特定时间重复启动作业。
- 要过滤触发器的列表,请从下拉列表中选择 State、Group、Name 或 Type。然后,您可以通过选择或输入 fill-on 字段来进一步过滤列表。
- 要暂停、恢复、更新或手动触发触发器,请点击 Action 列中的选项。
- 点 Jobs 选项卡查看正在运行的作业列表。您可以根据表中的列对列表进行排序: Group、Name、Durable、Recover、Job ClassName 和 Description。
第 13 章 查看线程 复制链接链接已复制到粘贴板!
您可以查看和监控线程的状态。
流程 :
- 单击 Runtime 选项卡,然后单击 线程 子选项卡。
- Threads 页面列出了每个线程的活跃线程和堆栈追踪详情。默认情况下,线程列表以降序显示所有线程。
- 要通过增加 ID 来对列表进行排序,请单击 ID 列标签。
- (可选)根据线程状态(如 Blocked)或线程名称过滤列表。
- 要深入查看特定线程的详细信息,如锁定类名称和该线程的完整堆栈追踪,请在 Actions 列中点 More。
第 14 章 确保在 HawtIO 中显示正确的数据 复制链接链接已复制到粘贴板!
如果 HawtIO 中的队列和连接的显示缺少队列、缺少连接或显示不一致图标,请调整 Jolokia 集合大小参数,以指定 Jolokia marshals 中的最大元素数。
流程 :
在 HawtIO 右上角,单击用户图标,然后单击 Preferences。
- 增加 Maximum collection size 选项的值(默认为 50,000)。
- 单击 Close。
第 15 章 OpenID Connect 集成 复制链接链接已复制到粘贴板!
HawtIO 已经支持 Keycloak 作为 OpenID 提供程序。但是,Keycloak 已宣布 HawtIO 使用的配置方法已弃用。因为 OpenID Connect Core 1.0 是分布式身份验证的广泛规格和标准方法(基于 OAuth 2),所以HawtIO 4 现在支持通用的 OpenID 身份验证。
15.1. 构建块和术语 复制链接链接已复制到粘贴板!
要了解 HawtIO 如何使用 OpenID Connect 和 OAuth2,值得重新调用一些基本概念。基于 OpenID Connect (基于 OAuth2构建)的分布式身份验证有 3 个主要方:
资源服务器 :
托管受保护资源的服务器组件,其中根据访问令牌限制或授予其访问。通常,这个服务器通过 REST API 访问,且不会自行提供用户界面。
客户端 :
应用程序(通常使用用户界面),它们代表用户(被视为资源所有者)访问资源服务器。若要访问资源服务器,客户端必须先获取访问令牌。
在 OpenID Connect 规格中,客户端被命名为依赖方(RP)。
授权服务器 :
协调客户端和资源服务器之间通信的服务器。客户端要求授权服务器验证用户(资源所有者),如果身份验证成功,则会为客户端发出访问令牌来访问资源服务器。
在 OpenID Connect 规格中,授权服务器名为 OpenID Provider (OP)。
OAuth2 和 OpenID Connect 的主要目标,它允许应用在没有使用用户凭证和切换到令牌交换的情况下访问 API。知道 HawtIO 如何映射到上述角色非常重要:
- HawtIO 客户端应用是 OAuth2 客户端。用户与 HawtIO Web 应用程序交互,后者与 HawtIo Server (backend)与 Jolokia 代理通信。在访问 Jolokia 代理前,ShawtIO 需要 OpenID Connect 访问令牌。为此,ShawtIO 客户端通过将用户重定向到授权服务器来启动 OpenID Connect 身份验证进程。
- HawtIO 服务器应用程序是一个 JakartaEE 应用程序,公开 Jolokia Agent API,它根据访问令牌的内容授权用户操作。使用 OAuth2 术语时,hawtIO 服务器是一个资源服务器。
以下 UML 图表显示了大图。
最重要的方面是: HawtIO 客户端永远不会处理用户凭证。使用授权服务器和 HawtIO 客户端进行身份验证的用户只获得访问 HawtIO 服务器(及其 Jolokia API)的访问令牌。
15.2. HawtIO 中的通用 OpenID Connect 身份验证 复制链接链接已复制到粘贴板!
HawtIO 4 可以与现有 OpenID Connect 供应商(如 Keycloak、Microsoft Entra ID、Auth0, …)一起使用,并使用这些库来填充任务:
- Apache HTTP 客户端 4 将来自 HawtIO 服务器的 HTTP 通信实施到 OpenID Connect 供应商(例如,检索有关令牌签名验证的公钥的信息)。
- Nimbus JOSE + JWT 库,以操作和验证 OpenID Connect / OAuth2 访问令牌。
这些库包含在 HawtIO Server WAR 中,这意味着不需要安装/部署任何其他库(就像 Keycloak 特定的配置一样)。为了配置带有外部 OpenID Connect 提供商的 HawtIO,我们需要提供一个配置文件,并将 HawtIO 指向其位置。
指定 OIDC (OpenID Connect)配置的位置为 -Dhawtio.oidcConfig,但没有指定,则会检查默认位置。默认值为:
-
对于 Karaf runtime,
${karaf.base}/etc/hawtio-oidc.properties -
对于 Jetty runtime,
${jetty.home}/etc/hawtio-oidc.properties -
对于 Tomcat 运行时,
${catalina.home}/conf/hawtio-oidc.properties -
对于 JBoss/EAP/Wildfly 运行时,
${jboss.server.config.dir}/hawtio-oidc.properties -
对于 Apache Artemis 运行时,
${artemis.instance.etc}/hawtio-oidc.properties -
回退到
classpath:hawtio-oidc.properties(用于嵌入式 HawtIO 用法)
与 Keycloak 特定的配置不同,只有一个 2.2.properties 文件来配置 OpenID Connect 配置的所有方面。
以下是模板:
# OpenID Connect configuration requred at client side
# URL of OpenID Connect Provider - the URL after which ".well-known/openid-configuration" can be appended for
# discovery purposes
provider = http://localhost:18080/realms/hawtio-demo
# OpenID client identifier
client_id = hawtio-client
# response mode according to https://openid.net/specs/oauth-v2-multiple-response-types-1_0.html
response_mode = fragment
# scope to request when performing OpenID authentication. MUST include "openid" and required permissions
scope = openid email profile
# redirect URI after OpenID authentication - must also be configured at provider side
redirect_uri = http://localhost:8080/hawtio
# challenge method according to https://datatracker.ietf.org/doc/html/rfc7636
code_challenge_method = S256
# prompt hint according to https://openid.net/specs/openid-connect-core-1_0.html#AuthRequest
prompt = login
# additional configuration for the server side
# if true, .well-known/openid-configuration will be fetched at server side. This is required
# for proper JWT access token validation
oidc.cacheConfig = true
# time in minutes to cache public keys from jwks_uri
jwks.cacheTime = 60
# a path for an array of roles found in JWT payload. Property placeholders can be used for parameterized parts
# of the path (like for Keycloak) - but only for properties from this particular file
# example for properly configured Entra ID token
#oidc.rolesPath = roles
# example for Keycloak with use-resource-role-mappings=true
#oidc.rolesPath = resource_access.${client_id}.roles
# example for Keycloak with use-resource-role-mappings=false
oidc.rolesPath = realm_access.roles
# properties for role mapping. Each property with "roleMapping." prefix is used to map an original role
# from JWT token (found at ${oidc.rolesPath}) to a role used by the application
roleMapping.admin = admin
roleMapping.user = user
roleMapping.viewer = viewer
roleMapping.manager = manager
# timeout for connection establishment (milliseconds)
http.connectionTimeout = 5000
# timeout for reading from established connection (milliseconds)
http.readTimeout = 10000
# HTTP proxy to use when connecting to OpenID Connect provider
#http.proxyURL = http://127.0.0.1:3128
# TLS configuration (system properties can be used, e.g., "${catalina.home}/conf/hawtio.jks")
#ssl.protocol = TLSv1.3
#ssl.truststore = src/test/resources/hawtio.jks
#ssl.truststorePassword = hawtio
#ssl.keystore = src/test/resources/hawtio.jks
#ssl.keystorePassword = hawtio
#ssl.keyAlias = openid connect test provider
#ssl.keyPassword = hawtio
此文件配置 HawtIO+OpenID Connect 的一些方面:
- OAuth2 - 配置授权服务器、客户端 ID 和几个 OpenID Connect 相关选项的位置
- JWKS - 从 jwks_uri 获取的公钥缓存时间,这是公开授权服务器使用的公钥的端点。
- JWT 令牌配置 - 有关声明(JSON Web Token 中的字段)的信息,其中包含与经过身份验证的用户关联的角色。我们还允许将授权服务器中定义的角色映射到应用程序(HawtIO 服务器和 Jolokia)使用的角色。
- HTTP 配置 - 服务器端的 HTTP 客户端用于连接授权服务器(用于获取 OpenID Connect 元数据和公开的公钥)。
这个示例配置可根据特定的需求进行调整,但它在与容器化 Keycloak 一起使用时也可以按原样工作。(请参阅以下)。
15.3. JAAS 角色类配置 复制链接链接已复制到粘贴板!
通过 JAAS 在 HawtIO 服务器端使用 OpenID Connect。当 HawtIO 客户端获取访问令牌 时,会使用 HTTP Authorization: Bearer <access_ token > 标头发送每个 Jolokia 请求。JWT 令牌中包含的每个角色是 (可能在映射后)作为 JAAS 主题 的角色主体 包含。默认情况下(如果未明确配置)角色主体类为 io.hawt.web.auth.oidc.RolePrincipal。
但是,可以配置另一个类(要求是 - 必须包含单个 String-argument 构造器),才能用作主体角色类。例如,与 Apache Artemis 一起使用时,该角色应为 org.apache.activemq.artemis.spi.core.security.jaas.RolePrincipal。
有一个系统属性指定角色类:
-Dhawtio.rolePrincipalClasses=org.apache.activemq.artemis.spi.core.security.jaas.RolePrincipal
15.4. 在 Keycloak 中使用 HawtIO 和 OpenID Connect 身份验证 复制链接链接已复制到粘贴板!
运行 Keycloak 实例的最简单方法是使用容器:
podman run -d --name keycloak \
-p 18080:8080 \
-e KEYCLOAK_ADMIN=admin \
-e KEYCLOAK_ADMIN_PASSWORD=admin \
quay.io/keycloak/keycloak:latest start-dev
启动之后,浏览 http://localhost:18080/admin/master/console/ 并创建一个新域:
在 realm 创建屏幕中,上传 hawtio-demo-realm.json,它使用预先配置的 hawtio-client 客户端和 3 个用户定义新的 hawtio-demo 域:
-
带有角色
管理器、admin、viewer和user的admin/admin -
带有角色查看器和
用户的viewer/viewer -
只使用用户角色的 jdoe/jdoe
15.4.1. 检查 JWT 令牌问题 复制链接链接已复制到粘贴板!
要检查授予访问令牌的内容,我们可以使用 Keycloak 接口。导航到"Clients",选择"hawtio-client",并使用带有"Evaluate"子选项卡的"客户端范围"选项卡:
然后,在"Users"字段中,可以选择"admin",然后单击"确定的访问令牌"。然后,可以检查示例令牌:
{
"exp": 1709552728,
"iat": 1709552428,
"jti": "0f33971f-c4f7-4a5c-a240-c18ba3f97aa1",
"iss": "http://localhost:18080/realms/hawtio-demo",
"aud": "account",
"sub": "84d156fa-e4cc-4785-91c1-4e0bda4b8ed9",
"typ": "Bearer",
"azp": "hawtio-client",
"session_state": "181a30ac-fce1-4f4f-aaee-110304ccb0e6",
"acr": "1",
"allowed-origins":
[
"http://0.0.0.0:8181",
"http://localhost:8080",
"http://localhost:8181",
"http://0.0.0.0:10001",
"http://0.0.0.0:8080",
"http://localhost:10001",
"http://localhost:10000",
"http://0.0.0.0:10000"
],
"realm_access":
{
"roles":
[
"viewer",
"manager",
"admin",
"user"
]
},
"resource_access":
{
"account":
{
"roles":
[
"manage-account",
"manage-account-links",
"view-profile"
]
}
},
"scope": "openid profile email",
"sid": "181a30ac-fce1-4f4f-aaee-110304ccb0e6",
"email_verified": false,
"name": "Admin HawtIO",
"preferred_username": "admin",
"given_name": "Admin",
"family_name": "HawtIO",
"email": "admin@hawt.io"
}
了解 JWT 访问令牌的结构,我们可以检查角色路径是否已正确配置:
# example for Keycloak with use-resource-role-mappings=false
oidc.rolesPath = realm_access.roles
HawtIO 4 还使用 Microsoft Entra ID 测试。在理论上,应该使用任何 OpenID Connect 供应商的所有内容都是访问相关的 OpenID 提供程序元数据,在实践中,我们需要一些特定于供应商的配置。
客户端使用 "App registrations" 刀片在 Entra ID 中注册。在注册应用程序时,最重要的决定是平台类型的 Redirect URI:
有 2 个选项可供选择(我们不考虑"Public client/native (mobile & desktop) "平台)。稍后配置 Redirect URI 时会显示此 UI:
虽然这不太明显了在第一眼中选择的内容,但它足以出现:
Web 平台 :
这种类型的客户端适合服务器端应用程序和 API。
SPA 平台 :
SPA 应用程序在浏览器中运行,它自然使用"Authorization Code Flow"和所谓的公共客户端。其原因是,在浏览器应用程序中存储凭证和 secret 没有好的方式。
选择 SPA 平台为我们提供了在 Entra ID UI 中的标记:
15.5.1. 在 Entra ID 中使用单个 SPA 客户端 复制链接链接已复制到粘贴板!
在 Entra ID 中配置 SPA 客户端后,我们可以已在 hawtio-oidc.properties 中设置相关选项。在 Entra ID 中的"应用程序注册"刀片中,我们可以单击"Endpoints"选项卡并显示以下信息:
租户 ID 是特定于正在使用的 Entra ID / Azure 租户的 UUID。以下是 HawtIO 配置,其中 provider 是租户的基本 URL,client_id 是 App Registration 页面概述中的"应用程序(客户端)ID"。
# OpenID Connect configuration requred at client side
# URL of OpenID Connect Provider - the URL after which ".well-known/openid-configuration" can be appended for
# discovery purposes
provider = https://login.microsoftonline.com/00000000-1111-2222-3333-444444444444/v2.0
# OpenID client identifier
client_id = 55555555-6666-7777-8888-999999999999
# response mode according to https://openid.net/specs/oauth-v2-multiple-response-types-1_0.html
response_mode = fragment
# scope to request when performing OpenID authentication. MUST include "openid" and required permissions
scope = openid email profile
# redirect URI after OpenID authentication - must also be configured at provider side
redirect_uri = http://localhost:8080/hawtio
# challenge method according to https://datatracker.ietf.org/doc/html/rfc7636
code_challenge_method = S256
# prompt hint according to https://openid.net/specs/openid-connect-core-1_0.html#AuthRequest
prompt = login
此类配置的问题(其中 openid email profile 作为 范围 参数发送)是假定的范围位于事实上 openid profile 用户。读和授予的访问令牌为 (仅显示相关的 JWT 声明):
{
"aud": "00000003-0000-0000-c000-000000000000",
"iss": "https://sts.windows.net/8fd8ed3d-c739-410f-83ab-ac2228fa6bbf/",
...
"app_displayname": "hawtio",
...
"scp": "email openid profile User.Read",
...
}
aud (audience)声明为 00000003-0000-0000-c000-000000000000,它是 … Microsoft Graph API 的 OAuth2 客户端 ID。
HawtIO 服务器(使用 Jolokia 代理)不应使用这样的访问令牌,也使用与 Microsoft Graph API 关联的密钥创建签名。
为了正确配置 Entra ID 并确保由 HawtIO 服务器 可使用 的访问令牌,我们需要 两个应用程序注册 - 适用于 HawtIO 客户端和 HawtIO 服务器。请参见以下子章节。
15.5.2. 在 Entra ID 中将 SPA 与 Web 客户端一起使用 复制链接链接已复制到粘贴板!
建议您在 Entra ID 中设置两个应用程序注册:
- HawtIO 客户端应用程序的 SPA 客户端 - 这是配置启用了 PKCE 的 OAuth2 公共客户端 的方法。
-
HawtIO 服务器应用程序的 Web (API)客户端(实际上,其 Jolokia API)- 这是 Entra ID,它公开为名为范围(例如)
api://hawtio-server/Jolokia.Access,然后在上面的 HawtIO 客户端应用程序中配置它作为允许的 API。
最后,当启动 Authorization Code Flow 在 scope 参数中的其中一个请求范围时,为 HawtIO Server 应用程序(如 api://hawtio-server/Jolokia.Access)定义的范围。
我们来总结 Entra ID 中所需的配置。
-
使用 "Web" Redirect URI 创建
hawtio-server应用注册。 在 "Expose a API" 部分,添加一个代表来自 HawtIO 客户端请求的访问范围的范围:
这将创建一个可引用的
api://hawtio-server/Jolokia.Access范围。在
hawtio-server的"App roles"部分中定义您要分配给此客户端范围内用户的任何角色,例如:
在"企业应用程序"用于
hawtio-server的刀片式中,转至"用户和组"选项卡并添加用户角色分配。例如:
使用 "SPA" Redirect URI 创建
hawtio-client应用程序注册。
在用于
hawtio-client应用程序注册的"API Permissions"部分,为hawtio-server公开 API 添加 委托权限 :
这应该配置一组委托的权限,如下所示:
注意阅读 Microsoft Entra ID 文档中的 委托权限的更多信息。
-
对于企业应用刀片中的
hawtio-client,不需要 User-Role 映射。 在配置了以上配置后,我们可以在 HawtIO 配置中正确设置
scope参数:这将创建一个可引用的
api://hawtio-server/Jolokia.Access范围。-
在
hawtio-server的"App roles"部分中定义您要分配给此客户端范围内用户的任何角色,例如: -
在"企业应用程序"用于
hawtio-server的刀片式中,转至"用户和组"选项卡并添加用户角色分配。例如: -
使用 "SPA" Redirect URI 创建
hawtio-client应用程序注册 在用于
hawtio-client应用程序注册的"API Permissions"部分,为hawtio-server公开 API 添加委托权限:这应该配置一组委托的权限,如下所示:
注意阅读 Microsoft Entra ID 文档中的 委托权限的更多信息。
-
对于企业应用刀片中的
hawtio-client,不需要 User-Role 映射。
在配置了以上配置后,我们可以在 HawtIO 配置中正确设置 scope 参数:
# scope to request when performing OpenID authentication. MUST include "openid" and required permissions
scope = openid email profile api://hawtio-server/Jolokia.Access
15.5.3. 访问令牌配置 复制链接链接已复制到粘贴板!
最后,但非常重要的配置项是 Token Configuration。对于 hawtio-server 应用注册,这是代表 HawtIO 服务器(并且是消耗授予访问令牌的组件)的应用程序,我们必须确保将组声明添加到访问令牌中。
以下是最小配置:
组 声明需要包含 安全组和 目录角色和 组,需要按名称而不是 UUID 表示:
请参考以下的 hawtio-server 应用程序注册清单的相关 JSON 片断:
"optionalClaims":
{
"idToken":
[
{
"name": "groups",
"source": null,
"essential": false,
"additionalProperties": []
}
],
"accessToken":
[
{
"name": "groups",
"source": null,
"essential": false,
"additionalProperties":
[
"sam_account_name"
]
},
...
现在,授予的访问令牌不再特定于 Microsft Graph API audience。它适用于 hawtio-server - aud 声明是 hawtio-server 应用程序注册和 appid 声明的 UUID 是 hawtio-client 应用程序注册的 UUID:
{
"aud": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
"iss": "https://sts.windows.net/.../",
"iat": 1709626257,
"nbf": 1709626257,
"exp": 1709630939,
...
"appid": "55555555-6666-7777-8888-999999999999",
...
"groups":
[
...
],
...
"name": "hawtio-viewer",
...
"roles":
[
"HawtIO.User"
],
"scp": "Jolokia.Access",
然后,转换的角色(可能使用映射)可在 角色 声明中找到,这反映在配置中:
# a path for an array of roles found in JWT payload. Property placeholders can be used for parameterized parts
# of the path (like for Keycloak) - but only for properties from this particular file
# example for properly configured Entra ID token
#oidc.rolesPath = roles
...
# properties for role mapping. Each property with "roleMapping." prefix is used to map an original role
# from JWT token (found at ${oidc.rolesPath}) to a role used by the application
roleMapping.HawtIO.User = user
...