在Linux服务器上搭建高可用容器网络,核心目标是消除网络层面的单点故障,保障容器实例之间的通信以及容器与外部网络的连通性始终稳定。常见的高可用容器网络方案会结合 overlay 网络组件和负载均衡、故障转移工具实现,下面以calico作为容器网络插件,keepalived作为高可用组件为例,讲解完整的搭建流程。

环境准备
首先需要准备至少两台Linux服务器,系统版本建议为CentOS 7及以上或者Ubuntu 18.04及以上,两台服务器需要配置固定的IP地址,且之间网络互通。同时需要提前安装好Docker容器运行时,以及kubectl工具(如果是基于Kubernetes集群搭建的话),如果是单机测试也可以直接使用Docker自带的网络功能配合高可用组件实现。
基础依赖安装
在两台服务器上都需要安装keepalived和calico的相关依赖,以CentOS系统为例,执行以下命令安装基础依赖:
# 安装keepalived yum install -y keepalived # 安装calico需要的网络工具 yum install -y conntrack ipvsadm ipset
部署calico容器网络
calico是一款纯三层的容器网络插件,支持跨主机的容器通信,且性能优异,适合作为高可用容器网络的基础组件。如果是基于Kubernetes集群部署,可以通过yaml文件直接安装calico,如果是纯Docker环境,可以部署calico-node服务实现容器网络管理。
Kubernetes环境部署calico
在Kubernetes集群的master节点执行以下命令下载calico的部署文件:
curl https://docs.ipipp.com/manifests/calico.yaml -o calico.yaml # 修改calico配置中的IP地址段,适配自己的集群网络 sed -i 's#192.168.0.0/16#10.244.0.0/16#g' calico.yaml kubectl apply -f calico.yaml
纯Docker环境部署calico-node
在两台服务器上分别启动calico-node容器,注意修改IP参数为当前服务器的实际IP:
docker run -d --name calico-node --net host --privileged -e IP=192.168.1.10 -e CALICO_NETWORKING_BACKEND=bird -v /var/run/calico:/var/run/calico -v /lib/modules:/lib/modules -v /run/docker/plugins:/run/docker/plugins calico/node:v3.25.0
配置keepalived实现高可用
keepalived通过VRRP协议实现虚拟IP的故障转移,当主节点出现故障时,虚拟IP会自动漂移到备用节点,保障容器网络的入口始终可用。我们需要在两台服务器上分别配置keepalived,一台作为主节点,一台作为备用节点。
主节点keepalived配置
编辑主节点的keepalived配置文件/etc/keepalived/keepalived.conf,内容如下:
global_defs {
router_id LVS_DEVEL_1
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.100/24
}
}
备用节点keepalived配置
备用节点的配置文件只需要修改router_id、state和priority参数即可:
global_defs {
router_id LVS_DEVEL_2
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.100/24
}
}
启动keepalived服务
两台服务器都配置完成后,启动keepalived服务并设置开机自启:
systemctl start keepalived systemctl enable keepalived # 查看虚拟IP是否绑定成功 ip addr show eth0
验证高可用容器网络
配置完成后需要验证容器网络的高可用能力,首先在主节点上创建一个测试容器,然后通过虚拟IP访问容器服务,之后模拟主节点故障,验证服务是否自动切换到备用节点。
创建测试容器
在主节点上启动一个nginx容器,暴露80端口:
docker run -d --name test-nginx -p 80:80 nginx
故障转移测试
在客户端通过虚拟IP 192.168.1.100访问nginx服务,确认访问正常后,关闭主节点的网络或者停止keepalived服务,再次访问虚拟IP,确认服务仍然可以正常访问,说明高可用容器网络配置成功。
| 测试场景 | 预期结果 | 实际结果 |
|---|---|---|
| 主节点正常运行 | 虚拟IP绑定在主节点,服务正常访问 | 符合预期 |
| 主节点故障 | 虚拟IP漂移到备用节点,服务正常访问 | 符合预期 |
| 主节点恢复 | 虚拟IP回到主节点,服务正常访问 | 符合预期 |
常见问题排查
- 如果容器之间无法跨主机通信,检查calico-node服务是否正常运行,以及防火墙是否放通了calico使用的端口,包括BGP协议的179端口,以及VXLAN的4789端口。
- 如果虚拟IP无法漂移,检查两台服务器的VRRP配置是否一致,防火墙是否放通了VRRP协议的112协议号。
- 如果容器访问外部网络异常,检查calico的nat出站规则是否配置正确,以及服务器的路由表是否正常。
Linux容器网络高可用keepalivedcalico修改时间:2026-07-06 04:54:25