Gateway Management
什么是 API 网关和网关管理?
一个 API Gateway 是 API 流量的中央管理点。它通过将客户端请求路由到适当的后端服务来处理客户端请求,在必要时转换请求和响应,执行安全策略,监控流量,并确保整体 API 的可靠性。
API 网关的关键功能
- Routing: 将客户端请求定向到适当的后端服务。
- Transformation: 根据需要转换请求或响应格式。
- Authentication & Authorization: 验证客户端凭据并授予访问权限。
- Traffic Control: 管理和限制 API 流量以防止后端过载。
- Logging & Monitoring: 记录 API 使用数据以便跟踪和分析。
- Security & Protection: 阻止恶意攻击并增强 API 安全性。
在 APIM 中,Kong API 网关被用作 Kubernetes (K8s) 部署。

网关管理菜单
APIM 中的 Gateway Management 菜单允许用户:
- 查看和管理网关列表。
- 监控各个网关的状态。
- 按项目查询、创建、更新和删除网关。
- 管理多个网关 URL。
- 配置节点亲和性、容忍度和拓扑设置。
- 为 HTTPS 安全设置 TLS 证书。
- 通过注释/标签添加元数据(K8s Ingress 注释/标签)。
每个 Gateway URL 代表用于 API 请求的端点。
例如,如果通过 https://api.company.com/path 访问 API,则网关 URL 为 api.company.com。
网关列表屏幕
Gateway List 屏幕提供了项目中所有网关的概述,使用户能够:
- 一目了然地查看所有网关。
- 检查 CPU、内存和副本配置。
- 监控每个网关的运行或待机状态。
- 搜索特定网关或创建新网关。

创建网关
要创建一个新的网关,请按照以下步骤操作:
导航到网关管理菜单。

点击“创建网关”
选择一个项目
选择一个将管理网关的项目。有关创建项目的说明,请参阅 Tenant Manager Console/Create a Project.

配置网关设置

Gateway Configuration 部分允许对网关进行详细定制。以下是关键字段:
Gateway Type- Purpose: 定义 API 网关类型。
- Mandatory: 是
- Input Instructions: 与项目的网关类型对齐。无法更改。
- Purpose: 网关的唯一标识符。
- Mandatory: 是
- Input Instructions: 只能使用英文字母、数字、spaces、连字符‘-’、下划线‘_’或双冒号‘:’。必须以英文字母开头。

- Purpose: 标识网关实例。
- Mandatory: 是
- Input Instructions: 根据网关名称自动填充。
- Purpose: 提供有关网关的额外详细信息。
- Mandatory: 否
- Input Instructions: 输入简短描述。
- Purpose: 有助于过滤和搜索网关。
- Mandatory: 否
- Input Instructions: 网关可以有多个标签。输入标签时按 Enter 键分隔.

- Purpose: 为网关分配资源。
- Mandatory: 是
- Input Instructions: 使用滑块进行调整。值范围从 500 到 16000 m/mi。

- Purpose: 为网关使用的内部数据库分配资源。
- Mandatory: 是
- Input Instructions: 使用滑块进行调整。值范围从 500 到 16000 m/mi。

- Purpose: 在部署后自动扩展网关资源分配
- Mandatory: 是
- Instructions: 切换以开启自动扩缩。开启后,配置最小副本、最大副本、CPU 使用率和内存使用率的自动扩缩值。

- Purpose: 确定网关在 Kubernetes 中运行的位置。
- Mandatory: 是
- Input Instructions: 从下拉列表中选择一个命名空间。
- Purpose: 定义网关的存储配置方式。
- Mandatory: 是
- Input Instructions: 从下拉列表中选择一个存储类。
- Purpose: 指定网关的存储分配。
- Mandatory: 是
- Input Instructions: 输入一个介于 5 和 500 (Gi) 之间的值。
- Purpose: 确定 Kong 代理的服务类型
- Mandatory: 是
- Input Instructions: 从 ClusterIP、NodePort、LoadBalancer 中选择一个。如果选择 NodePort 或 LoadBalancer,则需要用户输入 Kong 代理服务的 NodePort 值(介于 30000 和 32767 之间)

