跨账号零流量费备份:用 VPC 对等连接让 Flexus 服务器内网访问另一个账号的 OBS 桶

举报
yd_224682420 发表于 2026/11/09 11:15:59 2026/11/09
【摘要】 跨账号零流量费备份:用 VPC 对等连接让 Flexus 服务器内网访问另一个账号的 OBS 桶一句话总结:账号 A 的 Flexus 应用服务器上的网站和数据库,通过 VPC 对等连接 + VPC 终端节点,走内网备份到账号 B 的 OBS 存储桶里。备份上传本就免费,关键是恢复下载也不花一分钱公网流量费。 一、痛点:你可能也遇到了这个问题如果你正在用华为云,以下场景大概率会戳中你:你有...

跨账号零流量费备份:用 VPC 对等连接让 Flexus 服务器内网访问另一个账号的 OBS 桶

一句话总结:账号 A 的 Flexus 应用服务器上的网站和数据库,通过 VPC 对等连接 + VPC 终端节点,走内网备份到账号 B 的 OBS 存储桶里。备份上传本就免费,关键是恢复下载也不花一分钱公网流量费。


一、痛点:你可能也遇到了这个问题

如果你正在用华为云,以下场景大概率会戳中你:

你有一个账号(姑且叫账号 A),在上面买了台 Flexus 应用服务器(L 实例),装了 Ubuntu 系统,跑着宝塔面板,建了好几个网站和数据库。 日常运行没问题,但你心里一直不踏实——万一服务器挂了、数据误删了、被黑了怎么办?必须备份。

你还有另一个账号(账号 B),上面买了个 OBS 标准存储多 AZ 资源包。 资源包已经付过钱了,容量充足,用来存备份再合适不过。

但问题来了:

  1. 两个资源在不同账号下。账号 A 的服务器想往账号 B 的 OBS 桶里存东西、取东西,默认得走公网。
  2. 上传到 OBS 走公网是免费的(OBS 公网上行不收费),但从 OBS 下载走公网要收费(公网下行流量按量计费)。备份文件动辄几个 G 甚至几十个 G,每次恢复、迁移、验证备份都要从 OBS 拉数据,这些下行流量费积少成多,账单看着肉疼。
  3. 资源包只覆盖存储容量和请求次数,不覆盖公网下行流量。你买了资源包以为万事大吉,结果恢复数据时流量费照样另算。

你想要的其实很简单:让账号 A 的 Flexus 服务器和账号 B 的 OBS 桶之间走内网通信,数据传输不经过公网。这样不管是备份上传还是恢复下载,都不产生公网流量费。资源包的容量和请求额度用来兜底,整个备份和恢复过程零额外流量成本。

解决方案就是:VPC 对等连接(VPC Peering)+ VPC 终端节点(VPC Endpoint)。

这篇文章会手把手教你怎么配,每一步都写清楚点哪个按钮、填什么值。


二、方案原理:数据是怎么走内网的

先搞懂原理,后面操作就不慌。

架构图如下:

数据流向:

  1. Flexus 服务器(账号 A 的 VPC-A)发出 OBS 请求
  2. 请求通过 VPC 对等连接 进入账号 B 的 VPC-B
  3. VPC-B 中的 VPC 终端节点(一个内网 IP)将请求转发给 OBS 服务
  4. OBS 返回数据,原路返回

关键角色解释:

组件 作用 在哪个账号创建
VPC 对等连接 把两个账号的 VPC 内网打通 A 发起,B 接受
VPC 终端节点 (VPCEP) 在 VPC-B 内提供一个访问 OBS 的内网入口 账号 B
路由表规则 告诉服务器"去 B 的网段走对等连接" 两个账号都要配
安全组规则 允许对等连接的流量通过 两个账号都要配

三、前提条件

开始操作前,确认以下条件满足:

3.1 两个账号在同一区域

