跳到主要内容
版本:3.10.x

数据面弹性

API7 网关数据面节点将配置缓存在内存中,并且可以在短暂的控制面(CP) 中断期间继续处理流量。但是,对于长时间中断,例如数据库故障、控制面升级或灾难恢复场景,在没有 CP 连接的情况下重新启动的节点无法加载配置。

在你已经规划好流量服务节点的扩展和高可用性之后,请使用本指南:

后备 CP 通过定期将所有网关配置导出到外部存储(AWS S3、S3 兼容存储或 Azure Blob 存储)来解决此问题。当控制面无法访问时,数据面节点会从此存储中获取其配置,使它们能够启动并继续独立运行。

它是如何工作的

Fallback CP 架构使用备份网关节点,该节点与流量处理节点一起运行,但不服务 API 流量。其唯一目的是从控制面接收配置并按 cron 计划将其导出到外部存储。

正常运行

在正常操作期间,每个数据面节点(包括备份节点)都会在 mTLS 端口 7943 上监视来自控制面的 etcd 兼容 API 的配置(有关详细信息,请参阅架构拉取/监听模型)。备份节点还按照 cron 计划将其收到的配置写入外部存储。

后备操作

当控制面不可用时,流量节点会回退到从外部存储加载配置,而不是从控制面加载配置。

导出什么

备份节点按网关组导出两类数据:

类别内容
资源数据路由、服务、上游、消费者、凭证、SSL 证书、全局规则、插件元数据、插件配置、流路由、秘密、自定义插件和 protobuf 定义
配置数据数据面配置,包括密钥环和服务发现设置

每个网关组的数据都存储为单独的对象,并以网关组的短 ID 为键控。

信息

备份节点为 API 流量公开 HTTP/HTTPS 端口,并且计入你的许可证配额。

先决条件

  • 正在运行的 API7 网关部署,至少有一个网关组。
  • 外部存储后端: — AWS S3 或 S3 兼容存储:两个具有适当访问权限的存储桶(一个用于资源数据,一个用于配置数据)。对于 MinIO、Ceph 或阿里云 OSS 等 S3 兼容存储,请准备自定义端点URL。 — Azure Blob 存储:两个 Blob 容器(一个用于资源数据,一个用于配置数据),具有适当的访问凭证。

AWS S3 权限

备份节点的 IAM 策略必须包括:

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["s3:PutObject"],
"Resource": [
"arn:aws:s3:::fallback-cp-data/*",
"arn:aws:s3:::fallback-cp-config/*"
]
}
]
}

回退模式下的流量节点需要同一桶上的 s3:GetObject

对于 S3 兼容存储,请在存储提供程序中授予等效的对象读/写权限。

Azure Blob 存储权限

使用的身份或访问密钥必须在两个容器上都具有 Storage Blob Data Contributor 角色,或者使用存储账户访问密钥。

配置备份节点

备份节点是网关实例,在 fallback_cp 下配置了 mode: write。它像常规数据面节点一样连接到控制面,但将配置写入外部存储而不是提供流量。

将备份节点部署为单独的 Helm 版本或现有版本中的专用部署。

使用服务账户的 IAM 角色 (IRSA)

backup-node-values.yaml
replicaCount: 1

gateway_conf:
deployment:
fallback_cp:
interval: 60
mode: write
aws_s3:
region: "us-east-1"
resource_bucket: "fallback-cp-data"
config_bucket: "fallback-cp-config"

serviceAccount:
annotations:
eks.amazonaws.com/role-arn: "arn:aws:iam::123456789012:role/fallback-cp-role"

❶ 配置导出之间的时间间隔(以秒为单位)。 ❷ write模式表示该节点仅导出到存储;它不提供流量服务。 ❸ S3桶所在区域AWS。 ❹ ❺ 资源数据和配置数据分开存放。

使用 IAM 访问密钥

backup-node-values.yaml
replicaCount: 1

gateway_conf:
deployment:
fallback_cp:
interval: 60
mode: write
aws_s3:
access_key: "${AWS_ACCESS_KEY_ID}"
secret_key: "${AWS_SECRET_ACCESS_KEY}"
region: "us-east-1"
resource_bucket: "fallback-cp-data"
config_bucket: "fallback-cp-config"

对于S3兼容的存储,使用提供者的访问密钥和秘密密钥,并将endpoint添加到aws_s3块:

gateway_conf:
deployment:
fallback_cp:
aws_s3:
endpoint: "https://s3-compatible.example.com"