- Purpose: 亲和性用于控制网关 Pod 将在哪些节点上调度,通过匹配节点标签。
- Mandatory: 如果切换为开启,则是。
- Input Instructions: 切换亲和性为开启以启用它。然后提供节点标签的键和值。这在 Kubernetes 中转换为 nodeAffinity 规则,使用 requiredDuringSchedulingIgnoredDuringExecution。例如:

节点亲和性:
- Purpose: 容忍度允许网关 Pod 被调度到标记为特定工作负载的节点上。
- Mandatory: 如果切换为开启,则为是。
- Input Instructions: 切换为开启后,输入以下内容:
- 操作符:选择等于(Equal)或存在(Exists)。等于:键和值必须完全匹配。存在:只需要键存在;值不是必需的。
- 键和值:提供污点键和值(如果操作符为存在,则值是可选的)。

容忍度:
- effect: NoSchedule
key: "tolerationKey"
operator: "Equal" 或 Exists
value: "tolerationValue"
- Purpose: 拓扑扩展约束确保网关 Pod 在故障域(如区域或节点)之间均匀分布,从而提高弹性和可用性。
- Mandatory: 如果切换为开启,则为是。
- Input Instructions: 切换为开启后,输入以下内容:
- Max Skew: 拓扑域之间网关 Pod 数量的最大允许差异(例如,如果设置为 1,则每个区域的 Pod 数量不得相差超过 1)。
- When Unsatisfiable: 选择以下之一:ScheduleAnyway(默认):即使扩展约束无法完全满足,仍然允许调度;DoNotSchedule: 如果约束失败,则阻止 Pod 调度;DoNotScheduleIfNotSatisfied: 新策略,仅在扩展条件不满足时限制调度。

此映射到的示例 Kubernetes 规则:
topologySpreadConstraints:
- maxSkew: 1
topologyKey: topology.kubernetes.io/zone
whenUnsatisfiable: ScheduleAnyway
labelSelector: matchLabels:
app.kubernetes.io/instance: test-kong
- Purpose: 允许内部 Redis 实例用于缓存。
- Mandatory: 如果切换为是
- Input Instructions: 切换开/关。如果开启,默认的 Redis 会在网关部署时安装。如果关闭,用户将被告知 APIM Redis 不支持使用 Redis 的策略(速率限制、jwt 黑名单、OIDC)。用户需要在提示中确认以继续切换为关闭。

- Purpose: Fluent Bit 是一个轻量级日志处理器,收集、过滤并转发来自网关容器的日志。
- Mandatory: 否
- Input Instructions: 启用后,您还可以选择以下选项之一作为目标:
- OpenTelemetry: 使用 OpenTelemetry 代理转发日志和遥测数据。
- Elasticsearch: 将日志转发到 Elasticsearch 集群以进行索引和搜索。

注意:这些选项中只能有一个处于活动状态。如果您在另一个选项已经处于活动状态时启用一个选项,将会出现确认提示以禁用当前活动的选项。

- Purpose: 此字段允许您通过提供原始 JSON 格式的配置,直接对 Kong Gateway 运行时应用高级、低级配置,以便在需要精细调整性能或行为时使用。
- Mandatory: 如果切换为是
- Input Instructions: 切换后,将出现一个 JSON 编辑器,您可以在其中输入自定义的 Kong 运行时设置。