VPC 对等连接要求两个 VPC 在同一个区域(比如都在 cn-north-4 北京四)。如果不在同一区域,对等连接建不了,得考虑其他方案(如云连接 CC)。

怎么确认:

  • 登录账号 A,看 Flexus 服务器在哪个区域(控制台左上角有区域选择器)
  • 登录账号 B,看 OBS 资源包在哪个区域
  • 两者必须一致

3.2 两个 VPC 的网段不冲突

VPC 对等连接要求两个 VPC 的 CIDR(网段)不能重叠。比如 VPC-A 是 192.168.0.0/16,VPC-B 就不能也是 192.168.0.0/16,否则路由冲突。

怎么确认:

  • 登录账号 A → VPC 控制台 → 找到 Flexus 服务器所在的 VPC → 记下 CIDR
  • 登录账号 B → VPC 控制台 → 找到要用的 VPC → 记下 CIDR
  • 如果冲突,需要修改其中一个 VPC 的网段(建议改账号 B 的,因为账号 A 的 Flexus 服务器已经在跑了,改网段风险大)

3.3 准备好以下信息

信息项 从哪里获取
账号 A 的 VPC ID 和 CIDR 账号 A → VPC 控制台
账号 A 的子网 ID 和 CIDR 账号 A → VPC 控制台 → 子网
账号 B 的 VPC ID 和 CIDR 账号 B → VPC 控制台
账号 B 的子网 ID 和 CIDR 账号 B → VPC 控制台 → 子网
账号 B 的项目 ID 账号 B → 我的凭证 → 项目 ID
账号 B 的 AK/SK 账号 B → 我的凭证 → 访问密钥
OBS 桶名 账号 B → OBS 控制台

关于 AK/SK:Flexus 服务器上要用账号 B 的 AK/SK 才能操作账号 B 的 OBS 桶。这是跨账号访问的必要条件。AK/SK 相当于账号 B 的"钥匙",请妥善保管,不要泄露。


四、操作步骤(跟着做就行)

第 1 步:在账号 B 创建 VPC 终端节点(VPCEP)

这一步在账号 B 操作,目的是在 VPC-B 里创建一个访问 OBS 的内网入口。

  1. 登录账号 B,进入控制台

  2. 左上角确认区域正确(和 Flexus 服务器同一区域)

  3. 搜索 VPC 终端节点(或 VPCEP),进入终端节点控制台

  4. 点击 创建终端节点

    填写以下信息:

    参数 填什么 说明
    终端节点类型 选择 接口型 OBS 用接口型
    终端节点服务 选择 com.myhuaweicloud.obs 这是华为云 OBS 的终端节点服务名,在列表里找 OBS 相关的
    VPC 选择 VPC-B 就是你要用来和对等连接的那个 VPC
    子网 选择 VPC-B 下的子网 选一个子网即可
    虚拟私有云 保持默认 —
  5. 点击 立即创建

  6. 创建完成后,在终端节点列表中找到刚创建的节点,记下它的内网 IP 地址(形如 10.0.x.x)。这个 IP 就是 Flexus 服务器访问 OBS 的内网地址。

    ⚠️ 重要:这个内网 IP 后面要用,务必记下来。我们暂且叫它 VPCEP_IP。

  7. 配置终端节点的安全组:点击刚创建的终端节点 → 安全组 → 添加规则:

    • 方向:入方向
    • 协议:TCP
    • 端口:443
    • 源地址:填账号 A 的 VPC-A 的 CIDR(比如 192.168.0.0/16)
    • 描述:允许 Flexus 服务器通过对等连接访问

    这一步是告诉终端节点:“来自账号 A 那个网段的请求,放行。”


第 2 步:在账号 A 发起 VPC 对等连接

