第 5 章 为 3scale 发现准备 API 服务
红帽 3scale API 管理是一个红帽提供的产品,可让您规范访问公共互联网上的 API 服务。3scale 的功能包括强制执行服务级别协议(SLA)的功能,管理 API 版本,提供安全和身份验证服务等。Fuse 支持 3scale 的服务发现功能,这有助于从 3scale 管理门户 UI 发现 Fuse 服务。通过使用服务发现,您可以扫描在同一 OpenShift 集群中运行的 Fuse 应用程序,并将关联的 API 定义自动导入到 3scale。
先决条件
- 在 OpenShift 中部署和运行提供 API 服务的 Fuse 应用。
Fuse 应用程序使用 requisite 注释标注,使它可以被 3scale 发现。
注意由 API Designer 生成的 Fuse 项目预先配置为自动提供必要的注解。
对于不是由 API Designer 生成的 Fuse 项目,您必须配置项目,如 为不是由 API Designer 生成的 Fuse 项目添加注解 中所述。
- 3scale API 管理系统部署到与要发现的 API 服务 相同的 OpenShift 集群中。
有关在 3scale 中发现 API 服务的步骤的详情,请查看 Red Hat 3scale API 管理门户指南中的 服务发现部分。
5.1. 为不是由 API Designer 生成的 Fuse 项目添加注解
为了 3scale 发现 API 服务,提供 API 服务的 Fuse 应用程序必须包含可以发现的 Kubernetes Service Annotations。这些注释由 Fabric8 服务发现 Enricher 提供,该注释是 Fabric8 Maven 插件的一部分。
对于 Apache Camel Rest DSL 项目,Fabric8 Maven 插件默认运行 Fabric8 服务发现 Enricher。
由 API Designer 生成的 Fuse 项目预先配置为自动提供所需的注解。
流程
对于不是由 API Designer 生成的 Fuse Rest DSL 项目,请按如下所示配置项目:
编辑 Fuse 项目的
pom.xml
文件,使其包含fabric8-maven-plugin
依赖项,如下例所示:<plugin> <groupId>org.jboss.redhat-fuse</groupId> <artifactId>fabric8-maven-plugin</artifactId> <version>${fuse.version}</version> <executions> <execution> <goals> <goal>resource</goal> <goal>build</goal> </goals> </execution> </executions> </plugin>
如果满足某些项目级别条件(例如,项目必须是 Camel Rest DSL 项目),则 Fabric8 Maven 插件将运行 Fabric8 服务发现功能。您不需要将 Fabric8 服务发现 Enricher 指定为
pom.xml
文件中的依赖项,除非您想自定义增强的行为(如 自定义 API 服务注释值 中所述)在 Fuse Rest DSL 项目的
camel-context.xml
文件中,在restConfiguration
项中指定以下属性:-
方案
:托管该服务的 URL 的方案部分。您可以指定 "http" 或 "https"。 -
contextPath
:托管 API 服务的 URL 的路径部分。 apiContextPath
:托管 API 服务描述文档的位置的路径。如果文档是自托管,则可以指定相对路径,或者指定完整的 URL (如果文档外部托管)。以下示例
camel-context.xml
文件显示了restConfiguration
元素中的注解属性值:<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd"> <camelContext xmlns="http://camel.apache.org/schema/spring"> <restConfiguration component="servlet" scheme="https" contextPath="myapi" apiContextPath="myapi/openapi.json"/> ...
-
增强器使用这些 restConfiguration
元素属性值提供的信息,为 discovery.3scale.net/scheme
、
创建值,如 Red Hat 3scale API Management Portal 指南的 服务发现部分中所述。
discovery.3scale.net/path
增强器添加以下标签和注解,使服务可以被 3scale 发现:
-
discovery.3scale.net
标签:默认情况下,增强器将此值设置为 "true"。3scale 执行选择器定义以查找需要发现的所有服务时,它会使用此标签。 以下注解:
-
discovery.3scale.net/discovery-version
:(可选)3scale 发现过程的版本。增强器默认设置为 "v1"。 -
discovery.3scale.net/scheme
:托管该服务的 URL 的方案部分。增强器使用默认的 "http",除非您在restConfiguration
元素的scheme
属性中覆盖它。其他可能的值是 "https"。 -
discovery.3scale.net/path
:托管该服务的 URL 的路径部分。当路径位于 root, "/" 时,会忽略此注解。增强器从restConfiguration
元素的path
属性获取这个值。 -
discovery.3scale.net/port
:服务的端口。增强从 Kubernetes 服务定义中获取这个值,其中包含它所公开的服务的端口号。如果 Kubernetes 服务定义公开多个服务,增强器会使用列出的第一个端口。 -
discovery.3scale.net/description-path
: (可选) OpenAPI 服务描述文档的路径。增强器从restConfiguration
元素的contextPath
属性获取这个值。
-
您可以自定义 Fabric8 服务发现 Enricher 的行为,如 自定义 API 服务注释值 中所述。