第 2 章 为 Kafka Bridge 部署 3scale
要将 3scale 与 Kafka Bridge 集成,您需要配置部署来发现 Kafka Bridge API。
在这种情况下,Apache Kafka、Kafka、Kafka Bridge 和 3scale API Management 的流在同一 OpenShift 集群中运行。3scale APIcast 充当基于 NGINX 的 API 网关,允许 HTTP 客户端连接到 Kafka Bridge API 服务。
此流程使用以下 3scale 自定义资源,通过 3scale Operator 管理:
-
OpenAPI自定义资源来导入 Kafka Bridge OpenAPI 规格 -
用于导入 Kafka Bridge 路由策略并设置应用程序计划和应用程序的
产品自定义资源。 -
ProxyConfigPromote自定义资源,以提升产品的 APIcast 配置。
有关创建和管理这些资源的详情,请参阅 Red Hat 3scale 文档中的 operator 说明。
如果 3scale 已部署到与 Kafka Bridge 相同的集群中,请跳过部署步骤并使用现有部署。
对于 3scale 部署:
- 检查 Red Hat 3scale API Management 支持的配置。
-
安装需要
cluster-admin访问权限,如system:admin。 访问以下 JSON 文件:
-
Kafka Bridge OpenAPI specification (
openapi.jsonv3)。 -
Kafka Bridge 的标头修改和路由策略(
policies_config.json)。
JSON 文件在 GitHub 上提供。
-
Kafka Bridge OpenAPI specification (
流程
按照 Red Hat 3scale 文档中所述设置 3scale API 管理。
使用 3scale 操作器安装 3scale API Manager 和 APIcast。
在部署 API Manager 前,更新
APIManager自定义资源的wildcardDomain属性,以匹配您的 OpenShift 集群域。域在 URL 中使用用于访问 3scale 管理门户(
http[s]://<authentication_token>@3scale-admin.<cluster_domain>)。-
通过检查
APIManager自定义资源的状态来验证 3scale 部署。
授权 3scale API Manager 来发现 Kafka Bridge:
oc adm policy add-cluster-role-to-user view system:serviceaccount:<my_bridge_namespace>:amp此命令向指定命名空间中的 Kafka Bridge 资源授予 API Manager (
amp)读取访问权限(view)。确保 Cluster Operator 部署具有 3scale 发现所需的标签和注解:
#... env: - name: STRIMZI_CUSTOM_KAFKA_BRIDGE_SERVICE_LABELS value: | discovery.3scale.net=true - name: STRIMZI_CUSTOM_KAFKA_BRIDGE_SERVICE_ANNOTATIONS value: | discovery.3scale.net/scheme=http discovery.3scale.net/port=8080 discovery.3scale.net/path=/ discovery.3scale.net/description-path=/openapi/v3 #...当 Kafka Bridge 中已弃用对 OpenAPI v2 的支持后,
/openapi端点将代表 OpenAPI v3。此时,/openapi/v3端点将被删除。如有必要,通过 OpenShift 控制台更新这些属性,或重新部署 Cluster Operator 和 Kafka Bridge。
- 在 3scale 管理门户中,按照 Red Hat 3scale 文档所述,从 OpenShift 导入 Kafka Bridge API 服务。
将
servers属性添加到 OpenAPI 规格(JSON 文件),以引用基本 Kafka Bridge 服务 URL:对 Kafka Bridge 服务 URL 的引用示例
{ "openapi": "3.0.0", "info": { "title": "Kafka Bridge API Reference", "description": "The Kafka Bridge provides a REST API for integrating HTTP based client applications with a Kafka cluster. You can use the API to create and manage consumers and send and receive records over HTTP rather than the native Kafka protocol. ", "version": "0.1.0" }, "servers": [ { "url": "https://my-bridge-bridge-service.my-project.svc.cluster.local:8080" } ], "paths": {确保
服务器URL 包含以下内容:-
Kafka Bridge name (
my-bridge) -
项目名称(
my-project) -
Kafka Bridge 的端口(
8080)
-
Kafka Bridge name (
通过创建 OpenAPI 自定义资源来导入 Kafka Bridge
OpenAPI规格。在创建
OpenAPI自定义资源时,3scale Operator 会自动创建一个 3scale 产品自定义资源,其中包含服务 ID。-
通过导入 Kafka Bridge 路由策略(
policies_config.json)来更新Product自定义资源。 - 在 3scale 管理门户中,检查 Kafka Bridge 服务的端点和策略是否已加载。
更新
Product自定义资源以设置应用程序计划和应用程序。应用程序是获取用于身份验证的用户密钥所必需的。
-
(用于生产环境)通过创建一个
ProxyConfigPromote自定义资源来提升产品的 APIcast 配置。 使用使用者创建调用和为应用程序生成的用户密钥,验证通过 APIcast 网关对 Kafka Bridge 的 API 访问。
例如:
https//my-project-my-bridge-bridge-service-3scale-apicast-staging.example.com:443/consumers/my-group?user_key=3dfc188650101010ecd7fdc56098ce95如果从 Kafka Bridge 返回响应有效负载,则已成功创建使用者。
{ "instance_id": "consumer1", "base uri": "https//my-project-my-bridge-bridge-service-3scale-apicast-staging.example.com:443/consumers/my-group/instances/consumer1" }Base URI 是客户端用于后续请求的地址。