这一步在账号 A 操作,由账号 A 主动向账号 B 的 VPC 发起对等连接请求。

  1. 登录账号 A,进入控制台

  2. 搜索 VPC,进入虚拟私有云控制台

  3. 左侧导航栏找到 对等连接(在"VPC网络"菜单下)

  4. 点击 创建对等连接

    填写以下信息:

    参数 填什么 说明
    名称 peer-A-to-B(随便起,自己认得就行) —
    本端 VPC 选择 Flexus 服务器所在的 VPC-A —
    对端 VPC ID 填账号 B 的 VPC ID 从前提条件里准备好的信息中取
    对端租户 ID 填账号 B 的项目 ID 不是账号名,是项目 ID(一串字母数字)

    ⚠️ 对端租户 ID 就是账号 B 的项目 ID,不是账号 ID。在账号 B 的"我的凭证"页面可以看到,形如 0a1b2c3d...。

  5. 点击 确定

  6. 创建完成后,对等连接状态会显示 “待接受”。这时候需要账号 B 去接受。

    记下这个对等连接的 ID,后面配路由要用。


第 3 步:在账号 B 接受 VPC 对等连接

这一步切回账号 B 操作。

  1. 登录账号 B,进入 VPC 控制台

  2. 左侧导航栏找到 对等连接

  3. 在列表中找到状态为 “待接受” 的那条(就是账号 A 刚发起的)

  4. 点击 接受

    如果看不到待接受的请求,检查:

    • 区域是否正确(必须和账号 A 同一区域)
    • 对等连接列表是否需要切换筛选条件
  5. 接受后,状态变为 “已接受”,说明对等连接建立成功。

    记下这个对等连接的 ID(和账号 A 看到的是同一个)。


第 4 步:在账号 A 添加路由表规则

对等连接建好了,但服务器还不知道"去账号 B 的网段该走哪条路"。需要在路由表里加一条规则,告诉它"去 B 的网段,走对等连接"。

  1. 在账号 A,进入 VPC 控制台

  2. 左侧导航栏 → 路由表

  3. 找到 VPC-A 的默认路由表,点击进入

  4. 点击 添加路由

    参数 填什么 说明
    目的地址 填账号 B 的 VPC-B 的 CIDR 比如 10.0.0.0/16
    下一跳类型 选择 对等连接 —
    下一跳 选择第 2 步创建的对等连接 列表里选 peer-A-to-B
  5. 点击 确定

    这条规则的意思是:凡是发往 10.0.0.0/16(账号 B 的网段)的流量,都走对等连接过去。


第 5 步:在账号 B 添加路由表规则

账号 B 这边也要加一条回程路由,告诉 VPC-B “去账号 A 的网段,也走对等连接”。

  1. 在账号 B,进入 VPC 控制台

  2. 左侧导航栏 → 路由表

  3. 找到 VPC-B 的默认路由表,点击进入

  4. 点击 添加路由

    参数 填什么 说明
    目的地址 填账号 A 的 VPC-A 的 CIDR 比如 192.168.0.0/16
    下一跳类型 选择 对等连接 —
    下一跳 选择同一个对等连接 列表里选 peer-A-to-B
  5. 点击 确定

⚠️ 路由表必须两边都配。只配一边,请求过去了回不来,等于白搭。


第 6 步:配置安全组

安全组是最后一道门,得把门打开才能通信。

6.1 账号 A 的 Flexus 服务器安全组(出方向)

  1. 在账号 A,进入 VPC 控制台 → 安全组

  2. 找到 Flexus 服务器使用的安全组

  3. 添加出方向规则:

    参数 填什么
    协议 TCP
    端口 443
    目的地址 账号 B 的 VPC-B CIDR(如 10.0.0.0/16)

    一般默认出方向是全部放行的,如果已有"全部放行"规则,这步可以跳过。

6.2 账号 B 的 VPC 终端节点安全组(入方向)

这一步在第 1 步创建终端节点时已经配过了。如果跳过了,现在补上:

  1. 在账号 B,进入 VPC 终端节点控制台
  2. 点击刚创建的终端节点 → 安全组
  3. 确认有这条入方向规则:
    • 协议 TCP,端口 443,源地址为 VPC-A 的 CIDR