配置流量节点进行回退

流量节点必须配置为在控制面无法访问时回退到外部存储。在回退模式下,网关切换到独立模式并从备份节点使用的相同存储桶中读取配置。

fallback_cp 块添加到流量节点 Helm 值( modeinterval):

traffic-node-values.yaml
gateway_conf:
deployment:
fallback_cp:
aws_s3:
region: "us-east-1"
resource_bucket: "fallback-cp-data"
config_bucket: "fallback-cp-config"

对于 S3 兼容存储,请将 endpoint 添加到 aws_s3 块。

备注

当流量节点在回退模式下运行时,在控制面恢复之前无法应用配置更改。所有节点都将服务于备份节点导出的最后配置。

控制面-侧配置

或者,可以在 控制面控制台上配置后备 CP 推送,而不是使用专用的备份网关节点。控制台按照 cron 计划定期将配置推送到外部存储。

在控制台配置中进行配置:

dashboard-config.yaml
fallback_cp:
cron_spec: "@every 1m"
aws_s3:
access_key: "${AWS_ACCESS_KEY_ID}"
secret_key: "${AWS_SECRET_ACCESS_KEY}"
region: "us-east-1"
resource_bucket: "fallback-cp-data"
config_bucket: "fallback-cp-config"
azure_blob:
account_name: "youraccount"
account_key: "${AZURE_STORAGE_ACCOUNT_KEY}"
resource_container: "fallback-cp-data"
config_container: "fallback-cp-config"

❶ 一个 cron 表达式,用于控制控制台推送配置的频率。常用值:@every 1m@every 5m。 ❷ ❸ 你可以同时配置一个或两个存储后端。控制台推送到所有配置的后端。

对于 S3 兼容存储,请将 custom_endpoint 添加到控制台端 aws_s3 块:

fallback_cp:
aws_s3:
custom_endpoint: "https://s3-compatible.example.com"
信息

当多个控制台实例运行时,分布式锁可确保在任何给定时间只有一个实例执行推送。

配置参考

备份节点/流量节点(config.yaml

字段类型描述
deployment.fallback_cp.mode字符串write 用于备份节点。省略流量节点(回退/读取模式)。
deployment.fallback_cp.interval整数导出间隔(以秒为单位)(仅限备份节点)。
deployment.fallback_cp.aws_s3.access_key字符串AWS 访问密钥 ID。使用 IRSA 时不需要。
deployment.fallback_cp.aws_s3.secret_key字符串AWS 访问密钥。使用 IRSA 时不需要。
deployment.fallback_cp.aws_s3.region字符串S3 存储桶的 AWS 区域。
deployment.fallback_cp.aws_s3.resource_bucket字符串用于资源数据的 S3 存储桶。
deployment.fallback_cp.aws_s3.config_bucket字符串用于配置数据的 S3 存储桶。
deployment.fallback_cp.aws_s3.endpoint字符串自定义 S3端点(用于 S3 兼容存储)。
deployment.fallback_cp.azure_blob.account_name字符串Azure 存储账户名称。
deployment.fallback_cp.azure_blob.account_key字符串Azure 存储账户密钥。使用 Workload Identity 时不需要。
deployment.fallback_cp.azure_blob.resource_container字符串资源数据的 Blob 容器。
deployment.fallback_cp.azure_blob.config_container字符串用于配置数据的 Blob 容器。
deployment.fallback_cp.azure_blob.endpoint字符串自定义 Azure Blob端点。默认为 https://<account_name>.blob.core.windows.net

控制台 (dashboard-config.yaml)

字段类型描述
fallback_cp.cron_spec字符串推送计划的 Cron 表达式(例如,@every 1m)。
fallback_cp.aws_s3.access_key字符串AWS 访问密钥 ID。
fallback_cp.aws_s3.secret_key字符串AWS 访问密钥。
fallback_cp.aws_s3.region字符串S3 存储桶的 AWS 区域。
fallback_cp.aws_s3.resource_bucket字符串用于资源数据的 S3 存储桶。
fallback_cp.aws_s3.config_bucket字符串用于配置数据的 S3 存储桶。
fallback_cp.aws_s3.custom_endpoint字符串自定义 S3端点用于 S3 兼容存储。在 API7 Helm 图表中,将其配置为 fallback_cp.aws_s3.custom_endpoint
fallback_cp.azure_blob.*与网关侧azure_blob配置相同的字段。

后续步骤