最近更新时间:2026-07-24 11:19:57
本实践主要介绍如何利用金山云VPC、KEC、SLB等产品搭建企业内网服务中台架构。
本实践中的架构采用零公网入口设计,通过私网负载均衡统一接收内部服务间调用流量(东西向流量),后端云服务器按业务模块分属不同子网实现网络隔离,并跨可用区部署以实现机房级容灾;云数据库采用主实例+只读实例架构;NAT网关仅绑定管理子网,为运维跳板机提供唯一、可控的出网能力,业务服务器无外网访问权限,满足企业内网安全要求。
拓扑结构如下:
层级 | 产品 | 作用 |
|---|---|---|
网络隔离 | VPC + 多子网 | 按业务模块划分子网,实现东西向流量隔离与规划 |
运维入口 | 跳板机KEC | 唯一公网入口,通过SSH跳转管理内网资源 |
网络出口 | NAT 网关 | 仅管理子网出网使用,业务子网无出网路由 |
服务发现 | 私网 SLB | 各业务模块的调用入口 |
计算层 | KEC 云服务器 | 按模块分属不同子网,纯私网部署 |
资源 | CIDR | 地域 | 可用区 | 用途 |
|---|---|---|---|---|
VPC(dain_vpc) | 192.168.0.0/16 | 华北1(北京) | - | 整体网络空间 |
私网共享型SLB(dn_subnetZH) | 192.168.69.0/24 | - | 部署私网SLB | |
私网子网A(dn_subnet3) | 192.168.68.0/24 | A | 部署KEC、KRDS | |
数据库终端子网(dn_subnetZH) | 192.168.69.0/24 | A | 主库 | |
数据库终端子网(dn_subnetZH) | 192.168.69.0/24 | B | 只读RDS | |
私网子网B(dtest_subnet) | 192.168.70.0/24 | B | 部署KEC、KRDS | |
私网子网C(dn_subnet2) | 192.168.67.0/24 | A | 跳板机 |
已完成金山云账号注册并完成实名认证。
具备 VPC、KEC、KRDS、SLB、NAT 网关产品的创建权限(默认主账号拥有全部权限)。
登录网络控制台,在左侧导航选择 虚拟私有网络(VPC)。
进入 VPC 列表页,点击 新建VPC。
在弹出的提示窗口中,根据环境与网络规划,参考如下示例,配置各项参数。
配置项 | 示例及说明 |
|---|---|
名称 | dain_vpc |
IPv4网段 | 192.168.0.0/16 |
IPv6网段 | 勾选 |
子网1 | 对应网络规划中的私网子网A。
|
子网2 | 对应网络规划中的私网子网B。
|
子网3 | 对应网络规划中的数据库和负载均衡终端子网。
|
子网4 | 对应网络规划中的私网子网C。
|
点击确定,完成虚拟网络VPC和子网的创建。
在华北1(北京)可用区 A 进行云服务器创建,该云服务器将作为跳板机使用,是唯一的公网入口。
登录KEC控制台,在左侧导航栏,选择实例,点击+新建。
网络配置选择步骤一提前创建好的VPC网络并关联私网子网C(dn_subnet2),其他参数参考KEC用户指南进行设置即可。
创建成功的跳板机云服务器如下。
根据前文操作,在华北1(北京)可用区 A 和可用区 B ,创建业务云服务器。纯私网部署,分属于不同的子网。
登录KEC控制台,在左侧导航栏,选择实例,点击+新建。
依次在可用区A和可用区B,分别创建云服务器,参数要求如下,详细操作可参考KEC用户指南进行配置。
业务云服务器1:所属可用区B,网络配置选择步骤一提前创建好的VPC网络并关联私网子网B(dn_subnet)。
业务云服务器2:所属可用区A,网络配置选择步骤一提前创建好的VPC网络并关联私网子网A(dn_subnet3)。
创建成功的业务云服务器如下。
返回网络控制台,在左侧导航选择NAT网关 > NAT1.0。
在页面顶部,选择步骤一创建的 VPC,点击 新建NAT。
在新建NAT页面,IP地址数量选择1,虚拟私有网络为dain_vpc,其他参数自定义。
点击立即购买,完成NAT的创建。
点击新建的NAT,进入其详情页面,选择 SNAT页签,绑定前文创建的跳板机云服务器。
选择跳板机云服务器所在的子网(dn_subnet2),并绑定。
使用VNC连接跳板机云服务器,执行如下操作,测试跳板机出网。
使用VNC分别连接业务云服务器,执行如下操作,只能实现内网互通。
在NAT网关详情页面,选择 DNAT页签,点击创建DNT规则。
配置跳板机云服务器的远程端口,参数示例如下。
在本地终端,执行 telent 命令,测试相应端口能够正常连接。
通过过公网连接跳板机云服务器,再通过内网连接两台服务主机
在业务服务器1(daitest1)上执行如下命令,部署相应业务。
mkdir -p /opt/dtest1 && cd /opt/dtest1
cat > index.html << 'EOF'
User Service on daitest1
EOF
# 使用Python内置HTTP模块启动服务(无需安装任何依赖)
nohup python3 -m http.server 8080 > http.log 2>&1 &
# 验证监听状态
netstat -tlnp | grep 8080
# 应显示 0.0.0.0:8080 处于监听状态在业务服务器2(daitest2)上执行如下命令,部署相应业务。
若没有8080端口没有起来,可能该镜像创建的主机默认没有python3,可以用python2。
mkdir -p /opt/dtest2 && cd /opt/dtest2
cat > index.html << 'EOF'
order Service on daitest2
EOF
# 使用Python内置HTTP模块启动服务(无需安装任何依赖)
nohup python3 -m http.server 8080 > http.log 2>&1 &
# 验证监听状态
netstat -tlnp | grep 8080
# 应显示 0.0.0.0:8080 处于监听状态登录云数据库 MySQL控制台,点击 新建实例。
在实例创建页面,参考如下示例,依次创建主实例和只读实例,配置各项参数。
主实例:
地域:本示例为华北1(北京)。
实例类型:选择单机版。
可用区:选择可用区A。
网络配置:选择步骤一创建的 VPC 和终端子网。
其他配置按个人需求选择。
只读实例:
地域:本示例为华北1(北京)。
实例类型:选择只读RDS。
可用区:选择可用区B。
网络配置:选择步骤一创建的 VPC 和终端子网。
其他配置按个人需求选择。
创建成功的实例如下。
返回网络控制台,在左侧导航选择负载均衡 > 共享型,点击新建。
在共享负载均衡创建页面,参考以下示例,配置各项参数。
地域:本示例为华北1(北京)。
虚拟私有网络:选择步骤一创建的 VPC。
网络类型:选择私网。
其他配置按个人需求选择。
点击立即购买,完成SLB的创建。
在左侧导航栏,选择共享型>服务器组。
在服务器组(共享型)列表页面,点击新建,参考以下示例完成参数配置,此处绑定业务云服务器。
在后端服务器列表中,两台业务KEC 的健康状态应显示为健康(约等待几十秒健康检查生效)。
返回共享型实例列表页,点击新建的负载均衡名称/ID,进入其详情页面。
选择监听器页签,点击 新建,参考以下示例,配置各项参数。此处需创建两个监听器,端口分别为8080和8081。
监听器创建完成后,等待端口健康状态,受VPC安全组影响,需要放开8080端口。
从跳板机登录 daitest1,执行如下命令,验证东西向流量。
# 服务A 调用 服务B(通过私网SLB)
curl http://192.168.69.2:8081
# 预期返回:order Service on daitest2从跳板机登录 daitest2,执行如下命令。
# 服务B 调用 服务A(通过私网SLB)
curl http://192.168.69.2:8080
# 预期返回:User Service on daitest1登录跳板机,执行如下命令,安装MySQL客户端。
# 将负载均衡的snat绑定服务主机
sudo yum install -y mysql登录主数据库。
# 内网连接数据库(写请求应自动路由到主库)
mysql -h 192.168.69.250 -P 3306 -u admin -p验证写操作。
-- 查看当前连接的数据库节点主机名
SELECT @@hostname;
-- 预期:返回主库主机名(如 krds-internal-master)
-- 创建测试数据库和表
CREATE DATABASE IF NOT EXISTS test_db;
USE test_db;
CREATE TABLE IF NOT EXISTS rw_test (id INT PRIMARY KEY, name VARCHAR(50));
-- 执行写操作
INSERT INTO rw_test VALUES (1, 'test-write');
-- 预期:插入成功
-- 退出
EXIT;登录只读数据库。
# 内网连接读数据库
mysql -h 192.168.69.172 -P 3306 -u admin -p验证数据库读取操作。
USE test_db;
-- 查看当前连接的数据库节点主机名
SELECT @@hostname;
-- 预期:返回只读实例主机名,与写操作时的主机名不同
-- 执行读操作
SELECT * FROM rw_test;
-- 预期:返回 (1, 'test-write'),数据已同步
-- 退出
EXIT;在只读数据库中,执行如下命令,验证其不可写入。
USE test_db;
INSERT INTO rw_test VALUES (2, 'should-fail');
-- 预期:报错,提示只读实例不接受写操作
EXIT;方向 | 协议 | 端口 | 来源 | 说明 |
|---|---|---|---|---|
入站 | TCP | 8080 | (本地网络+内网网段) | 业务端口 |
入站 | TCP | 22 | (本地网络+内网网段) | SSH(仅VPC内) |
出站 | ip | - | 0.0.0.0/0 | 默认允许 |
纯净模式
