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

使用 AWS S3 实现数据面弹性

在本指南中,你将学习如何在 API7 企业版中使用 AWS S3 作为外部配置存储来配置数据面(DP)弹性。API7 支持两种验证网关节点以访问 S3 的方法:

  1. 服务账号的 IAM 角色(IRSA) – 使用与 IAM 角色关联的 Kubernetes 服务账号,为网关 Pod 授予安全访问权限,而无需使用静态凭证。
  2. 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 服务账号 进行操作:

  1. 创建一个允许读写这两个 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/*"
    ]
    }
    ]
    }
  2. 创建一个 IAM 角色,并附加之前创建的 IAM 策略。

  3. 创建一个 Kubernetes 服务账号,并将 IAM 角色与其关联。

important

确保将 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-datafallback-cp-config 存储桶。

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 资源:

部署备用网关节点

在 API7 控制板中,导航到 Gateway Instances > Add Gateway Instance。切换到 Docker 选项卡,填写备用网关节点的名称,然后单击 Generate 生成部署脚本。

在运行中的网关中,将 fallback_cp 配置添加到网关的配置文件中:

conf/config.yaml
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 存储桶连接相关的错误。

该网关应该开始作为备用节点运行,并定期将配置推送到 S3 存储桶。

验证

在本节中,你将验证配置数据是否已成功备份到 Amazon S3,并且当控制面不可用时,流量网关节点可以使用回退配置继续运行。

检查 S3 中的数据备份

在 AWS 控制台中,导航到你的 S3 存储桶。验证数据是否正在写入 fallback-cp-datafallback-cp-config 存储桶。

fallback-cp-data 存储桶文件

fallback-cp-config 存储桶文件

你应该会看到备用网关节点定期更新的配置文件,表明派生自 CP 的配置已成功备份。

确保流量网关节点使用回退配置

假设控制面(CP)变得不可用,你需要配置数据面(DP)流量节点从外部存储获取配置。

无论是更新现有的流量网关节点还是启动新的节点,都在运行的流量网关节点中,将 fallback_cp 配置添加到网关的配置文件中:

conf/config.yaml
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 存储桶获取配置。

要验证设置,请向你的网关发送请求。响应应该反映先前在 CP 中定义的配置,包括你配置的任何路由、服务或插件。

这确认了流量网关节点正确使用了回退配置,即使在 CP 不可用时也能继续服务流量。