1.2. 在 OpenShift 4.x 中设置 Fuse 控制台
在 OpenShift 4.x 上,设置 Fuse 控制台涉及保护、安装和部署它。
首先,您必须生成客户端证书,以便可以保护 Fuse 控制台,如 第 1.2.1 节 “生成证书来保护 OpenShift 4.x 上的 Fuse 控制台” 所述。
生成客户端证书后,您可以使用命令行和其中一个 Fuse 控制台来安装和部署 Fuse 控制台,以便它在 OpenShift 集群或特定命名空间中的多个命名空间中访问 Fuse 应用程序。
- Fuse 控制台的用户管理由 OpenShift 处理。
- 基于角色的访问控制(在部署后访问 Fuse 控制台的用户)还不适用于 OpenShift 上的 Fuse。
1.2.1. 生成证书来保护 OpenShift 4.x 上的 Fuse 控制台
在 OpenShift 4.x 上,若要在 Fuse 控制台代理和 Jolokia 代理之间保持连接,您必须在部署 Fuse 控制台前生成客户端证书。您必须使用服务签名证书颁发机构私钥来为客户端证书签名。
您必须为每个 OpenShift 集群生成并签署单独的客户端证书。对于多个集群,不要使用相同的证书。
先决条件
-
有
集群管理员
对 OpenShift 集群的访问权限。 如果您要为多个 OpenShift 集群生成证书,并且之前在当前目录中为不同的集群生成证书,请执行以下操作之一以确保为当前集群生成不同的证书:
-
从当前目录中删除现有证书文件(如
ca.crt
、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
生成客户端证书,如 Kubernetes 证书管理 中所述,使用
easyrsa
、openssl
或cfssl
。以下是使用 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
生成 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.2. 使用命令行在 OpenShift 4.x 上安装和部署 Fuse 控制台
在 OpenShift 4.x 中,您可以选择其中一个部署选项来从命令行安装和部署 Fuse 控制台:
- 集群 - Fuse 控制台可以发现并连接到在 OpenShift 集群上的多个命名空间(项目)间部署的 Fuse 应用程序。要部署此模板,您必须具有 OpenShift 集群的管理员角色。
- 命名空间 - Fuse 控制台可以访问特定的 OpenShift 项目(命名空间)。要部署此模板,您必须具有 OpenShift 项目的管理员角色。
要查看 Fuse 控制台模板的参数列表,请运行以下命令:
oc process --parameters -f https://raw.githubusercontent.com/jboss-fuse/application-templates/application-templates-2.1.fuse-750056-redhat-00006/fuse-console-namespace-os4.json
先决条件
- 在安装和部署 Fuse 控制台前,您必须生成一个使用服务签名证书颁发机构签名的客户端证书,如生成证书以保护 OpenShift 4.x 上的 Fuse 控制台安全 中所述。
-
有 OpenShift
集群的集群管理员角色
。 - 已安装 Fuse Console 镜像流(以及其他 Fuse 镜像流),如 在 OpenShift 4.x 服务器上安装 Fuse 镜像流和模板 中所述。
流程
使用以下命令验证是否安装了 Fuse Console 镜像流,以检索所有模板的列表:
oc get template -n openshift
另外,如果要使用新发行标签更新已安装的镜像流,请使用以下命令将 Fuse Console 镜像导入到 openshift 命名空间:
oc import-image fuse7/fuse7-console:1.5 --from=registry.redhat.io/fuse7/fuse-console:1.5 --confirm -n openshift
将以下 Fuse 控制台模板从原始格式
https://raw.githubusercontent.com/jboss-fuse/application-templates/application-templates-2.1.fuse-750056-redhat-00006
下载到您选择的本地目录(例如,mytemp)。-
集群模板:
fuse-console-cluster-os4.json
-
命名空间模板:
fuse-console-namespace-os4.json
-
集群模板:
对于命名空间模板,请跳至下一步。
对于集群模板,在您选择的编辑器中编辑
fuse-console-cluster-os4.json
文件的本地副本,将"grantMethod": "auto"
属性添加到OAuthClient
部分:{ "kind": "OAuthClient", "apiVersion": "v1", "metadata": { "name": "${APP_NAME}-oauth-client" }, "grantMethod": "auto", "redirectURIs": [ "https://${ROUTE_HOSTNAME}" ] }
运行以下命令来获取 Fuse Console APP_NAME 值(其中 mytemp 是包含 Fuse Console 模板的本地目录的路径):
对于集群模板:
oc process --parameters -f mytemp/fuse-console-cluster-os4.json
对于命名空间模板:
oc process --parameters -f mytemp/fuse-console-namespace-os4.json
从您在 OpenShift 4.x 上保护 Fuse 控制台 生成的证书,使用以下命令创建 secret 并将其挂载到 Fuse 控制台中(其中 APP_NAME 是 Fuse Console 应用程序的名称。
oc create secret tls APP_NAME-tls-proxying --cert server.crt --key server.key
运行以下命令,基于 Fuse Console 模板的本地副本创建新应用程序(其中 myproject 是 OpenShift 项目的名称,mytemp 是包含 Fuse Console 模板的本地目录的路径,myhost 是用于访问 Fuse 控制台的主机名:
对于集群模板:
oc new-app -n myproject -f mytemp/fuse-console-cluster-os4.json -p ROUTE_HOSTNAME=myhost
对于命名空间模板:
oc new-app -n myproject -f mytemp/fuse-console-namespace-os4.json
运行以下命令,获取 Fuse 控制台部署的状态和 URL:
oc status
- 要从浏览器访问 Fuse 控制台,请使用在第 6 步中返回的 URL (例如 https://fuse-console.192.168.64.12.nip.io)。
1.2.3. 在 OpenShift 4.x 上升级 Fuse 控制台
Red Hat OpenShift 4.x 处理对 Operator 的更新,包括 Red Hat Fuse operator。如需更多信息,请参阅 Operator OpenShift 文档。
反过来,Operator 更新可触发应用程序升级。应用程序升级如何根据应用程序的配置方式的不同而有所不同。
对于 Fuse 控制台应用程序,您可以通过编辑应用程序自定义资源定义的 .spec.version
字段来指定何时触发对这些应用程序的升级。
前提条件
- 有 OpenShift 集群管理员权限。
流程
升级 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