第 7 步:在 Flexus 服务器上配置 obsutil

前面六步把网络打通了,现在在 Flexus 服务器上配置 OBS 客户端工具,让它走内网访问账号 B 的桶。

7.1 安装 obsutil

SSH 登录到 Flexus 服务器(宝塔面板的终端也行):

# 下载 obsutil(先确认架构)
uname -m
# 如果输出 aarch64,用 arm64 包;如果输出 x86_64,用 amd64 包

cd /tmp
wget https://obs-community.obs.cn-north-1.myhuaweicloud.com/obsutil/current/obsutil_linux_arm64.tar.gz

# 解压
tar -xzvf obsutil_linux_arm64.tar.gz

# 移到统一位置
chmod +x obsutil
mv obsutil /usr/local/bin/

# 验证安装
obsutil version

架构确认:Flexus 服务器 ARM 和 x86 都有可能,看购买时选的规格。如果上面的下载链接不对,去华为云 obsutil 官方文档找对应架构的下载地址。

7.2 配置 obsutil 使用账号 B 的 AK/SK 和内网终端节点

obsutil config -i=<账号B的AK> -k=<账号B的SK> -e=<VPCEP_IP>

把 <VPCEP_IP> 替换为第 1 步记下的 VPC 终端节点内网 IP,比如 10.0.1.123。

⚠️ 这里用的是账号 B 的 AK 和 SK,不是账号 A 的。因为你要操作的是账号 B 的 OBS 桶。

关于 AK/SK 安全:AK/SK 是账号 B 的访问密钥,相当于账号 B 的密码。建议:

  • 使用后及时清除命令历史中的明文(history -c)
  • 或者将配置写入 obsutil 的配置文件 ~/.obsutilconfig,避免命令行明文传递
  • 不要将 AK/SK 提交到任何代码仓库

7.3 验证连通性

# 列出账号 B 的桶(能列出来说明内网通了)
obsutil ls

如果看到账号 B 的 OBS 桶列表,恭喜,内网通道已经打通!

如果报错,看后面的【常见问题】排查。


第 8 步:测试上传和下载

# 上传一个测试文件
echo "hello backup" > /tmp/test.txt
obsutil cp /tmp/test.txt obs://你的桶名/test.txt

# 下载回来
obsutil cp obs://你的桶名/test.txt /tmp/test_download.txt

# 查看内容
cat /tmp/test_download.txt

能上传能下载,说明全链路正常。


第 9 步:设置自动备份

现在通道通了,可以设置定时备份了。这里提供两种方案,选你喜欢的。

方案一:用宝塔面板自带的备份功能(推荐,最省心)

宝塔面板自带网站和数据库备份功能,支持设置保留最近 N 次备份,防止备份文件无限增长撑爆存储桶。配合 obsutil 上传到 OBS,完整流程如下:

9.1.1 配置宝塔面板的计划任务(本地备份 + 保留份数)

  1. 登录宝塔面板

  2. 左侧菜单 → 计划任务

  3. 添加任务:

    • 任务类型:备份网站
    • 网站:选择要备份的网站(或选"所有网站")
    • 执行周期:每天凌晨 3:00(按需调整)
    • 保留份数:填 7(保留最近 7 次备份,旧的自动删除)
    • 备份到:服务器磁盘(先备份到本地)
  4. 再添加一个任务备份数据库:

    • 任务类型:备份数据库
    • 数据库:选择要备份的数据库(或选"所有数据库")
    • 执行周期:每天凌晨 3:05
    • 保留份数:填 7
    • 备份到:服务器磁盘

    宝塔的备份文件默认存放在 /www/backup/site/(网站)和 /www/backup/database/(数据库)。

9.1.2 配置 obsutil 上传脚本(本地备份 → OBS 内网上传)

