2.2. 在 OpenShift 4.x 服务器上安装 Fuse 镜像流和模板
OpenShift Container Platform 4.1 使用 Samples Operator,它在 OpenShift 命名空间中运行,安装和更新基于 Red Hat Enterprise Linux (RHEL)的 OpenShift Container Platform 镜像流和模板。在 OpenShift 镜像流和模板上安装 Fuse:
- 重新配置 Samples Operator
将 Fuse 镜像流和模板添加到
Skipped Imagestreams 和 Skipped Templates
字段中。- 跳过的 Imagestreams:位于 Samples Operator 清单中的 Imagestreams,但集群管理员希望 Operator 忽略或不管理。
- 跳过的模板:位于 Samples Operator 清单中的模板,但集群管理员希望 Operator 忽略或不予管理。
先决条件
- 您可以访问 OpenShift 服务器。
- 您已为 Red Hat Container Registry 配置了身份验证。
- 另外,如果您要在安装 OpenShift 仪表板后在 OpenShift 仪表板中看到 Fuse 模板,您必须首先安装服务目录和模板服务代理,如 OpenShift 文档https://docs.openshift.com/container-platform/4.1/applications/service_brokers/installing-service-catalog.html所述。
流程
- 启动 OpenShift 4 服务器。
以管理员身份登录 OpenShift 服务器。
oc login -u system:admin
验证您是否使用您为其创建 docker-registry secret 的项目。
oc project openshift
查看 Samples operator 的当前配置。
oc get configs.samples.operator.openshift.io -n openshift-cluster-samples-operator -o yaml
配置 Samples operator 以忽略添加的 fuse 模板和镜像流。
oc edit configs.samples.operator.openshift.io -n openshift-cluster-samples-operator
添加 Fuse imagestreams Skipped Imagestreams 部分,并将 Fuse 和 Spring Boot 2 模板添加到 Skipped Templates 部分。
[...] spec: architectures: - x86_64 managementState: Managed skippedImagestreams: - fis-java-openshift - fis-karaf-openshift - fuse7-console - fuse7-eap-openshift - fuse7-java-openshift - fuse7-karaf-openshift - jboss-fuse70-console - jboss-fuse70-eap-openshift - jboss-fuse70-java-openshift - jboss-fuse70-karaf-openshift - fuse-apicurito-generator - apicurito-ui skippedTemplates: - s2i-fuse75-eap-camel-amq - s2i-fuse75-eap-camel-cdi - s2i-fuse75-eap-camel-cxf-jaxrs - s2i-fuse75-eap-camel-cxf-jaxws - s2i-fuse75-eap-camel-jpa - s2i-fuse75-karaf-camel-amq - s2i-fuse75-karaf-camel-log - s2i-fuse75-karaf-camel-rest-sql - s2i-fuse75-karaf-cxf-rest - s2i-fuse75-spring-boot-camel - s2i-fuse75-spring-boot-camel-amq - s2i-fuse75-spring-boot-camel-config - s2i-fuse75-spring-boot-camel-drools - s2i-fuse75-spring-boot-camel-infinispan - s2i-fuse75-spring-boot-camel-rest-sql - s2i-fuse75-spring-boot-camel-rest-3scale - s2i-fuse75-spring-boot-camel-xa - s2i-fuse75-spring-boot-camel-xml - s2i-fuse75-spring-boot-cxf-jaxrs - s2i-fuse75-spring-boot-2-camel-amq - s2i-fuse75-spring-boot-2-camel-drools - s2i-fuse75-spring-boot-2-camel-infinispan - s2i-fuse75-spring-boot-2-camel-rest-3scale - s2i-fuse75-spring-boot-2-camel-rest-sql - s2i-fuse75-spring-boot-2-camel-teiid - s2i-fuse75-spring-boot-2-camel - s2i-fuse75-spring-boot-2-camel-xa - s2i-fuse75-spring-boot-2-camel-xml - s2i-fuse75-spring-boot-2-cxf-jaxrs - s2i-fuse75-spring-boot-2-cxf-jaxws
在 OpenShift 镜像流上安装 Fuse。
BASEURL=https://raw.githubusercontent.com/jboss-fuse/application-templates/application-templates-2.1.fuse-750056-redhat-00006 oc create -n openshift -f ${BASEURL}/fis-image-streams.json
注意如果显示错误,并显示消息 "Error from server (AlreadyExists): imagestreams.image.openshift.io <imagestreamname> already exists",请使用以下命令将现有镜像流替换为最新的镜像流。
oc replace --force -n openshift -f ${BASEURL}/fis-image-streams.json
在 OpenShift 快速启动模板上安装 Fuse:
for template in eap-camel-amq-template.json \ eap-camel-cdi-template.json \ eap-camel-cxf-jaxrs-template.json \ eap-camel-cxf-jaxws-template.json \ eap-camel-jpa-template.json \ karaf-camel-amq-template.json \ karaf-camel-log-template.json \ karaf-camel-rest-sql-template.json \ karaf-cxf-rest-template.json \ spring-boot-camel-amq-template.json \ spring-boot-camel-config-template.json \ spring-boot-camel-drools-template.json \ spring-boot-camel-infinispan-template.json \ spring-boot-camel-rest-sql-template.json \ spring-boot-camel-rest-3scale-template.json \ spring-boot-camel-template.json \ spring-boot-camel-xa-template.json \ spring-boot-camel-xml-template.json \ spring-boot-cxf-jaxrs-template.json \ spring-boot-cxf-jaxws-template.json ; do oc create -n openshift -f \ https://raw.githubusercontent.com/jboss-fuse/application-templates/application-templates-2.1.fuse-750056-redhat-00006/quickstarts/${template} done
安装 Spring Boot 2 Quickstart 模板:
for template in spring-boot-2-camel-amq-template.json \ spring-boot-2-camel-drools-template.json \ spring-boot-2-camel-infinispan-template.json \ spring-boot-2-camel-rest-3scale-template.json \ spring-boot-2-camel-rest-sql-template.json \ spring-boot-2-camel-teiid-template.json \ spring-boot-2-camel-template.json \ spring-boot-2-camel-xa-template.json \ spring-boot-2-camel-xml-template.json \ spring-boot-2-cxf-jaxrs-template.json \ spring-boot-2-cxf-jaxws-template.json ; do oc create -n openshift -f \ https://raw.githubusercontent.com/jboss-fuse/application-templates/application-templates-2.1.fuse-sb2-750016-redhat-00005/quickstarts/${template} done
(可选) 查看 OpenShift 模板上安装的 Fuse:
oc get template -n openshift
2.2.1. 在 OpenShift 4.x 中设置 Fuse 控制台
在 OpenShift 4.x 上,设置 Fuse 控制台涉及保护、安装和部署它。
首先,您必须生成客户端证书,以便可以保护 Fuse 控制台,如 第 2.2.1.1 节 “生成证书来保护 OpenShift 4.x 上的 Fuse 控制台” 所述。
生成客户端证书后,您可以使用命令行和其中一个 Fuse 控制台来安装和部署 Fuse 控制台,以便它在 OpenShift 集群或特定命名空间中的多个命名空间中访问 Fuse 应用程序。
- Fuse 控制台的用户管理由 OpenShift 处理。
- 基于角色的访问控制(在部署后访问 Fuse 控制台的用户)还不适用于 OpenShift 上的 Fuse。
2.2.1.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 控制台 中所述。
2.2.1.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)。
2.2.1.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
2.2.2. 在 OpenShift 4.x 上安装 API Designer
Red Hat Fuse on OpenShift 提供了 API Designer,它是一个基于 Web 的 API 设计工具,可用于设计 REST API。API Designer Operator 简化了 OpenShift Container Platform 4.x 上的 API Designer 的安装和升级。
作为 OpenShift 管理员,您要将 API Designer 操作器安装到 OpenShift 项目(命名空间)。安装 Operator 后,Operator 会在所选命名空间中运行。但是,要使 API Designer 作为服务(可以是 OpenShift 管理员)提供,或者开发人员必须创建一个 API Designer 实例。API Designer 服务提供用于访问 API Designer Web 控制台的 URL。
先决条件
- 具有 OpenShift 集群的管理员访问权限。
- 您已为 Red Hat Container Registry 配置了身份验证。
流程
- 启动 OpenShift 4.x 服务器。
- 在 Web 浏览器中,导航到浏览器中的 OpenShift 控制台。使用您的凭证登录到控制台。
- 点 Catalog,然后点 OperatorHub。
在搜索字段中,键入 API Designer。
您可以在右侧面板中看到 API Designer 卡。
- 点 API Designer。此时会出现 API Designer operator 安装窗口。
点 Install。Create Operator Subscription 表单将打开。
- 对于 Installation 模式,请从集群中的命名空间列表中选择命名空间(项目),
对于 Approval Strategy,选择 Automatic 或 Manual 来配置 OpenShift 如何处理 API Designer Operator 的更新。
- 如果选择 Automatic 更新,当 API Designer 操作器有新版本可用时,OpenShift Operator Lifecycle Manager (OLM)会自动升级 API Designer 的运行实例,而无需人为干预。
- 如果选择手动 更新,则当有新版 Operator 可用时,OLM 会创建更新请求。作为集群管理员,您必须手动批准该更新请求,才能将 API Designer Operator 更新至新版本。
- 点 Subscribe 使 API Designer Operator 可供指定命名空间(项目)使用。
- 要验证 API Designer 是否已安装到项目中,点 Operators,然后点 Installed Operators 以查看列表中的 API Designer。
后续步骤
安装 API Designer 操作器后,API Designer 必须通过创建 API Designer 的实例将 API Designer 添加为 OpenShift 项目。此任务可以通过两种方式完成:
- OpenShift 管理员可以按照 第 2.2.2.1 节 “将 API Designer 作为一个服务添加到 OpenShift 4.x 项目中” 中的步骤操作。
OpenShift 开发人员可按照设计 API 中所述的步骤操作。
API Designer 服务提供用于访问 API Designer Web 控制台的 URL。
2.2.2.1. 将 API Designer 作为一个服务添加到 OpenShift 4.x 项目中
在 OpenShift 4.x 项目中安装了 API Designer 操作器后,您可以(或一个 OpenShift 开发人员)将它添加为 OpenShift 项目的服务。API Designer 服务提供开发人员用来访问 API Designer Web 控制台的 URL。
如需了解 OpenShift 开发人员要作为服务添加到 OpenShift 4.x 项目的步骤,请参阅 设计 API。
先决条件
- 具有 OpenShift 集群的管理员访问权限。
- API Designer 操作器安装到当前的 OpenShift 项目中。
流程
- 在 OpenShift Web 控制台中,点 Operators,然后点 Installed Operators。
- 在 Name 列中,单击 API Designer。
在 Provided APIs 下,点 Create Instance。
此时会打开 API Designer 实例的最小起始模板的默认表单。
接受默认值或选择性地编辑以下值:
大小 : API Designer 实例的 pod 数量。
默认为三个用于新资源类型的 pod,其中包含特定于管理 API Designer 的逻辑。
- 镜像 :API 设计器镜像。如果您更改了此镜像,API Designer Operator 会自动在集群中升级。
- 单击 Create 以创建一个新的 apicurito-service。OpenShift 启动用于新 API Designer 服务的 pod、服务和其他组件。
验证 API Designer 服务是否可用:
- 点 Operators,然后点 Installed Operators。
在 Provided APIs 列中,点 Apicurito CRD。
在 Operator Details 页面中,会列出 apicurito-service。
获取 API Designer 的 URL:
- 点 Networking > Routes。
- 确保选择了正确的项目。
- 在 apicurito-service 行中,在 Location 列中找到 API Designer Web 控制台的 URL。
2.2.2.2. 在 OpenShift 4.x 上升级 API Designer
Red Hat OpenShift 4.x 处理对 Operator 的更新,包括 Red Hat Fuse operator。如需更多信息,请参阅 Operator OpenShift 文档。
反过来,Operator 更新可触发应用程序升级。应用程序升级如何根据应用程序的配置方式的不同而有所不同。
对于 API Designer 应用程序,升级 API Designer 操作器时,OpenShift 会自动升级集群上的任何 API 设计程序应用程序。