最近更新时间:2026-06-16 17:51:51
本实践主要介绍如何使用云服务器,通过自建容器的方式实现通信。
在不使用金山云容器产品的情况下,支持用户在弹性云服务器中部署容器,并实现同一个子网中不同弹性云服务器内的容器相互通信。
云服务器内部署容器,容器地址非 VPC 网络地址,通过 VPC 路由方式转发。只需简单配置路由表,就可实现容器网络的互通,灵活方便。
此场景下对网络拓扑有如下要求:
弹性云服务器在同一子网内。例如:VPC 子网网段为 192.168.0.0/24,弹性云服务器的 IP 地址为 192.168.0.2 和 192.168.0.3。
容器网段与 VPC 子网不在一个网段,同一台弹性云服务器内的容器在同一个网段,不同弹性云服务器内容器的网段不同。例如:KEC1 中容器网段为 10.0.2.0/24,KEC2 中容器网段为 10.0.3.0/24。
发送给容器的数据包下一跳为容器所在弹性云服务器。例如:发送给 10.0.2.0/24 网段的数据包下一跳为 192.168.0.2,发送给 10.0.3.0/24 网段的数据包下一跳为 192.168.0.3。
网络拓扑结构如下:
开始配置前,请确保已完成以下准备:
已规划好 VPC 子网网段及各弹性云服务器的 IP 地址。
已规划好各弹性云服务器内容器要使用的网段,且不同弹性云服务器内容器网段不能重叠。
弹性云服务器上已安装 Docker CE。
创建 VPC 及 VPC 网段。具体操作请参见创建虚拟私有网络。
创建弹性云服务器。具体方法请参见云服务器-新建实例。
在弹性云服务器上部署容器。您可以使用 Docker CE 完成容器的部署,详细操作步骤请参考第三方软件的帮助文档。
同一台 KEC 内的容器需要在同一个网段,且不同 KEC 内容器网段不能重叠。
添加 VPC 路由表信息。在 VPC 路由表中添加路由信息,让发送给 10.0.2.0/24 网段的数据包下一跳为 192.168.0.2,发送给 10.0.3.0/24 网段的数据包下一跳为 192.168.0.3,也就是让发送给容器的数据包下一跳都为容器所在 KEC。
如果容器迁移到其他弹性云服务器后,需要在 VPC 路由表中添加新的路由信息。
添加安全组规则。
为了能够通过 traceroute 命令和 ping 命令测试容器网络是否连通,为弹性云服务器的安全组添加以下规则,开放 ICMP 和 UDP,具体操作请参见添加安全组规则。
方向 | 协议/应用 | 端口 | 源地址 |
|---|---|---|---|
入方向 | ICMP | 全部 | x.x.x.x/x |
入方向 | UDP | 全部 | x.x.x.x/x |
分别在两台弹性云服务器上部署容器,通过 ping 来测试容器网络是否能连通。
在 KEC1 上创建网络连接并指定容器网段,然后创建容器:
docker network create --subnet 10.0.2.0/24 my-net
docker run -d --name nginx --net my-net -p 8080:80 nginx:alpine在 KEC2 上同样创建网络连接和容器,容器网段为 10.0.3.0/24:
docker network create --subnet 10.0.3.0/24 my-net
docker run -d --name nginx --net my-net -p 8080:80 nginx:alpine将弹性云服务器上 iptables 里面 filter 表的 FORWARD 链的默认策略设置为 ACCEPT。
Docker 为安全性将 iptables 里面 filter 表的 FORWARD 链默认策略设置成了 drop,因此需要修改。
iptables -P FORWARD ACCEPT进入 KEC1 的容器。
docker exec -it nginx /bin/sh在容器内,尝试使用 ping 和 traceroute 测试网络连通性。
如果能够 ping 通,且 traceroute 路由路径为 10.0.2.2 -> 10.0.2.1 -> 192.168.0.3 -> 10.0.3.2,与前面设置的路由转发规则一致,说明配置成功。
执行ping命令
ping 10.0.3.2预期输出示例
PING 10.0.3.2 (10.0.3.2): 56 data bytes
64 bytes from 10.0.3.2: seq=0 ttl=62 time=0.570 ms
64 bytes from 10.0.3.2: seq=1 ttl=62 time=0.343 ms
64 bytes from 10.0.3.2: seq=2 ttl=62 time=0.304 ms
64 bytes from 10.0.3.2: seq=3 ttl=62 time=0.319 ms执行traceroute 命令
traceroute -d 10.0.3.2预期输出示例
traceroute to 10.0.3.2 (10.0.3.2), 30 hops max, 46 byte packets
1 10.0.2.1 (10.0.2.1) 0.007 ms 0.004 ms 0.007 ms
2 192.168.0.3 (192.168.0.3) 0.232 ms 0.165 ms 0.248 ms
3 10.0.3.2 (10.0.3.2) 0.366 ms 0.308 ms 0.158 ms纯净模式