宝塔面板保留最近 N 份在本地,我们再写一个脚本把这些备份上传到 OBS:

sudo mkdir -p /opt/backup
sudo vim /opt/backup/sync_to_obs.sh

脚本内容:

#!/bin/bash
# ============================================
# 将宝塔面板本地备份同步到 OBS(走内网,零流量费)
# ============================================

OBS_BUCKET="你的桶名"          # ← 改成你的桶名
SITE_DIR="/www/backup/site"    # 宝塔网站备份目录
DB_DIR="/www/backup/database"  # 宝塔数据库备份目录

echo "[$(date)] 开始同步备份到 OBS..."

# 上传网站备份
if [ -d "$SITE_DIR" ]; then
    obsutil cp "$SITE_DIR" "obs://${OBS_BUCKET}/site/" -r -f -flat
    echo "[$(date)] 网站备份已同步"
fi

# 上传数据库备份
if [ -d "$DB_DIR" ]; then
    obsutil cp "$DB_DIR" "obs://${OBS_BUCKET}/database/" -r -f -flat
    echo "[$(date)] 数据库备份已同步"
fi

echo "[$(date)] 同步完成!"

-flat 参数:不加这个参数 obsutil 会把本地完整路径结构上传到 OBS,导致桶里路径很深。加了 -flat 只保留文件名,桶里更干净。

9.1.3 在宝塔面板添加同步任务

  1. 宝塔面板 → 计划任务 → 添加任务
  2. 任务类型:Shell 脚本
  3. 任务名称:同步备份到 OBS
  4. 执行周期:每天凌晨 3:30(比备份任务晚一点,等备份完成)
  5. 脚本内容:/opt/backup/sync_to_obs.sh

9.1.4 配置 OBS 桶生命周期规则(防止桶被撑爆)

虽然宝塔本地只保留最近 N 份,但 OBS 桶里如果不清理,文件会一直累积。有两种处理方式:

  • 方式一(推荐):在账号 B 的 OBS 控制台配置生命周期规则,自动删除超过 X 天的对象

    • 进入 OBS 控制台 → 点击桶名 → 基础配置 → 生命周期规则
    • 添加规则:对象前缀 site/,过期天数 30 天 → 自动删除
    • 再添加规则:对象前缀 database/,过期天数 30 天 → 自动删除
  • 方式二:在同步脚本中加 obsutil 删除命令,只保留 OBS 上最近 N 份(实现稍复杂,推荐用方式一)

💡 宝塔本地保留份数 + OBS 生命周期规则 = 双保险:本地保留最近 7 份用于快速恢复,OBS 上保留 30 天用于长期容灾,互不冲突。


方案二:纯命令行备份脚本(不依赖宝塔面板功能)

如果你不想用宝塔面板的备份功能,或者想完全自己控制,可以用以下脚本:

sudo mkdir -p /opt/backup
sudo vim /opt/backup/backup_to_obs.sh

脚本内容(根据实际情况修改):

#!/bin/bash
# ============================================
# 网站和数据库备份到 OBS(走内网,零流量费)
# ============================================

BACKUP_DIR="/tmp/backup_$(date +%Y%m%d_%H%M%S)"
OBS_BUCKET="你的桶名"          # ← 改成你的桶名
WEBSITE_DIR="/www/wwwroot"     # ← 宝塔默认网站目录,按实际改
MYSQL_USER="root"
MYSQL_PASS="你的数据库密码"     # ← 改成实际密码
DATABASES="db1 db2 db3"        # ← 改成要备份的数据库名,空格分隔
KEEP_DAYS=30                   # OBS 上保留天数

mkdir -p "$BACKUP_DIR"
echo "[$(date)] 开始备份..."

# 1. 备份网站文件
echo "[$(date)] 备份网站文件..."
tar -czf "$BACKUP_DIR/websites.tar.gz" -C "$WEBSITE_DIR" .