示例:
"upstream_keepalive_idle_timeout": 60, "upstream_keepalive_max_requests": 100000,
"nginx_http_keepalive_requests": 100000,
"upstream_keepalive_pool_size": 1024
注意:配置错误可能导致网关行为不稳定。在应用更改之前,请咨询Kong文档或您的平台管理员。
网关配置总结如下表:
| Field Name | Purpose | Input Notes | Mandatory |
|---|---|---|---|
| 网关类型 | 定义API网关类型。 | 与项目的网关类型对齐。无法更改。 | 是的。默认是kong。 |
| 网关名称 | 网关的唯一标识符。 | 只能使用英文字母、数字、连字符‘-’、下划线‘_’或双冒号‘:’。必须以英文字母开头。 | 是 |
| 网关实例名称 | 标识网关实例。 | 根据网关名称自动填充。 | 是 |
| 网关描述 | 提供有关网关的额外详细信息。 | 输入简短描述。 | 否 |
| 网关标签 | 有助于过滤和搜索网关。 | 网关可以有多个标签。输入标签时按Enter键分隔. | 否 |
| 网关CPU/内存 | 为网关分配资源。 | 使用滑块调整。值范围从500到16000 m/mi。 | 是 |
| 数据库CPU/内存 | 为网关使用的内部数据库分配资源。 | 使用滑块调整。值范围从500到16000 m/mi。 | 是 |
| 网关自动扩展 | 部署后启用自动Pod资源扩展。 | 开关开启/关闭。如果开启,配置:最小副本、最大副本、CPU阈值(%)、内存阈值(%) | 如果切换则是 |
| Kong命名空间 | 确定网关在Kubernetes中运行的位置。 | 从下拉列表中选择一个命名空间。 | 是 |
| Kong存储类 | 定义网关的存储配置方式。 | 从下拉列表中选择一个存储类。 | 是 |
| 存储容量 | 指定网关的存储分配。 | 输入一个介于 5 和 500 (Gi) 之间的值。 | 是 |
| Kong 代理服务类型 | 定义 Kong 代理的服务类型以供外部访问 | 从以下选项中选择:ClusterIP、NodePort 或 LoadBalancer。默认是 ClusterIP。 | 是 |
| 亲和性 | 将网关 Pod 调度到具有匹配标签的节点。 | 切换开/关。如果开启,输入节点标签的键和值 | 如果切换则是 |
| 容忍度 | 允许网关 Pod 在有污点的节点上运行。 | 切换开/关。如果开启,选择操作符:Equal 或 Exists。输入键,值为可选。 | 如果切换则是 |
| 拓扑分布 | 在各个区域均匀分配 Pod 以增强可用性。 | 切换开/关。如果开启,输入:最大偏差(例如,1)。选择不满足时的选项:从 ScheduleAnyway、DoNotSchedule、DoNotScheduleIfNotSatisfied 中选择 | 如果切换则是 |
| 内部 Redis | 允许内部 Redis 实例用于缓存。 | 切换开/关。如果开启,默认的 Redis 会在网关部署时安装。 | 如果切换则是 |
| Fluent Bit | 启用 OpenTelemetry 代理进行指标收集或 Elasticsearch 进行日志收集。 | 只能在 OpenTelemetry 或 Elasticsearch 之间选择 | 如果切换则是 |
| Kong 配置 | 启用手动覆盖 Kong 配置。 | 切换开启以启用编辑器并输入有效的 JSON。 | 如果切换则是 |
完成创建
点击 CREATE A GATEWAY 按钮以完成创建并存储网关配置。
添加和管理网关 URL
网关 URL 配置允许用户为 API 网关定义一个或多个面向公众的域名。它还支持 HTTPS 的 TLS 证书、API 路由的全局基本路径以及通过注释提供的附加元数据。每个网关可以有多个网关 URL,定义如何访问 API 网关。
要开始添加网关 URL,用户可以点击网关管理屏幕中列出的已创建网关以进入网关修改屏幕。

在这里,用户可以在下面找到网关 URL 配置部分。

以下是创建网关 URL 的步骤:
创建 URL
点击添加以创建多个 URL。将创建一个新的块以配置 URL。
配置网关 URL
以下是配置网关 URL 的关键字段:
Gateway URL- Purpose: 定义网关可访问的公共域名。如果用户更改正在使用的网关 URL,现有 API 可能无法正确调用。
- Mandatory: 是
- Input Instructions: 输入有效的域名。
- Example:
your.domain.com
your.domain.com:8443

- Purpose: 为此网关下的所有 API 设置一个公共前缀。如果定义,所有此网关下的 API 将继承此前缀。如果在使用时更改基本路径,现有 API 可能无法正确调用。
- Mandatory: 是
- Input Instructions: 输入基本路径。如果留空 /,则使用根路径。
- Example:
/ /apim

- Purpose: 包括 tls.crt 以通过提供 SSL 证书和 tls.key 文件来启用 HTTPS 通信。如果应用了仅允许在与网关 URL 通信时使用 HTTPS 的网络策略,用户需要开启 HTTPS。如果用户正在使用 K8s Secret 注册 TLS 证书并通过 K8s Ingress 处理 TLS 认证,用户必须输入 tls.crt/tls.key 值。
- Mandatory: 取决于
- Input Instructions: 粘贴 PEM 格式的证书内容。安全 HTTPS 连接所必需。

