1.2. 在 OpenShift 4.x 中设置 Fuse 控制台
在 OpenShift 4.x 中,设置 Fuse 控制台涉及保护、安装和部署它。您可以选择安装和部署 Fuse 控制台:
第 1.2.1 节 “使用 OperatorHub 在 OpenShift 4.x 上安装和部署 Fuse 控制台”
您可以使用 Fuse Console Operator 来安装和部署 Fuse 控制台,以便可以访问特定命名空间中的 Fuse 应用程序。
第 1.2.2 节 “使用命令行在 OpenShift 4.x 上安装和部署 Fuse 控制台”
您可以使用命令行和 Fuse 控制台模板之一来安装和部署 Fuse 控制台,以便它能够在 OpenShift 集群或特定命名空间中访问 Fuse 应用程序。
另外,您可以为 Fuse 控制台实施基于角色的访问控制(RBAC),如 第 1.2.3 节 “OpenShift 4.x 上 Fuse 控制台的基于角色的访问控制” 所述。
1.2.1. 使用 OperatorHub 在 OpenShift 4.x 上安装和部署 Fuse 控制台
要在 OpenShift 4.x 上安装 Fuse 控制台,您可以使用 OpenShift OperatorHub 中提供的 Fuse Console Operator。要部署 Fuse 控制台,请创建一个已安装 Operator 实例。
前提条件
如果要为 Fuse 控制台自定义基于角色的访问控制(RBAC),则必须在安装 Fuse Console Operator 的同一 OpenShift 命名空间中有一个 RBAC 配置映射文件。如果要使用默认的 RBAC 行为,如 OpenShift 4.x 上 Fuse Console 的基于角色的访问控制 中所述,则不需要提供配置映射文件。
流程
要安装和部署 Fuse 控制台:
-
以具有集群管理员访问权限的用户身份登录 Web 浏览器中的 OpenShift 控制台。
- 点 Operators,然后点 OperatorHub。
- 在搜索字段窗口中,键入 Fuse Console 来过滤操作器列表。
- 单击 Fuse Console Operator。
在 Fuse Console Operator 安装窗口中,单击 Install。
Create Operator Subscription 表单将打开。
- 对于 更新频道,请选择 fuse-console-7.8.x。
对于 Installation Mode,接受 default (集群中的特定命名空间)。
请注意,在安装 Operator 后,当部署 Fuse 控制台时,您可以选择监控集群中的所有命名空间中的应用程序,或者仅监控安装 Fuse Console operator 的命名空间中的应用程序。
- 对于 Installed Namespace,选择要在其中安装 Fuse Console Operator 的命名空间。
对于 批准策略,您可以选择 Automatic 或 Manual 来配置 OpenShift 如何处理对 Fuse Console Operator 的更新。
- 如果选择 Automatic 更新,当 Fuse Console Operator 的新版本可用时,OpenShift Operator Lifecycle Manager (OLM)将自动升级 Fuse 控制台的运行实例,而无需人为干预。
- 如果选择手动 更新,则当有新版 Operator 可用时,OLM 会创建更新请求。作为集群管理员,您必须手动批准该更新请求,才能将 Fuse Console Operator 更新至新版本。
点 Install。
OpenShift 在当前命名空间中安装 Fuse Console Operator。
- 要验证安装,点 Operators,然后点 Installed Operators。您可以在 Operator 列表中看到 Fuse Console。
使用 OpenShift Web 控制台部署 Fuse 控制台:
- 在 Installed Operators 列表中,单击 Name 列下的 Fuse Console。
在 Provided APIs 下的 Operator Details 页面中,点 Create Instance。
接受配置默认值或选择性地编辑它们。
对于 Replicas,如果要提高 Fuse 控制台性能(例如在高可用性环境中),您可以增加分配给 Fuse 控制台的 pod 数量。
对于 Rbac (基于角色的访问控制),如果要为 Fuse 控制台启用 RBAC,在 Form 视图中将 rbac > Enabled 选项设置为 true。另外,在 YAML 视图中,编辑该文件以在 spec 下包含以下条目:
rbac: enabled: true
如果要自定义默认的 RBAC 行为,且 ConfigMap 文件已在安装 Fuse Console Operator 的命名空间中存在时,才在 config Map 字段中指定一个值。如需有关 RBAC 的更多信息,请参阅 OpenShift 4.x 上 Fuse 控制台的基于角色的访问控制。
点 Create。
Fuse Console Operator Details 页面将打开,并显示部署的状态。
打开 Fuse 控制台:
对于 命名空间 部署:在 OpenShift Web 控制台中,打开安装 Fuse Console operator 的项目,然后选择 Overview。在 Project Overview 页面中,向下滚动到 Launcher 部分,再单击 Fuse Console URL 将它打开。
对于 集群部署,在 OpenShift Web 控制台的标题栏中,点网格图标( )。在弹出菜单中,在红帽应用程序 下,单击 Fuse Console URL 链接。
登录 Fuse 控制台。
在列出所需权限的浏览器中打开 Authorize Access 页面。
点击 Allow selected permissions。
Fuse Console 在浏览器中打开,并显示您具有访问权限的 Fuse 应用容器集。
点您要查看的应用程序的 Connect。
这时将打开一个新的浏览器窗口,显示 Fuse 控制台中的应用程序。
1.2.2. 使用命令行在 OpenShift 4.x 上安装和部署 Fuse 控制台
在 OpenShift 4.x 中,您可以选择其中一个部署选项来从命令行安装和部署 Fuse 控制台:
- 集群 - Fuse Console 可以发现并连接到 OpenShift 集群上的多个命名空间(项目)部署的 Fuse 应用程序。若要部署此模板,您必须具有 OpenShift 集群的管理员角色。
- 具有基于角色的访问控制的集群 - 具有可配置基于角色的访问控制(RBAC)的集群模板。如需更多信息,请参阅 OpenShift 4.x 上 Fuse 控制台的基于角色的访问控制。
- namespace - Fuse 控制台有权访问特定的 OpenShift 项目(命名空间)。若要部署此模板,您必须具有 OpenShift 项目的管理员角色。
- 具有基于角色的访问控制的命名空间 - 带有可配置 RBAC 的命名空间模板。如需更多信息,请参阅 OpenShift 4.x 上 Fuse 控制台的基于角色的访问控制。
要查看 Fuse Console 模板的参数列表,请运行以下命令:
oc process --parameters -f https://raw.githubusercontent.com/jboss-fuse/application-templates/application-templates-2.1.0.fuse-sb2-780019-redhat-00005/fuse-console-namespace-os4.json
先决条件
- 在安装并部署 Fuse 控制台之前,您必须生成使用服务签名证书颁发机构签名的客户端证书,如 生成证书 来保护 OpenShift 4.x 上的 Fuse 控制台 中所述。
-
具有 OpenShift
集群的集群管理员角色
。 - 已安装 Fuse 控制台镜像流(以及其他 Fuse 镜像流),如 在 OpenShift 4.x 服务器 上安装 Fuse 镜像流和模板 中所述。
流程
使用以下命令检索所有模板的列表,验证是否安装了 Fuse Console 镜像流:
oc get template -n openshift
另外,如果要使用新的发行版本标签更新已安装的镜像流,请使用以下命令将 Fuse Console 镜像导入到 openshift 命名空间:
oc import-image fuse7/fuse7-console:1.8 --from=registry.redhat.io/fuse7/fuse-console:1.8 --confirm -n openshift
运行以下命令来获取 Fuse Console APP_NAME 值:
oc process --parameters -f TEMPLATE-FILENAME
其中
TEMPLATE-FILENAME
是以下模板之一:集群模板:
带有可配置 RBAC 的集群模板:
命名空间模板:
带有可配置 RBAC 的命名空间模板:
例如,对于带有可配置 RBAC 的集群模板,运行以下命令:
oc process --parameters -f https://raw.githubusercontent.com/jboss-fuse/application-templates/application-templates-2.1.0.fuse-sb2-780019-redhat-00005/fuse-console-cluster-rbac.yml
从您在 OpenShift 4.x 上保护 Fuse 控制台 生成的证书,使用以下命令创建 secret 并将其挂载到 Fuse 控制台中(其中 APP_NAME 是 Fuse 控制台应用程序的名称)。
oc create secret tls APP_NAME-tls-proxying --cert server.crt --key server.key
运行以下命令,根据 Fuse Console 模板的本地副本创建一个新应用程序(其中 myproject 是 OpenShift 项目的名称),mytemp 是包含 Fuse 控制台模板的本地目录的路径,myhost 是访问 Fuse 控制台的主机名:
对于集群模板:
oc new-app -n myproject -f {templates-base-url}/fuse-console-cluster-os4.json -p ROUTE_HOSTNAME=myhost”
对于使用 RBAC 模板的集群:
oc new-app -n myproject -f {templates-base-url}/fuse-console-cluster-rbac.yml -p ROUTE_HOSTNAME=myhost”
对于命名空间模板:
{templates-base-url}/fuse-console-namespace-os4.json
对于使用 RBAC 模板的命名空间:
oc new-app -n myproject -f {templates-base-url}/fuse-console-namespace-rbac.yml
要配置 Fuse 控制台使其能够打开 OpenShift Web 控制台,请运行以下命令设置
OPENSHIFT_WEB_CONSOLE_URL
环境变量:oc set env dc/${APP_NAME} OPENSHIFT_WEB_CONSOLE_URL=`oc get -n openshift-config-managed cm console-public -o jsonpath={.data.consoleURL}`
运行以下命令,获取 Fuse Console 部署的状态和 URL:
oc status
- 要从浏览器访问 Fuse 控制台,请使用步骤 7 返回的 URL (例如 https://fuse-console.192.168.64.12.nip.io)。
1.2.2.1. 生成证书来保护 OpenShift 4.x 上的 Fuse 控制台
在 OpenShift 4.x 中,若要在 Fuse Console 代理和 Jolokia 代理安全之间保持连接,必须在部署 Fuse 控制台前生成客户端证书。服务签名证书颁发机构私钥必须用于为客户端证书签名。
只有在 使用命令行安装和部署 Fuse 控制台时,您必须按照以下步骤操作。如果使用 Fuse Console Operator,它会为您处理此任务。
您必须为每个 OpenShift 集群生成并签署单独的客户端证书。不要将同一证书用于多个集群。
先决条件
-
具有
集群管理员
对 OpenShift 集群的访问权限。 如果您要为多个 OpenShift 集群生成证书,并且之前在当前目录中为不同的集群生成证书,请执行以下操作之一,以确保为当前集群生成不同的证书:
-
从当前目录中删除现有证书文件(如
ca.crt
、ca.key
、ca.key 和ca.srl
)。 更改到其他工作目录。例如,如果您的当前工作目录命名为
cluster1
,请创建一个新的cluster2
目录,并将工作目录改为该目录:mkdir ../cluster2
cd ../cluster2
-
从当前目录中删除现有证书文件(如
流程
以具有集群管理员访问权限的用户身份登录 OpenShift:
oc login -u <user_with_cluster_admin_role>
通过执行以下命令来检索服务签名证书颁发机构密钥:
检索证书:
oc get secrets/signing-key -n openshift-service-ca -o "jsonpath={.data['tls\.crt']}" | base64 --decode > ca.crt
检索私钥:
oc get secrets/signing-key -n openshift-service-ca -o "jsonpath={.data['tls\.key']}" | base64 --decode > ca.key
使用
easyrsa
、openssl
或cfssl
生成客户端证书,如 Kubernetes 证书管理 中所述。以下是使用 openssl 的示例命令:
生成私钥:
openssl genrsa -out server.key 2048
编写 CSR 配置文件。
cat <<EOT >> csr.conf [ req ] default_bits = 2048 prompt = no default_md = sha256 distinguished_name = dn [ dn ] CN = fuse-console.fuse.svc [ v3_ext ] authorityKeyIdentifier=keyid,issuer:always keyUsage=keyEncipherment,dataEncipherment,digitalSignature extendedKeyUsage=serverAuth,clientAuth EOT
在这里,
CN
参数中的值指的是应用程序使用的应用程序名称和命名空间。生成 CSR:
openssl req -new -key server.key -out server.csr -config csr.conf
发布签名证书:
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 10000 -extensions v3_ext -extfile csr.conf
后续步骤
您需要此证书来为 Fuse 控制台创建 secret,如 使用命令行在 OpenShift 4.x 上安装和部署 Fuse 控制台 中所述。
1.2.3. OpenShift 4.x 上 Fuse 控制台的基于角色的访问控制
Fuse 控制台提供基于角色的访问控制(RBAC),它根据 OpenShift 提供的用户授权来推断访问。在 Fuse 控制台中,RBAC 决定用户对 pod 执行 MBean 操作的能力。
如需有关 OpenShift 授权的信息,请参阅 OpenShift 文档中的使用 RBAC 定义和应用权限 部分。
当使用 Operator 在 OpenShift 上安装 Fuse 控制台时,默认禁用基于角色的访问控制。您可以选择在使用 Operator 期间或安装后启用 RBAC,如 使用 OperatorHub 在 OpenShift 4.x 上安装和部署 Fuse 控制台 中所述。
如果要为 Fuse 控制台实施基于角色的访问控制,则必须使用通过 RBAC 配置的模板之一(fuse-console-cluster-rbac.yml
或 fuse-console-namespace-rbac.yml
)来安装 Fuse 控制台 ,如在 OpenShift 4.x 上安装 Fuse 控制台 中所述。
Fuse Console RBAC 利用 OpenShift 中 pod 资源的 操作动词 访问权限来确定用户对 Fuse 控制台中 pod 的 MBean 操作的访问权限。默认情况下,Fuse 控制台有两个用户角色:
admin
如果用户可以在 OpenShift 中更新 pod,则用户会延迟 Fuse 控制台的 admin 角色。用户可以在 Fuse 控制台中为 pod 执行写入 MBean 操作。
viewer
如果用户可以在 OpenShift 中获取 pod,则用户会延迟 Fuse 控制台的 viewer 角色。用户可以在 Fuse 控制台中为 pod 执行 只读 MBean 操作。
如果您没有使用 Fuse Console Operator 配置启用 RBAC,或者您没有使用 RBAC 模板安装 Fuse 控制台,只有 pod 资源上赋予 update 动词的 OpenShift 用户才会被授权执行 Fuse Console MBeans 操作。授予 pod 资源的 get 动词的 用户可以查看 pod,但不能执行任何 Fuse 控制台操作。
其他资源
1.2.3.1. 确定 OpenShift 4.x 上 Fuse 控制台的访问角色
Fuse Console 基于角色的访问控制是从 Pod 的 OpenShift 权限中推断出来的。要确定授予特定用户的 Fuse 控制台访问角色,获取赋予 Pod 用户的 OpenShift 权限。
先决条件
- 您知道用户名。
- 您知道 pod 的名称。
流程
要确定用户是否有 pod 的 Fuse Console admin 角色,请运行以下命令来查看用户是否可以更新 OpenShift 上的 pod:
oc auth can-i update pods/<pod> --as <user>
如果响应是
yes
,则用户具有 Pod 的 Fuse Console admin 角色。用户可以在 Fuse 控制台中为 pod 执行写入 MBean 操作。要确定用户是否有 pod 的 Fuse Console viewer 角色,请运行以下命令来查看用户是否可以在 OpenShift 上获取 pod:
oc auth can-i get pods/<pod> --as <user>
如果响应是
yes
,用户具有 Pod 的 Fuse Console viewer 角色。用户可以在 Fuse 控制台中为 pod 执行 只读 MBean 操作。根据上下文,Fuse 控制台可防止具有 viewer 角色的用户 执行写入 MBean 操作,方法是禁用一个选项,或者在用户尝试写 MBean 操作时显示 "operation not allowed for this user" 消息。如果响应不是,则用户没有绑定到任何 Fuse 控制台角色,用户无法在 Fuse 控制台中查看 pod。
1.2.3.2. 在 OpenShift 4.x 上自定义对 Fuse 控制台进行基于角色的访问
如果您使用 OperatorHub 安装 Fuse 控制台,并且启用了 基于角色的访问控制(RBAC),Fuse Console Operator 会提供默认的 RBAC 行为,如 OpenShift 4.x 上 Fuse Console 的基于角色的访问控制 中所述。如果要自定义 Fuse 控制台 RBAC 行为,在部署 Fuse 控制台前,您必须提供一个 ConfigMap 文件(定义自定义 RBAC 行为)。您必须将自定义 ConfigMap 文件放在安装 Fuse Console Operator 的同一命名空间中。
如果使用命令行模板安装 Fuse 控制台,则 deployment-cluster-rbac.yml
和 deployment-namespace-rbac.yml
模板会创建一个包含配置文件(ACL.yml
)的 ConfigMap。配置文件定义 MBean 操作允许的角色。
前提条件
-
您使用 OperatorHub 或使用其中一个 Fuse 控制台 RBAC 模板(
deployment-cluster-rbac.yml
或deployment-namespace-rbac.yml
)安装 Fuse 控制台。
流程
自定义 Fuse 控制台 RBAC 角色:
如果使用命令行安装 Fuse 控制台,则安装模板包含一个默认的 ConfigMap 文件,以便您可以跳至下一步。
如果使用 OperatorHub 安装 Fuse 控制台,在部署 Fuse 控制台前,要创建一个 RBAC ConfigMap:
确保当前的 OpenShift 项目是您要安装 Fuse 控制台的项目。例如,如果要在 fusetest 项目中安装 Fuse 控制台,请运行以下命令:
oc project fusetest
要从模板创建 Fuse Console RBAC ConfigMap 文件,请运行以下命令:
oc process -f https://raw.githubusercontent.com/jboss-fuse/application-templates/2.1.x.sb2.redhat-7-8-x/fuse-console-operator-rbac.yml -p APP_NAME=fuse-console | oc create -f -
运行以下命令,在编辑器中打开 ConfigMap:
oc edit cm $APP_NAME-rbac
例如:
oc edit cm fuse-console-rbac
- 编辑该文件。
- 保存文件以使改变生效。OpenShift 会自动重启 Fuse Console pod。
1.2.3.3. 在 OpenShift 4.x 上为 Fuse 控制台禁用基于角色的访问控制
Fuse Console 的 HAWTIO_ONLINE_RBAC_ACL
环境变量传递基于角色的访问控制(RBAC) ConfigMap 配置文件路径到 OpenShift 服务器。如果没有指定 HAWTIO_ONLINE_RBAC_ACL
环境变量,则只有为 pod 资源(OpenShift)授予 update 动词的用户才会被授权在 Fuse 控制台中对 pod 调用 MBeans 操作。
请注意,当使用 Operator 在 OpenShift 上安装 Fuse 控制台时,默认禁用基于角色的访问。
前提条件
已安装 Fuse 控制台:
- 通过使用 OperatorHub,并在 Fuse 控制台配置中启用 RBAC
-
使用命令行,并且您指定了其中一个 Fuse 控制台 RBAC 模板(
deployment-cluster-rbac.yml
或deployment-namespace-rbac.yml
)。
流程
为 Fuse 控制台禁用基于角色的访问控制:
- 在 OpenShift 中 ,编辑 Fuse 控制台的部署配置资源。
删除整个
HAWTIO_ONLINE_RBAC_ACL
环境变量定义。(请注意,仅清除其值还不够)。
- 保存文件以使改变生效。OpenShift 会自动重启 Fuse Console pod。
1.2.4. 在 OpenShift 4.x 上升级 Fuse 控制台
Red Hat OpenShift 4.x 处理 operator 的更新,包括 Red Hat Fuse operator。如需更多信息,请参阅 Operators OpenShift 文档。
然后,Operator 更新可以根据应用程序的配置方式触发应用程序升级。
对于 Fuse 控制台应用程序,您还可以通过编辑应用程序自定义资源定义的 .spec.version
字段来触发到应用程序的升级。
前提条件
- 有 OpenShift 集群 admin 权限。
流程
升级 Fuse 控制台应用程序:
在终端窗口中,使用以下命令更改应用程序自定义资源定义的
.spec.version
字段:oc patch <project-name> <custom-resource-name> --type='merge' -p '{"spec":{"version":"1.7.1"}}'
例如:
oc patch myproject example-fuseconsole --type='merge' -p '{"spec":{"version":"1.7.1"}}'
检查应用程序的状态是否已更新:
oc get myproject
响应显示有关应用程序的信息,包括版本号:
NAME AGE URL IMAGE example-fuseconsole 1m https://fuseconsole.192.168.64.38.nip.io docker.io/fuseconsole/online:1.7.1
当您更改
.spec.version
字段的值时,OpenShift 会自动重新部署应用。检查版本更改触发的重新部署状态:
oc rollout status deployment.v1.apps/example-fuseconsole
成功部署显示这个响应:
deployment "example-fuseconsole" successfully rolled out