# 2. 备份数据库
for db in $DATABASES; do
    echo "[$(date)] 备份数据库: $db"
    mysqldump -u"$MYSQL_USER" -p"$MYSQL_PASS" --single-transaction "$db" > "$BACKUP_DIR/${db}.sql"
done

# 3. 打包并上传到 OBS(走内网终端节点)
ARCHIVE="/tmp/backup_$(date +%Y%m%d_%H%M%S).tar.gz"
tar -czf "$ARCHIVE" -C /tmp "$(basename $BACKUP_DIR)"
echo "[$(date)] 上传到 OBS..."
obsutil cp "$ARCHIVE" "obs://${OBS_BUCKET}/backup/$(date +%Y/%m/%d)/$(basename $ARCHIVE)"

# 4. 清理临时文件
rm -rf "$BACKUP_DIR" "$ARCHIVE"
echo "[$(date)] 备份完成!"

设置定时任务(crontab 或宝塔计划任务均可):

sudo chmod +x /opt/backup/backup_to_obs.sh

# crontab 方式:每天凌晨 3 点
sudo crontab -e
# 添加:
0 3 * * * /opt/backup/backup_to_obs.sh >> /var/log/obs_backup.log 2>&1

同样需要在 OBS 桶上配置生命周期规则自动清理旧备份(见方案一 9.1.4)。


第 10 步:验证备份确实走的是内网

这一步很重要,确认你确实没走公网、没产生下行流量费。

# 在 Flexus 服务器上,查看 obsutil 配置
cat ~/.obsutilconfig

# 确认 endpoint 是内网 IP(第 1 步记下的 VPCEP_IP),而不是公网域名
# 如果 endpoint 显示的是类似 obs.cn-north-4.myhuaweicloud.com 这样的公网域名,
# 说明没走内网,需要重新配置

另外,可以在华为云控制台验证:

  1. 登录账号 B → VPC 终端节点控制台 → 查看终端节点的监控指标
  2. 如果有请求量,说明流量确实走了终端节点(内网)
  3. 登录账号 B → 费用中心 → 流量账单 → 确认没有产生 OBS 公网下行流量

五、常见问题排查

Q1:obsutil ls 报错,连不上 OBS

排查步骤:

  1. 检查网络连通性:在 Flexus 服务器上 ping 终端节点的内网 IP

    ping <VPCEP_IP>
    
    • 如果 ping 不通,说明对等连接或路由有问题,回到第 4-5 步检查路由表
    • 如果能 ping 通,继续下一步
  2. 检查对等连接状态:在两个账号的 VPC 控制台确认对等连接状态都是"已接受"

  3. 检查路由表:确认两边都添加了路由规则,且目的地址和下一跳都正确

  4. 检查安全组:确认终端节点的安全组入方向允许了 VPC-A 的网段访问 443 端口

  5. 检查 obsutil 配置:

    cat ~/.obsutilconfig
    

    确认 endpoint 是终端节点的内网 IP,不是公网域名

Q2:对等连接创建后,账号 B 看不到待接受的请求

原因:最可能是区域不一致。

解决:登录账号 B,确认左上角选的区域和账号 A 一致。对等连接是区域级资源,必须在同一区域才能看到。

Q3:Flexus 服务器找不到自己的 VPC 信息

解决:

  1. 登录账号 A → Flexus 应用服务器控制台
  2. 点击你的服务器实例 → 详情
  3. 在网络信息中可以看到 VPC 名称和子网
  4. 然后去 VPC 控制台,用这个 VPC 名称找到 VPC ID 和 CIDR

Flexus 服务器的 VPC 是自动创建的,默认名称可能类似 vpc-default-xxxx。

Q4:两个 VPC 网段冲突了怎么办

解决方案:

  • 方案一(推荐):在账号 B 新建一个 VPC,使用不冲突的网段(比如 VPC-A 是 192.168.0.0/16,VPC-B 就用 10.0.0.0/16),然后在这个新 VPC 里创建终端节点
  • 方案二:修改账号 B 现有 VPC 的子网 CIDR(VPC 的 CIDR 不能改,但可以新建子网)

Q5:上传大文件很慢

排查:

  1. 确认走的是内网(内网带宽通常远大于公网带宽)

  2. obsutil 默认是单线程,大文件可以用分段上传:

    obsutil cp /path/to/bigfile obs://桶名/bigfile -f -r -u -j 10
    

    -j 10 表示 10 个并发线程,可以加快速度。

Q6:需要从 OBS 桶下载文件到 Flexus 服务器,怎么操作?

这正是这个方案的核心价值所在——恢复下载也走内网,不花公网下行流量费:

# 下载单个文件
obsutil cp obs://你的桶名/backup/2024/01/15/backup_xxx.tar.gz /tmp/

# 下载整个目录
obsutil cp obs://你的桶名/backup/ /tmp/restore/ -r -f

# 恢复网站
tar -xzvf /tmp/restore/backup_xxx.tar.gz -C /www/wwwroot/

# 恢复数据库
mysql -u root -p 数据库名 < /tmp/restore/db1.sql

全程内网传输,不花一分钱公网下行流量费。


六、费用说明:到底省了什么

先说清楚 OBS 公网流量的收费规则:

流量方向 走公网的费用 走内网的费用
上行(上传到 OBS) 免费 免费
下行(从 OBS 下载) 按量收费(约 0.5 元/GB) 免费

⚠️ 注意:OBS 公网上行(上传)本身是免费的。真正花钱的是下行(下载)。如果你只是备份上传、从不下载恢复,走公网也不花钱。但现实中你不可能永远不恢复数据——验证备份是否有效、迁移服务器、灾难恢复,都需要从 OBS 下载,这些下行流量就是费用来源。

本方案的费用对比:

费用项 走公网(传统方案) 走内网(本方案)
OBS 存储容量 资源包覆盖 ✅ 资源包覆盖 ✅
OBS 请求次数 资源包覆盖 ✅ 资源包覆盖 ✅
OBS 上行流量(备份上传) 免费 ✅ 免费 ✅
OBS 下行流量(恢复下载) 按量收费 ❌ 每月可能几十到几百元 免费 ✅
VPC 对等连接 — 免费 ✅ 同区域内对等连接免费
VPC 终端节点 — 小额费用 ⚠️ 按小时计费,约 0.01 元/小时

结论:

  • 如果你只是偶尔备份、从不下载恢复——走公网也不花钱,不需要本方案
  • 如果你需要定期从 OBS 下载文件(恢复、验证、迁移)——本方案能省掉全部公网下行流量费,每月可能省几十到几百元
  • VPC 终端节点有一个很小的按小时计费费用(每月大约几块钱),相比下行流量费可以忽略不计
  • 对等连接本身在同区域内是免费的

💡 提示:VPC 终端节点的具体价格请以华为云控制台显示为准,不同区域可能略有差异。可以在创建终端节点时查看价格说明。


七、安全注意事项

  1. AK/SK 保管:账号 B 的 AK/SK 存储在 Flexus 服务器上,确保服务器本身安全——及时更新系统补丁、设置防火墙、禁用不必要的端口

  2. OBS 桶权限:确保桶的访问策略合理,不要设成公共读写

  3. 备份加密:如果备份数据敏感,可以在上传前用 gpg 加密:

    gpg -c backup.tar.gz  # 会提示输入密码
    obsutil cp backup.tar.gz.gpg obs://桶名/backup/
    
  4. 定期清理旧备份:避免 OBS 存储费用超出资源包额度

    • 推荐用 OBS 生命周期规则自动清理(见第 9 步方案一 9.1.4)
    • 或在脚本中加入 obsutil 删除命令

