多个kvm虚拟机跨宿主机通信

多个kvm虚拟机跨宿主机通信

有些场景可能需要大量的虚拟机,一台宿主机上的虚拟机可能会不够,需要多个宿主机上的多个虚拟机构成一个集群,各个虚拟机之间要求能互相通信,通常有2种解决方案:

第一种方案

虚拟机使用“桥接模式”,这种情况下虚拟机和宿主机共用一个网桥,虚拟机和宿主机其实在同一个的网络,各个虚拟机之间也就可以直接互相通信了,缺点就是每个虚拟机要占用一个宿主机所在物理网络的IP,虚拟机如果数量大,可能出现IP不够用的情况。更多情况下网管可能不会允许虚拟机直接占用宿主机物理网络IP。
多个kvm虚拟机跨宿主机通信_第1张图片

第二种方案

虚拟机使用“NAT模式”,虚拟机网桥需要借助宿主机网卡通过NAT地址转换来实现上网,这种情况下虚拟机不占用宿主机网络的IP,宿主机的一个网桥就代表一个网络,相同网桥的虚拟机之间可以互相通信,跨宿主机的多个虚拟机不在一个网络,需要借助宿主机配置静态路由才能实现互相访问,下面就基于这种方案说明。
多个kvm虚拟机跨宿主机通信_第2张图片
环境如上图所示:
有2台物理机:
物理机1的IP为192.168.137.79,虚拟机网络:192.168.122.0/24
物理机2的IP为192.168.137.80,虚拟机网络:192.168.123.0/24

物理机和虚拟机的系统都为Centos7.9,虚拟化软件使用kvm,物理机必须在同一个网络里面

1、宿主机关闭防火墙和Selinux

systemctl stop firewalld
setenforce 0

这里有个坑,关闭firewalld之后,kvm还有2条iptables规则也会拦截数据包转发,必须删除
多个kvm虚拟机跨宿主机通信_第3张图片

iptables -t filter -D FORWARD 5
iptables -t filter -D FORWARD 4
iptables -t filter -nL --line-num

2、宿主机配置静态路由

宿主机1配置

# 开启路由转发
echo 1 > /proc/sys/net/ipv4/ip_forward
# 添加静态路由
ip route add 192.168.123.0/24 via 192.168.137.80

宿主机2配置

# 开启路由转发
echo 1 > /proc/sys/net/ipv4/ip_forward
# 添加静态路由
ip route add 192.168.122.0/24 via 192.168.137.79

配置好静态路由后多个虚拟机之间就可以跨宿主机即互相通信了。

你可能感兴趣的:(网络,linux,服务器)