第 2 章 为 Kafka Bridge 部署 3scale
要将 3scale 与 Kafka Bridge 搭配使用,您首先部署它,然后将其配置为发现 Kafka Bridge API。
在这种情况下,Apache Kafka、Kafka、Kafka Bridge 和 3scale API 管理组件的 Streams 在相同的 OpenShift 集群中运行。
以下 3scale 组件可帮助发现 Kafka Bridge:
- 3scale APIcast 为 HTTP 客户端提供基于 NGINX 的 API 网关,以连接到 Kafka Bridge API 服务。
- 3scale toolbox 用于将 Kafka Bridge 服务的 OpenAPI 规格导入到 3scale。
如果 3scale 已部署到与 Kafka Bridge 相同的集群中,您可以跳过部署步骤并使用您的当前部署。
先决条件
- 部署需要了解 3scale 组件。
- Apache Kafka 和 Kafka 的流正在运行。
- Kafka Bridge 已部署。
对于 3scale 部署:
- 检查 Red Hat 3scale API Management 支持的配置。
-
安装需要具有
cluster-admin
角色的用户,如system:admin
。 您需要访问描述以下内容的 JSON 文件:
-
Kafka Bridge OpenAPI specification (
openapiv2.json
) Kafka Bridge 的标头修改和路由策略(
policies_config.json
)在 GitHub 上查找 JSON 文件。
-
Kafka Bridge OpenAPI specification (
流程
设置 3scale API 管理,如 Red Hat 3scale 文档 中所述。
使用 3scale API 管理操作器安装 3scale API Manager 和 APIcast。
在部署 API Manager 前,将
API Manager
自定义资源的wildcardDomain
属性更新为托管 OpenShift 集群的域。域在 URL 中使用用于访问 3scale 管理门户(
http[s]://<authentication_token>@3scale-admin.<cluster_domain&
gt;)。-
通过检查
API Manager
自定义资源的状态,验证 3scale 是否已成功部署。
为 3scale API Manager 授予 3scale API Manager 授权来发现 Kafka Bridge 服务:
oc adm policy add-cluster-role-to-user view system:serviceaccount:<my_bridge_namespace>:amp
该命令向指定命名空间中的 Kafka Bridge 资源(<
my_bridge_namespace
>)授予 API Manager (amp
)读取访问权限(查看
)。设置 3scale API 管理 toolbox。
- 按照 Red Hat 3scale 文档所述安装 3scale toolbox。
设置环境变量以便与 3scale 交互:
Kafka Bridge 配置示例
export REMOTE_NAME=strimzi-kafka-bridge 1 export SYSTEM_NAME=strimzi_http_bridge_for_apache_kafka 2 export TENANT=strimzi-kafka-bridge-admin 3 export PORTAL_ENDPOINT=$TENANT.3scale.net 4 export TOKEN=<3scale_authentication_token> 5
配置 3scale toolbox 的远程 web 地址:
podman run -v /path/to/openapiv2.json:/tmp/oas/openapiv2.json registry.redhat.io/3scale-amp2/toolbox-rhel8:3scale2.14 3scale import openapi -d <admin_portal_url> /tmp/oas/openapiv2.json
为 3scale toolbox 指定容器镜像。3scale 的容器镜像在 红帽生态系统目录 中提供。
将
<admin_portal_url
> 替换为 3scale 管理门户端点的路径(https://$TOKEN@$PORTAL_ENDPOINT/
)。现在,每次运行 toolbox 时不需要指定 3scale 管理门户的端点地址。
检查您的 Cluster Operator 部署是否有 3scale 发现 Kafka Bridge 服务所需的标签和注解属性。
#... 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 #...
如果没有,请通过 OpenShift 控制台添加属性,或尝试重新部署 Cluster Operator 和 Kafka Bridge。
- 在 3scale 管理门户中,从 OpenShift 导入 Kafka Bridge API 服务,如 Red Hat 3scale 文档所述。
编辑 OpenAPI 规格(JSON 文件)中的 Host 字段,以使用 Kafka Bridge 服务的基本 URL:
例如:
"host": "my-bridge-bridge-service.my-project.svc.cluster.local:8080"
检查主机
URL 包括以下内容:-
Kafka Bridge name (
my-bridge
) -
项目名称(
my-project
) -
Kafka Bridge 的端口(
8080
)
-
Kafka Bridge name (
从本地文件将更新的 OpenAPI 规格导入到 3scale toolbox:
podman run -v /path/to/openapiv2.json:/tmp/oas/openapiv2.json registry.redhat.io/3scale-amp2/toolbox-rhel8:3scale2.14 3scale import openapi [opts] -d=<admin_portal_url> -t 3scale-kafka-bridge /tmp/oas/openapiv2.json
在这里,我们将系统名称指定为
3scale-kafka-bridge
,而不是从 OpenAPI 规格生成名称。将/path/to/openapiv2.json
替换为 OpenAPI 规格文件的路径,将<admin_portal_url
> 替换为 3scale 管理门户的端点的路径。为服务导入标头修改和路由策略 (JSON 文件)。
找到您在 3scale 中创建的服务的 ID,这是导入策略时所需的:
export SERVICE_ID=$(curl -k -s -X GET "https://$PORTAL_ENDPOINT/admin/api/services.json?access_token=$TOKEN" | jq ".services[] | select(.service.system_name | contains(\"$SYSTEM_NAME\")) | .service.id")
在这里,我们在请求中使用
jq
命令行 JSON 解析器工具。导入策略:
3scale policies import -f /path/to/policies_config.json -d=<admin_portal_url> 3scale-kafka-bridge
将
/path/to/policies_config.json
替换为策略配置文件的路径,将 <admin_portal_url
> 替换为 3scale 管理门户的端点的路径。
- 在 3scale 管理门户中,检查 Kafka Bridge 服务的端点和策略是否已加载。
在 3scale Toolbox 中创建应用程序计划和应用程序。
需要应用程序才能获取用于身份验证的用户密钥。
(生产环境步骤)要在生产环境的网关中使用 API,请提升配置:
3scale proxy-config promote $REMOTE_NAME $SERVICE_ID
使用 API 测试工具来验证您可以通过 APIcast 网关访问 Kafka 网桥,方法是使用调用来创建消费者,以及为应用程序创建的用户密钥。
例如:
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 是客户端在后续请求中使用的地址。