第 7 章 使用带有 3scale 的 Kafka 网桥

您可以将 Red Hat 3scale API 管理与 AMQ Streams Kafka Bridge 部署和集成。

7.1. 使用带有 3scale 的 Kafka 网桥

使用 Kafka 网桥的纯部署,不会置备身份验证或授权,不支持与外部客户端的 TLS 加密连接。

3scale 可以通过 TLS 保护 Kafka 网桥,并提供身份验证和授权。与 3scale 集成还意味着还提供其他功能,如指标、速率限制和计费。

通过 3scale,您可以将不同类型的身份验证用于希望访问 AMQ Streams 的外部客户端的请求。3scale 支持以下类型的身份验证:

标准 API 密钥
单一随机字符串或哈希充当标识符和机密令牌。
应用程序标识符和密钥对
不可变标识符和可变 secret key 字符串。
OpenID Connect
用于委派的身份验证的协议.

使用现有的 3scale 部署?

如果您已将 3scale 部署到 OpenShift,并且希望将它与 Kafka 网桥搭配使用,请确保您有正确的设置。

设置在 第 7.2 节 “为 Kafka 网桥部署 3scale” 中描述。

7.1.1. Kafka Bridge 服务发现

3scale 是使用服务发现功能集成的,这需要 3scale 与 AMQ Streams 和 Kafka Bridge 部署到同一个 OpenShift 集群。

您的 AMQ Streams Cluster Operator 部署必须设置以下环境变量:

  • STRIMZI_CUSTOM_KAFKA_BRIDGE_SERVICE_LABELS
  • STRIMZI_CUSTOM_KAFKA_BRIDGE_SERVICE_ANNOTATIONS

部署 Kafka Bridge 时,公开 Kafka Bridge REST 接口的服务使用注解和标签来发现 3scale。

  • 3 scale 使用 discovery.3scale.net=true 标签来查找服务。
  • 注解提供有关服务的信息。

您可以通过导航到 Kafka Bridge 实例的 Services 来检查 OpenShift 控制台中的配置。 会看到 Kafka 网桥的 OpenAPI 规格的端点。

7.1.2. 3scale APIcast 网关策略

3scale 与 3scale APIcast 一起使用,后者是部署有 3scale 的 API 网关,为 Kafka 网桥提供单一入口点。

APIcast 策略提供了一种自定义网关运行方式的机制。3scale 为网关配置提供一组标准策略。您还可以创建自己的策略。

如需有关 APIcast 策略的更多信息,请参阅 3scale 文档中的 管理 API 网关

Kafka Bridge 的 APIcast 策略

policy _config.json 文件提供了 3scale 与 Kafka Bridge 集成的示例策略 配置,该文件定义了:

  • 匿名访问
  • 标头修改
  • 路由
  • URL 重写

通过此文件启用或禁用网关策略。

您可以使用此示例作为定义您自己的策略的起点。

匿名访问
匿名访问策略在没有身份验证的情况下公开服务,在 HTTP 客户端不提供它们时提供默认凭据(用于匿名访问)。策略不是强制的,如果始终需要身份验证,可以禁用或删除。
标头修改

标头修改策略允许修改现有的 HTTP 标头,或向通过网关的请求或响应添加新的标头。对于 3scale 集成,策略会为从 HTTP 客户端传递到 Kafka 网桥的每个请求添加标头。

当 Kafka Bridge 收到创建新消费者的请求时,它会返回包含 base_uri 字段的 JSON 有效负载,其中包含使用者必须用于所有后续请求的 URI。例如:

{
  "instance_id": "consumer-1",
  "base_uri":"http://my-bridge:8080/consumers/my-group/instances/consumer1"
}

使用 APIcast 时,客户端会将所有后续请求发送到网关,而不是直接发送到 Kafka 网桥。因此 URI 需要网关主机名,而不是网关后面的 Kafka 网桥地址。

使用标头修改策略,标头添加到来自 HTTP 客户端的请求中,以便 Kafka Bridge 使用网关主机名。

例如,通过应用 Forwarded: host=my-gateway:80;proto=http 标头,Kafka 网桥向使用者提供以下内容:

{
    "instance_id": "consumer-1",
    "base_uri":"http://my-gateway:80/consumers/my-group/instances/consumer1"
}

X-Forwarded-Path 标头承载从客户端到网关的请求中包含的原始路径。此标头与网关支持多个 Kafka Bridge 实例时应用的路由策略严格相关。

路由

当有多个 Kafka Bridge 实例时,会应用路由策略。请求必须发送到最初创建使用者的同一 Kafka Bridge 实例,因此请求必须指定网关将请求转发到适当的 Kafka Bridge 实例的路由。

每个网桥实例都有一个路由策略名称,路由则使用 名称来执行。部署 Kafka Bridge 时,您可以在 KafkaBridge 自定义资源中指定名称。

例如,从使用者到以下每个请求(使用 X-Forwarded-Path

http://my-gateway:80/my-bridge-1/consumers/my-group/instances/consumer1

转发到:

http://my-bridge-1-bridge-service:8080/consumers/my-group/instances/consumer1

URL 重写策略会删除网桥名称,因为它在将请求从网关转发到 Kafka Bridge 时不会用到。

URL 重写

URL 重新连接策略确保从客户端到特定 Kafka Bridge 实例的请求在将网关的请求转发到 Kafka Bridge 时不包含网桥名称。

网桥名称不用于网桥公开的端点。

7.1.3. TLS 验证

您可以为 TLS 验证设置 APIcast,这需要使用模板自助管理 APIcast 部署。apicast 服务作为路由公开。

您还可以将 TLS 策略应用到 Kafka Bridge API。

如需有关 TLS 配置的更多信息,请参阅 3scale 文档中的 管理 API 网关

7.1.4. 3scale 文档

部署 3scale 以用于 Kafka Bridge 的步骤假定对 3scale 有一定的了解。

如需更多信息,请参阅 3scale 产品文档: