使用 AWS S3 实现数据面弹性
在本指南中,你将学习如何在 API7 企业版中使用 AWS S3 作为外部配置存储来配置数据面(DP)弹性。API7 支持两种验证网关节点以访问 S3 的方法:
- 服务账号的 IAM 角色(IRSA) – 使用与 IAM 角色关联的 Kubernetes 服务账号,为网关 Pod 授予安全访问权限,而无需使用静态凭证。
- IAM 用户和访问密钥 – 使用 IAM 用户和访问密钥进行身份验证。
这两种方法都允许网关节点在控制面(CP)不可用时获取配置并继续处理流量。
使用服务账号的 IAM 角色(IRSA)
此方法利用与 IAM 角色关联的 Kubernetes 服务账号,允许 API7 网关 Pod 安全地访问 AWS S3,而无需嵌入静态凭证。
准备 AWS 资源
你将在 AWS 上准备以下资源:
- 用于部署 API7 网关实例的 Amazon EKS 集群。
- 集群的 IAM OIDC 提供商。
- 两个 S3 存储桶:
- 一个存储桶用于网关组的动态配置,如密钥环和发现数据。
- 一个存储桶用于网关资源配置,如路由和服务。
- 授予对上述两个 S3 存储桶读写权限的 IAM 策略。
- 附加了上述策略且映射到 Kubernetes 服务账号的 IAM 角色。
EKS 集群
如果尚未提供,请创建一个 Amazon EKS 集群。
有关详细操作说明,请参阅 AWS 官方文档 Amazon EKS 入门。
集群的 IAM OIDC 提供商
为 EKS 集群启用 IAM OIDC 身份提供商。这是使用服务账号的 IAM 角色(IRSA)所必需的,它允许 Kubernetes 工作负载安全地访问 AWS 服务(如 Amazon S3),而无需嵌入长期凭证。
有关详细操作说明,请参阅 AWS 官方文档 为你的集群创建 IAM OIDC 提供商。
S3 存储桶
创建两个 S3 存储桶(以下存储桶名称为示例):
fallback-cp-data- 用于备份网关组的动态配置,如密钥环和发现数据。fallback-cp-config- 用于备份网关资源配置,如路由和服务。
这些存储桶名称稍后将在网关部署中被引用。
有关创建 S3 存储桶的详细说明,请参阅 AWS 官方文档 创建通用存储桶。
IAM 角色和 Kubernetes 服务账号
要允许网关 Pod 安全地访问 S3 存储桶,请遵循 AWS 官方文档 将 IAM 角色分配给 Kubernetes 服务账号 进行操作:
-
创建一个允许读写这两个 S3 存储桶的 IAM 策略。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "FallbackCP_S3Access",
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::fallback-cp-config",
"arn:aws:s3:::fallback-cp-data",
"arn:aws:s3:::fallback-cp-config/*",
"arn:aws:s3:::fallback-cp-data/*"
]
}
]
} -
创建一个 IAM 角色,并附加之前创建的 IAM 策略。
-
创建一个 Kubernetes 服务账号,并将 IAM 角色与其关联。
确保将 IAM 角色与网关实例部署在同一命名空间中的 Kubernetes 服务账号关联起来。
这将具有 S3 权 限的 IAM 角色映射到网关 Pod 使用的 Kubernetes 服务账号,使它们能够访问 S3,而无需嵌入 AWS 凭证。
部署备用网关节点
在 API7 控制板中,导航到 Gateway Instances > Add Gateway Instance。切换到 Kubernetes 选项卡并在生成部署脚本之前填写以下详细信息:
- 自定义 Helm release 名称。
- 指定网关将部署到的命名空间。
- 指定已标注 IAM 角色的 Kubernetes 服务账号,该角色授予对 S3 存储桶的读写权限。

点击 Generate 生成部署脚本。你应该看到服务账号名称已经在 helm upgrade 命令中设置好。接下来,在 helm upgrade 命令中手动添加下面突出显示的 --set 参数:
helm upgrade --install -n default --create-namespace api7-backup-gateway-node api7/gateway \
--set ... \ # other parameters
--set "serviceAccount.name=aws-k8s-service-account" \
--set "deployment.fallback_cp.interval=60" \
--set "deployment.fallback_cp.mode=write" \
--set "deployment.fallback_cp.aws_s3.region=ap-southeast-2" \
--set "deployment.fallback_cp.aws_s3.resource_bucket=fallback-cp-data" \
--set "deployment.fallback_cp.aws_s3.config_bucket=fallback-cp-config"
❶ 配置配置备份的时间间隔,以秒为单位。
❷ 将网关配置在备用写入模式,允许它定期将派生自 CP 的配置导出到外部存储。
❸ 指定 AWS 区域。
❹ 指定存储资源和配置数据的 S3 存储桶。
连接到你的 EKS 集群 并运行更新的部署脚本来部署备用网关节点。
检查 Pod 状态和日志,以确保没有与 S3 存储桶连接相关的错误。