使用 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 存储桶连接相关的错误。
验证
在本节中,你将验证配置数据是否已成功备份到 Amazon S3,并且当控制面不可用时,流量网关节点可以使用回退配置继续运行。
检查 S3 中的数据备份
在 AWS 控制台中,导航到你的 S3 存储桶。验证数据是否正在写入 fallback-cp-data 和 fallback-cp-config 存储桶。


你应该会看到备用网 关节点定期更新的配置文件,表明派生自 CP 的配置已成功备份。
确保流量网关节点使用回退配置
假设控制面(CP)变得不可用,你需要配置数据面(DP)流量节点从外部存储中获取配置。
无论你是要更新现有的流量网关节点还是启动新的节点,都可从 API7 控制板生成部署脚本,并在 helm upgrade 命令中手动应用以下突出显示的 --set 标志。
helm upgrade --install -n default --create-namespace api7-traffic-gateway-node api7/gateway \
--set ... \ # other parameters
--set "etcd.host[0]=https://INVALID_DOMAIN:7943" \
--set "serviceAccount.name=aws-k8s-service-account" \
--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"
❶ 通过设置无效的 ETCD 主机来模拟控制面不可用。
❷ 指定 Kubernetes 服务账号。更新为你自己的服务账号名称。
❸ 指定 AWS 区域。
❹ 指定存储资源和配置数据的 S3 存储桶。
连接到你的 EKS 集群 并运行更新后的部署脚本,以部署或升级流量网关节点。该节点现在应基于存储在 AWS S3 存储桶中的配置进行操作。
要验证设置,请向你的网关发送请求。响应应该反映先前在 CP 中定义的配置,包括你配置的任何路由、服务或插件。
这证实了流量网关节点正确使用了回退配置,即使在 CP 不可用时也能继续处理流量。
使用 IAM 用户和访问密钥
此方法使用 IAM 用户和访问密钥对网关 Pod 进行身份验证。它需要管理静态凭证。
准备 AWS 资源
根据链接的文档创建和配置必要的 AWS 资源:
- 创建两个 S3 存储桶(以下存储桶名称为示例):
fallback-cp-data:用于存储动态网关配置,例如密钥环和发现数据。fallback-cp-config:用于存储网关资源配置,例如路由和服务。
- 选择现有的 IAM 用户或为集成创建一个新用户,并获取其访问密钥和秘密访问密钥。
- 为该 IAM 用户附加一个授予对 S3 存储桶读写权限的 IAM 策略。
部署备用网关节点
- Docker
- Kubernetes
在 API7 控制板中,导航到 Gateway Instances > Add Gateway Instance。切换到 Docker 选项卡,填写备用网关节点的名称,然后单击 Generate 生成部署脚本。
在运行中的网关中,将 fallback_cp 配置添加到网关的配 置文件中:
deployment:
fallback_cp:
interval: 60
mode: "write"
aws_s3:
access_key: your-aws-iam-access-key
secret_key: your-aws-iam-secret-access-key
region: ap-southeast-2
config_bucket: fallback-cp-config
resource_bucket: fallback-cp-data
❶ 配置配置备份的时间间隔,以秒为单位。
❷ 将网关配置在备用写入模式,允许它定期将派生自 CP 的配置导出到外部存储。
❸ 替换为你的 AWS IAM 用户的访问密钥和秘密访问密钥。
❹ 替换为你的 AWS 区域。
❺ 替换为存储资源和配置数据的 S3 存储桶。
重新加载网关实例以使配置更改生效。检查网关日志以确保没有与 S3 存储桶连接相关的错误。
在 API7 控制板中,导航到 Gateway Instances > Add Gateway Instance。切换到 Kubernetes 选项卡,填写备用网关节点的名称和命名空间,然后单击 Generate 生成部署脚本。
接下来,在 helm upgrade 命令中手动添加以下突出显示的 --set 参数:
helm upgrade --install -n default --create-namespace api7-backup-gateway-node api7/gateway \
--set ... \ # other parameters
--set "deployment.fallback_cp.interval=60" \
--set "deployment.fallback_cp.mode=write" \
--set "deployment.fallback_cp.aws_s3.access_key=your-aws-iam-access-key" \
--set "deployment.fallback_cp.aws_s3.secret_key=your-aws-iam-secret-access-key" \
--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 IAM 用户访问密钥和秘密访问密钥。
❹ 替换为你的 AWS 区域。
❺ 替换为存储资源和配置数据的 S3 存储桶。
运行更新的部署脚本以部署备用网关节点。检查 Pod 状态和日志,以确保没有与 S3 存储桶连接相关的错误。
该网关应该开始作为备用节点运行,并定期将配置推送到 S3 存储桶。
验证
在本节中,你将验证配置数据是否已成功备份到 Amazon S3,并且当控制面不可用时,流量网关节点可以使用回退配置继续运行。
检查 S3 中的数据备份
在 AWS 控制台中,导航到你的 S3 存储桶。验证数据是否正在写入 fallback-cp-data 和 fallback-cp-config 存储桶。


你应该会看到备用网关节点定期更新的配置文件,表明派生自 CP 的配置已成功备份。
确保流量网关节点使用回退配置
假设控制面(CP)变得不可用,你需要配置数据面(DP)流量节点从外部存储获取配置。
- Docker
- Kubernetes
无论是更新现有的流量网关节点还是启动新的节点,都在运行的流量网关节点中,将 fallback_cp 配置添加到网关的配置文件中:
deployment:
role: data_plane
role_data_plane:
config_provider: json
fallback_cp:
aws_s3:
access_key: your-aws-iam-access-key
secret_key: your-aws-iam-secret-access-key
region: ap-southeast-2
config_bucket: fallback-cp-config
resource_bucket: fallback-cp-data
❶ 配置网关以单机模式运行。
❷ 替换为你的 AWS IAM 用户访问密钥和秘密访问密钥。
❸ 替换为你的 AWS 区域。
❹ 替换为存储资源和配置数据的 S3 存储桶。
重新加载网关实例以使配置更改生效。网关应开始在独立模式下运行并从 S3 存储桶获取配置。
无论是更新现有的流量网关节点还是启动新的节点,都在 helm upgrade 命令中手动附加以下突出显示的 --set 参数,以配置节点在 CP 不可用时从 AWS S3 存储桶获取配置。
helm upgrade --install -n default --create-namespace api7-traffic-gateway-node api7/gateway \
--set ... \ # other parameters
--set "etcd.host[0]=https://INVALID_DOMAIN:7943" \
--set "deployment.fallback_cp.aws_s3.access_key=your-aws-iam-access-key" \
--set "deployment.fallback_cp.aws_s3.secret_key=your-aws-iam-secret-access-key" \
--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"
❶ 通过设置无效的 ETCD 主机来模拟控制面板不可用。
❷ 替换为你的 AWS IAM 用户访问密钥和秘密访问密钥。
❸ 指定 AWS 区域。
❹ 替换为存储资源和配置数据的 S3 存储桶。
运行更新后的部署脚本来部署或升级流量网关节点。节点现在应根据存储在 AWS S3 存储桶中的配置运行。
要验证设置,请向你的网关发送请求。响应应该反映先前在 CP 中定义的配 置,包括你配置的任何路由、服务或插件。
这确认了流量网关节点正确使用了回退配置,即使在 CP 不可用时也能继续服务流量。