- Purpose: 指定要用于此网关 URL 配置的 Ingress 控制器。
- Mandatory: 是
- Input Instructions: 从下拉菜单中选择一个 Ingress 类。可用选项可能包括:
- nginx(默认)
- alb
- appsec-kong
此设置通过所选的 Ingress 控制器路由网关 URL。

- Purpose: 向为此网关 URL 创建的 Ingress 资源添加 Kubernetes 标签。对于分类或自动化目的非常有用。
- Mandatory: 否
- Input Instructions: 输入一个或多个键值对。这些标签将应用于创建的 Ingress 对象。使用加号按钮添加多个条目,或使用叉号按钮删除已添加的条目。

- Purpose: 添加 Kubernetes 入口注释以进行高级配置,例如自定义超时、头部操作或特定于控制器的选项。
- Mandatory: 否
- Input Instructions: 可以使用两种模式输入注释:
表单模式(JSON 切换关闭):手动输入每个注释的键和值。某些字段可能因系统限制而无法编辑。可以通过单击加号按钮添加多个注释,或通过单击叉号按钮删除已添加的注释。必须至少保留一个注释。

示例:
"key": "nginx.ingress.kubernetes.io/proxy-connect-timeout",
"value": "300"
JSON 模式(JSON 切换开启):在编辑器中将注释作为键值 JSON 对象的数组输入。

示例:
[
{
"key": "nginx.ingress.kubernetes.io/configuration-snippet",
"value": "more_clear_headers \"server\";more_clear_headers \"via\";"
},
{
"key": "nginx.ingress.kubernetes.io/proxy-connect-timeout",
"value": "300"
},
{
"key": "nginx.ingress.kubernetes.io/proxy-read-timeout",
"value": "300"
},
{
"key": "nginx.ingress.kubernetes.io/proxy-send-timeout",
"value": "300"
}
]
网关 URL 配置汇总如下表:
| Field Name | Purpose | Input Notes |
|---|---|---|
| 网关 URL | 定义网关可访问的公共域名。如果用户更改正在使用的网关 URL,现有 API 可能无法正确调用。 | 输入有效的域名(例如,api.example.com)。必填字段。 |
| 全局基本路径 | 为此网关下的所有 API 设置一个公共前缀。如果定义,则此网关下的所有 API 将继承此前缀。 | 输入基本路径(例如,/api)。如果留空 /,则使用根路径。 |
| TLS 证书 (tls.crt) | 通过提供 SSL 证书来启用 HTTPS 通信。 | 粘贴 PEM 格式的证书内容。安全 HTTPS 连接所必需。 如果用户正在使用 K8s Secret 注册 TLS 证书并通过 K8s Ingress 处理 TLS 认证,用户必须输入 tls.crt/tls.key 值。 |
| TLS 私钥 (tls.key) | 用于验证 TLS 证书。 | 粘贴 PEM 格式的私钥内容。必须与提供的证书匹配。 |
| Ingress 类 | 指定用于此网关 URL 配置的 ingress 控制器。 | 从 nginx(默认)、alb 或 appsec-kong 中选择一个 ingress 类。 |
| 标签 | 为为此网关 URL 创建的 ingress 资源添加 Kubernetes 标签。 | 输入一个或多个键值对。可以添加或删除对。 |
| 注释 | 为高级配置添加 Kubernetes ingress 注释。 | 可以使用两种模式输入多个注释:键值对(JSON 模式关闭)或 JSON 脚本(JSON 模式开启)。 |
如果两个网关 URL(api.example.com 和 service.example.com)配置了基本路径 /api,则:
https://api.example.com/api/{API-Path}
https://service.example.com/api/{API-Path}
将是有效的 API 端点。
修改网关
用户可以通过以下方式修改现有网关:
-
从列表中选择一个网关。

-
编辑可配置字段和输入(网关描述、网关标签、网关 CPU/内存、数据库 CPU/内存、开关和数值等)。

- 根据需要更新 Gateway URLs。
- 保存更改以应用更新。
如果用户对网关 URL 进行了更改,请记得在点击“保存网关 URL”按钮之前,先点击“保存网关”按钮。
删除网关
删除网关将 permanently remove 所有相关数据。此操作 cannot be undone。
- 导航到 Gateway Management。
- 选择要删除的网关。

- 点击 "Deleting A Gateway" 并确认该操作。
- 依赖于此网关的 API 将不再可访问。
- 在删除之前,请确保没有活动的 API 依赖于此网关。