八、方案扩展

8.1 如果两个账号不在同一区域

VPC 对等连接只支持同区域。如果跨区域,可以用**云连接(Cloud Connection, CC)**替代,原理类似但配置不同。

8.2 如果不止两个账号

VPC 对等连接是点对点的。如果有 3 个以上账号需要互通,建议用企业路由器(ER),它支持多 VPC 互联,配置更简洁。

8.3 如果 Flexus 服务器有多台

多台 Flexus 服务器在同一 VPC 内,共享同一条对等连接,不需要每台都配。只需要在每台服务器上配置 obsutil 指向同一个终端节点 IP 即可。

8.4 用 OBS 生命周期 + 多 AZ 实现更可靠的备份

在账号 B 的 OBS 桶上配置:

  • 多 AZ 存储:数据跨可用区冗余,单 AZ 故障不丢数据(你的资源包就是多 AZ 的)
  • 生命周期规则:30 天后转为低频访问存储,90 天后删除,控制存储成本
  • 版本管理:开启后,同名文件多次上传会保留历史版本,误覆盖也能恢复

九、完整操作清单(速查表)

按顺序做完这 10 步,就搞定了:

步骤 在哪操作 做什么 关键产出
1 账号 B 创建 VPC 终端节点(接口型,选 OBS) 终端节点内网 IP
2 账号 A 发起 VPC 对等连接 对等连接 ID
3 账号 B 接受对等连接 状态变为"已接受"
4 账号 A 添加路由表规则(目的=B网段,下一跳=对等连接) —
5 账号 B 添加路由表规则(目的=A网段,下一跳=对等连接) —
6 两边 配置安全组(放行 443 端口) —
7 Flexus 服务器 安装 obsutil,配置 B 的 AK/SK + 终端节点 IP obsutil 可用
8 Flexus 服务器 测试上传下载 验证通过
9 Flexus 服务器 设置自动备份(宝塔面板自带备份 + obsutil 同步,或纯脚本) 自动备份运行
10 控制台 验证走的是内网,无公网下行流量费 确认省钱

十、总结

这个方案的核心思路很简单:用 VPC 对等连接打通两个账号的内网,用 VPC 终端节点把 OBS 服务"拉"到内网里,让 Flexus 服务器通过内网 IP 访问 OBS,从而绕开公网下行流量费。

需要澄清一个常见误解:OBS 公网上传(备份)本来就是免费的,真正花钱的是公网下载(恢复)。所以如果你只是备份从不恢复,走公网也不花钱。但现实中你一定需要下载——验证备份、迁移数据、灾难恢复——这些下行流量才是费用大头。本方案的价值在于让下载也走内网,彻底消除下行流量费。

实际操作中容易踩的坑主要集中在三个地方:

  1. 路由表两边都要配——这是最容易漏的一步,只配一边会导致单向通,请求过去回不来
  2. 终端节点的安全组要放行对端网段——终端节点有自己的安全组,不是 VPC 的安全组,容易搞混
  3. obsutil 的 endpoint 要填内网 IP——如果填了公网域名,就白配了,还是走公网

备份策略上,推荐用宝塔面板自带的备份功能(可以设置保留最近 N 份,防止本地磁盘和 OBS 桶被撑爆),再配合 obsutil 同步到 OBS 和 OBS 生命周期规则自动清理旧文件,形成"本地快速恢复 + OBS 长期容灾"的双保险。

一旦配好,后续的备份和恢复操作和普通 obsutil 用法完全一样,只是数据走的路从公网变成了内网。你买的 OBS 资源包覆盖了存储和请求费用,对等连接同区域免费,终端节点只有每月几块钱的小额费用——相比公网下行流量费,省下的钱足够再买好几个资源包了。

希望这篇文章能帮到有同样需求的朋友。如果在操作中遇到问题,参考第五节的常见问题排查,大部分坑都在那里了。

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。