CentOS上配置Overlay网络(以Docker为例)
Overlay网络是Docker实现跨主机容器通信的核心网络模式,通过VXLAN/GRE隧道封装技术,让不同主机上的容器像在同一局域网内一样通信。以下是CentOS系统上的详细配置步骤:
系统与内核要求
安装Docker
使用YUM仓库安装Docker CE(社区版):
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/
sudo yum install -y docker-ce docker-ce-cli containerd.io
sudo systemctl start docker && sudo systemctl enable docker # 启动并设置开机自启
配置Docker存储驱动(可选但推荐)
编辑/etc/docker/daemon.json,指定overlay2为存储驱动(Docker默认推荐):
{
"storage-driver": "overlay2",
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {"max-size": "100m"}
}
重启Docker使配置生效:
sudo systemctl restart docker
验证内核支持Overlay
加载Overlay内核模块:
sudo modprobe overlay
使用docker network create命令创建Overlay网络,需指定驱动类型、子网、网关等参数:
sudo docker network create \
--driver overlay \ # 指定Overlay驱动
--subnet=10.0.0.0/24 \ # Overlay网络子网(自定义,需避免与其他网络冲突)
--gateway=10.0.0.1 \ # Overlay网络网关(自定义)
my-overlay-network # 网络名称(自定义)
参数说明:
--driver overlay:必须参数,指定使用Overlay网络驱动;--subnet:定义Overlay网络的IP段(如10.0.0.0/24),用于容器IP分配;--gateway:Overlay网络的网关地址(如10.0.0.1),容器通过该网关访问外部网络。有两种方式将容器连接到Overlay网络:
使用--network参数指定Overlay网络:
sudo docker run -d --name container1 --network my-overlay-network nginx
sudo docker run -d --name container2 --network my-overlay-network nginx
上述命令会启动两个Nginx容器,并自动分配10.0.0.0/24网段内的IP地址。
使用docker network connect命令:
sudo docker network connect my-overlay-network existing-container
其中existing-container是已运行的容器名称或ID。
查看Overlay网络列表
确认网络已创建:
docker network ls
输出应包含my-overlay-network(驱动为overlay)。
查看网络详细信息
获取Overlay网络的子网、网关、容器连接状态:
docker network inspect my-overlay-network
输出中的Containers字段会显示已连接的容器及其IP地址。
测试容器间通信
进入其中一个容器(如container1),ping另一个容器(如container2):
sudo docker exec -it container1 ping $(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container2)
若能收到回复,说明Overlay网络通信正常。
若需要在多台CentOS主机上实现容器通信,需额外配置Docker守护进程和密钥管理:
编辑每台主机的/etc/docker/daemon.json,添加以下参数:
{
"cluster-store": "consul://<consul-server-ip>:8500", # 服务发现组件(如Consul)地址
"cluster-advertise": "<当前主机IP>:2376" # 当前主机的Docker API地址
}
说明:
cluster-store:用于存储集群状态的服务发现工具(如Consul、Etcd);cluster-advertise:当前主机的Docker API监听地址(需开放2376端口)。重启Docker使配置生效:
sudo systemctl restart docker
若使用Swarm模式,可通过以下命令初始化集群(在管理节点执行):
sudo docker swarm init --advertise-addr <管理节点IP>
加入工作节点(在每个工作节点执行,使用管理节点输出的命令):
sudo docker swarm join --token <TOKEN> <管理节点IP>:2377
Swarm模式下,Overlay网络会自动跨主机可用。
在主机A上启动容器并连接到Overlay网络:
sudo docker run -d --name containerA --network my-overlay-network nginx
在主机B上启动容器并连接到同一Overlay网络:
sudo docker run -d --name containerB --network my-overlay-network nginx
进入containerA,pingcontainerB的IP地址,验证跨主机通信。
防火墙配置
Overlay网络依赖VXLAN隧道(UDP 4789端口),需确保防火墙允许该端口流量:
sudo firewall-cmd --add-port=4789/udp --permanent
sudo firewall-cmd --reload
SELinux配置
若启用了SELinux,需设置为permissive模式或添加相应策略:
sudo setenforce 0 # 临时关闭(测试用)
或修改/etc/selinux/config文件,将SELINUX=enforcing改为SELINUX=permissive。
性能优化
通过以上步骤,即可在CentOS系统上成功配置Overlay网络,实现跨主机的容器通信。根据实际需求,可选择手动配置或结合Kubernetes等编排工具实现更复杂的网络场景。