云计算之5---KVM架构
实现桥接与仅主机模式,并构建叠加虚拟机的隧道虚拟通道
架构图:
1、选择两个虚拟机,每个虚拟机有两个仅主机模式和两个桥接模式,宿主机一安装叠加虚拟机参考以上安装方式:
yum install bridge-utils -y # centos7.5 以上版本就自带此软件,需要进行桥接绑定使用。
配置宿主机一的桥接模式和仅主机模式
现在一般的企业都会使用双网卡接入,这样既能添加网络带宽,同时又能做相应的冗余,可以说是好处多多。而一般企业都会使用linux操作系统下自带的网卡绑定模式,当然现在网卡产商也会出一些针对windows操作系统网卡管理软件来做网卡绑定(windows操作系统没有网卡绑定功能 需要第三方支持),一共有其中方式,其中比较长用的是0/1/6:
网卡绑定案例,先做绑定,然后再把绑定后的网卡配置成桥接:
1、第一组配置,将ens33和ens37绑定为bond0:
(1)先创建bond0配置那文件步骤及内容如下:
[root@centos-7network-scripts]#pwd
/etc/sysconfig/network-scripts
[root@centos-7network-scripts]#cat ifcfg-bond0
BOOTPROTO=static
NAME=bond0
DEVICE=bond0
ONBOOT=yes
BONDING_MASTER=yes
BONDING_OPTS="mode=1 miimon=100" #指定绑定类型为1及链路状态监测间隔时间
BRIDGE=br0 #桥接到br0
(2)配置br0的IP地址,将bond0绑定在br0上。
[root@centos-7network-scripts]#cat ifcfg-br0
TYPE=Bridge
BOOTPROTO=static
NAME=br0
DEVICE=br0
ONBOOT=yes
IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=192.168.1.1
(3)配置ens33
[root@centos-7network-scripts]#cat ifcfg-ens33
BOOTPROTO=static
NAME=ens33
DEVICE=ens33
ONBOOT=yes
NM_CONTROLLED=no
MASTER=bond0
USERCTL=no
SLAVE=yes
(4)配置ens37
[root@centos-7network-scripts]#cat ifcfg-ens37
BOOTPROTO=static
NAME=ens37
DEVICE=ens37
ONBOOT=yes
NM_CONTROLLED=no
MASTER=bond0
USERCTL=no
SLAVE=yes
2、将第二组仅主机模式的ens38和ens39绑定在bond1上
(1)先配置bond1的配置文件
[root@centos-7network-scripts]#cat ifcfg-bond1
BOOTPROTO=static
NAME=bond1
DEVICE=bond1
ONBOOT=yes
BONDING_MASTER=yes
BONDING_OPTS="mode=1 miimon=100"
BRIDGE=br1
(2)配置br1的IP地址,并将bond1绑定在br1上
[root@centos-7network-scripts]#cat ifcfg-br1
TYPE=Bridge
BOOTPROTO=static
NAME=br1
DEVICE=br1
ONBOOT=yes
IPADDR=10.20.200.100
NETMASK=255.255.255.0
(3)将ens38绑定在bond1上
[root@centos-7network-scripts]#cat ifcfg-ens38
BOOTPROTO=static
NAME=ens38
DEVICE=ens38
ONBOOT=yes
NM_CONTROLLED=no
MASTER=bond1
USERCTL=no
SLAVE=yes
(4)将ens39绑定在bond1上
[root@centos-7network-scripts]#cat ifcfg-ens39
BOOTPROTO=static
NAME=ens39
DEVICE=ens39
ONBOOT=yes
NM_CONTROLLED=no
MASTER=bond1
USERCTL=no
SLAVE=yes
(5)修改完配置文件之后先将NetworkManager网卡关闭,否则会存在无法远程连接的风险。
[root@rs1~]#systemctl stop NetworkManager
[root@rs1~]#systemctl disable NetworkManager
3、在vm1虚拟机上配置
(1)将vm1虚拟机的网卡设置为桥接的br0上,(vm1虚拟机安装过程见上面)
virt-manager工具打开远程连接进行设置,选择到br0桥接,并点击右下角的apply应用。
(2)在内网添加一个网络设备,然后将此网络设备绑定在br1(仅主机模式)模式下,并选择virtio模式(半虚拟化)
(3)配置eth0的IP地址,将其配置为外网地址
[root@localhost network-scripts]# cat ifcfg-eth0
BOOTPROTO=static
DEVICE="eth0"
ONBOOT="yes"
IPADDR=192.168.1.200
PREFIX=24
GATEWAY=192.168.1.1
DNS1=192.168.1.1
配置eth1的IP地址,配置为内网地址
[root@localhost network-scripts]# cat ifcfg-eth1
BOOTPROTO=static
DEVICE="eth1"
ONBOOT="yes"
IPADDR=10.20.200.200
PREFIX=24
安装完成之后需要安装连接网络的包
yum install net-tools -y
3、安装vm2虚拟机
1、配置vm2之前先要安装vm2虚拟机系统,将安装好的vm1虚拟机关闭,然后将安装好的vm1虚拟机镜像复制一份,再开始安装,在安装界面只需要强制关机,然后重新启动,此时镜像就会进行引导,将系统自动安装上。
[root@centos-7images]#cp CentOS-7-x86_64.qcow2 CentOS.qcow2
开始安装系统,只需要将系统名称修改一下,磁盘路径修改一下即可。
virt-install --virt-type kvm \
--name linux777 \ 修改系统名称
--memory 1024 \
--vcpus=2 \
--autostart \
--cdrom=/usr/local/src/CentOS-7-x86_64-Minimal-1908.iso \
--disk path=/var/lib/libvirt/images/CentOS.qcow2 \ 磁盘路径修改一下即可
--network bridge=br0 \
--graphics vnc,listen=0.0.0.0 \
--noautoconsole
然后用virt-manager命令打开界面,强制关机,重启之后就会自动安装上系统。
安装完成之后需要安装连接网络的包
yum install net-tools -y
4、在vm2虚拟机上配置(作为内网后端服务,外网无法直接访问,保证安全性)
1、开始配置vm2的网卡及IP地址,先将网卡改为桥接模式,为了安装httpd服务
2、配置IP地址,先改为自动获取,可以连接外网,安装httpd服务
[root@localhost network-scripts]# cat ifcfg-eth0
BOOTPROTO=dhcp
DEVICE="eth0"
ONBOOT="yes"
#IPADDR=10.20.200.201
#PREFIX=24
3、然后启动vm2虚拟机,安装httpd服务,创建一个显示页面
[root@centos-7~]#yum install httpd -y
[root@centos-7~]#echo 10.20.200.201 > /var/www/html/index.html
[root@centos-7~]#systemctl start httpd
4、配置完httpd服务之后再将IP地址改为静态内网IP地址,并将网卡绑定在br1上,设置为仅主机模式。
[root@localhost network-scripts]# cat ifcfg-eth0
BOOTPROTO=none
DEVICE="eth0"
ONBOOT="yes"
IPADDR=10.20.200.201
PREFIX=24
配置宿主机二的桥接模式和仅主机模式
1、第一组配置,将ens33和ens37绑定为bond0:
只需要将宿主机一的bond0/1、br0/1、ens33/37/38/39配置文件都复制到本主机一份,只需要修改br0和br1的IP地址即可。
[root@centos-7network-scripts]#scp ifcfg-ens* ifcfg-b* 192.168.1.201:/etc/sysconfig/network-scripts/
(1)先创建bond0配置那文件步骤及内容如下:
[root@centos-7network-scripts]#pwd
/etc/sysconfig/network-scripts
[root@centos-7network-scripts]#cat ifcfg-bond0
BOOTPROTO=static
NAME=bond0
DEVICE=bond0
ONBOOT=yes
BONDING_MASTER=yes
BONDING_OPTS="mode=1 miimon=100" #指定绑定类型为1及链路状态监测间隔时间
BRIDGE=br0 #桥接到br0
(2)配置br0的IP地址,将bond0绑定在br0上。
[root@centos-7network-scripts]#cat ifcfg-br0
TYPE=Bridge
BOOTPROTO=static
NAME=br0
DEVICE=br0
ONBOOT=yes
IPADDR=192.168.1.101
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=192.168.1.1
(3)配置ens33
[root@centos-7network-scripts]#cat ifcfg-ens33
BOOTPROTO=static
NAME=ens33
DEVICE=ens33
ONBOOT=yes
NM_CONTROLLED=no
MASTER=bond0
USERCTL=no
SLAVE=yes
(4)配置ens37
[root@centos-7network-scripts]#cat ifcfg-ens37
BOOTPROTO=static
NAME=ens37
DEVICE=ens37
ONBOOT=yes
NM_CONTROLLED=no
MASTER=bond0
USERCTL=no
SLAVE=yes
2、将第二组仅主机模式的ens38和ens39绑定在bond1上
(1)先配置bond1的配置文件
[root@centos-7network-scripts]#cat ifcfg-bond1
BOOTPROTO=static
NAME=bond1
DEVICE=bond1
ONBOOT=yes
BONDING_MASTER=yes
BONDING_OPTS="mode=1 miimon=100"
BRIDGE=br1
(2)配置br1的IP地址,并将bond1绑定在br1上
[root@centos-7network-scripts]#cat ifcfg-br1
TYPE=Bridge
BOOTPROTO=static
NAME=br1
DEVICE=br1
ONBOOT=yes
IPADDR=10.20.200.101
NETMASK=255.255.255.0
(3)将ens38绑定在bond1上
[root@centos-7network-scripts]#cat ifcfg-ens38
BOOTPROTO=static
NAME=ens38
DEVICE=ens38
ONBOOT=yes
NM_CONTROLLED=no
MASTER=bond1
USERCTL=no
SLAVE=yes
(4)将ens39绑定在bond1上
[root@centos-7network-scripts]#cat ifcfg-ens39
BOOTPROTO=static
NAME=ens39
DEVICE=ens39
ONBOOT=yes
NM_CONTROLLED=no
MASTER=bond1
USERCTL=no
SLAVE=yes
(5)修改完配置文件之后先将NetworkManager网卡关闭,否则会存在无法远程连接到主机的风险。
[root@rs1~]#systemctl stop NetworkManager
[root@rs1~]#systemctl disable NetworkManager
(6)配置完IP地址之后在宿主机二上ping宿主机一仅主机模式的IP地址,如果能ping通,则网卡绑定搭建完成。
4、开始在宿主机二上安装vm3虚拟机
1、安装前先安装工具包
yum install qemu-kvm qemu-kvm-tools libvirt virt-manager virt-install -y
2、启动libvirtd服务,并设置为开机启动
[root@rs1src]#systemctl start libvirtd
[root@rs1src]#systemctl enable libvirtd
3、在将宿主机一的镜像文件复制到宿主机二上,并开始安装虚拟机:
scp /usr/local/src/CentOS-7-x86_64-Minimal-1908.iso 192.168.1.201:/usr/local/src/
开始安装系统:
virt-install --virt-type kvm \
--name linux77 \
--memory 1024 \
--vcpus=2 \
--autostart \
--cdrom=/usr/local/src/CentOS-7-x86_64-Minimal-1908.iso \
--disk path=/var/lib/libvirt/images/CentOS-7-x86_64.qcow2 \
--network bridge=br0 \
--graphics vnc,listen=0.0.0.0 \
--noautoconsole
4、在图形界面上执行命令,进行安装linux叠加虚拟机系统
[root@rs1src]#yum groupinstall "GNOME Desktop" -y
[root@rs1src]#virt-manager
5、安装完系统之后,设置网卡类型,一个绑定在br0(桥接模式),一个选择br1(仅主机模式),并都选择virtio(半虚拟化模式)
5、在vm3虚拟机配置
1、virt-manager工具打开远程连接进行设置,选择到br0桥接,并点击右下角的apply应用。
2、在内网添加一个网络设备,然后将此网络设备绑定在br1模式下,并选择virtio模式(半虚拟化)
3、配置eth0的IP地址,将其配置为外网地址
[root@localhost network-scripts]# cat ifcfg-eth0
BOOTPROTO=static
DEVICE="eth0"
ONBOOT="yes"
IPADDR=192.168.1.202
PREFIX=24
GATEWAY=192.168.1.1
DNS1=192.168.1.1
配置eth1的IP地址,配置为内网地址(仅主机模式)
[root@localhost network-scripts]# cat ifcfg-eth1
BOOTPROTO=static
DEVICE="eth1"
ONBOOT="yes"
IPADDR=10.20.200.202
PREFIX=24
设置完网卡,并配置完IP地址之后,安装net-tools网络包
[root@localhost network-scripts]# yum install net-tools -y
6、安装vm4虚拟机
将安装好的vm3虚拟镜像关机,然后将安装好的叠加虚拟机镜像复制一份,再开始安装,在安装界面只需要强制关机,然后重新启动就会将系统自动安装上。
cp CentOS-7-x86_64.qcow2 CentOS.qcow2
开始安装系统,只需要将系统名称修改一下,磁盘路径修改一下即可。
virt-install --virt-type kvm \
--name linux37 \ 修改系统名称
--memory 1024 \
--vcpus=2 \
--autostart \
--cdrom=/usr/local/src/CentOS-7-x86_64-Minimal-1908.iso \
--disk path=/var/lib/libvirt/images/CentOS.qcow2 \ 磁盘路径修改一下即可
--network bridge=br0 \
--graphics vnc,listen=0.0.0.0 \
--noautoconsole
然后用virt-manager命令打开界面,强制关机,重启之后就会自动安装上系统。
7、在vm4虚拟机上配置(作为内网后端服务,外网无法直接访问,保证安全性)
1、开始配置vm4的网卡及IP地址,先将网卡改为桥接模式,为了安装httpd服务
2、配置IP地址,先改为自动获取,可以连接外网,安装httpd服务
[root@localhost network-scripts]# cat ifcfg-eth0
BOOTPROTO=dhcp
DEVICE="eth0"
ONBOOT="yes"
#IPADDR=10.20.200.203
#PREFIX=24
3、然后启动vm2虚拟机,安装httpd服务,创建一个显示页面
[root@centos-7~]#yum install httpd -y
[root@centos-7~]#echo 10.20.200.201 > /var/www/html/index.html
[root@centos-7~]#systemctl start httpd
配置完成之后需要安装连接网络的包
yum install net-tools -y
4、配置完httpd服务之后再将IP地址改为静态内网IP地址,并将网卡绑定在br1上,使用仅主机模式,配置完成ip地址重启network 。
[root@localhost network-scripts]# cat ifcfg-eth0
BOOTPROTO=none
DEVICE="eth0"
ONBOOT="yes"
IPADDR=10.20.200.203
PREFIX=24
注意:此时所有的基本架构搭建完,下来我们在vm1和vm3上安装haproxy和keepalived,来实现高可用和调度到后端内网服务器上。
8、在vm1上安装Haproxy和keepalived,并配置
1、安装haproxy和keepalived包
yum install haproxy keepalived -y
2、开始配置keepalived文件,设置为主节点:vi /etc/keepalived/keepalived.conf
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
vrrp_iptables
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
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.248 dev eth0 label eth0:0 绑定vip地址
}
}
3、配置haproxy文件:vi /etc/haproxy/haproxy.cfg
global
log 127.0.0.1 local2
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 4000
user haproxy
group haproxy
daemon
# turn on stats unix socket
stats socket /var/lib/haproxy/stats
defaults
mode http
log global
option httplog
option dontlognull
option http-server-close
option forwardfor except 127.0.0.0/8
option redispatch
retries 3
timeout http-request 10s
timeout queue 1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s
maxconn 3000
listen web
bind 192.168.1.248:80 绑定vip地址
server 10.20.200.201 10.20.200.201:80 check 监听后端的vm2虚拟机
server 10.20.200.203 10.20.200.203:80 check 监听后端的vm4虚拟机
4、配置路由转发功能
[root@localhost network-scripts]# vi /etc/sysctl.conf
net.ipv4.ip_forward = 1
net.ipv4.ip_nonlocal_bind = 1
[root@localhost network-scripts]# sysctl -p 让路由转发参数生效
net.ipv4.ip_forward = 1
net.ipv4.ip_nonlocal_bind = 1
配置完成后启动haproxy和keepalived服务,并查看监听端口是否打开
systemctl start haproxy keepalived
9、在vm3上安装haproxy和keepalived包,并配置
1、安装haproxy和keepalived包
yum install haproxy keepalived -y
2、将vm1虚拟机的keepalived配置文件复制过来,然后修改优先级,改为BACKUP即可。
scp /etc/keepalived/keepalived.conf 192.168.1.202:/etc/keepalived/
修改haproxy配置文件
[root@localhost network-scripts]# vi /etc/keepalived/keepalived.conf
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
vrrp_iptables
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state BACKUP 从节点
interface eth0
virtual_router_id 51
priority 80 优先级改为80
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.248 dev eth0 label eth0:0
}
}
3、将vm1上的haproxy配置文件复制过来即可。
scp /etc/haproxy/haproxy.cfg 192.168.1.202:/etc/haproxy/
查看haproxy配置文件:vi /etc/haproxy/haproxy.cfg
global
log 127.0.0.1 local2
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 4000
user haproxy
group haproxy
daemon
# turn on stats unix socket
stats socket /var/lib/haproxy/stats
defaults
mode http
log global
option httplog
option dontlognull
option http-server-close
option forwardfor except 127.0.0.0/8
option redispatch
retries 3
timeout http-request 10s
timeout queue 1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s
maxconn 3000
listen web
bind 192.168.1.248:80 绑定vip地址
server 10.20.200.201 10.20.200.201:80 check 监听后端的vm2虚拟机
server 10.20.200.203 10.20.200.203:80 check 监听后端的vm4虚拟机
配置完成后启动haproxy和keepalived服务,并查看监听端口是否打开
systemctl start haproxy keepalived
4、配置路由转发功能
[root@localhost network-scripts]# vi /etc/sysctl.conf
net.ipv4.ip_forward = 1
net.ipv4.ip_nonlocal_bind = 1
[root@localhost network-scripts]# sysctl -p 让路由转发参数生效
net.ipv4.ip_forward = 1
net.ipv4.ip_nonlocal_bind = 1
测试效果
1、此时vm1和vm3主机的haproxy和keepalived服务都启动;
外部只能通过访问VIP地址才能调度到后端仅主机模式的vm2机器上,外部无法直接访问内部IP地址的网络,提高企业网络安全。
2、将vm1的keepalived及后端vm2的httpd服务宕机,此时就会访问到vm4主机的web网站上,起到了备用及高可用效果。
[root@localhost network-scripts]# systemctl stop keepalived
[root@localhost network-scripts]# systemctl stop httpd
如果vm2和vm4想要上外网,只需要再绑定一个桥接网卡,即可,仅主机模式只让其提供覆盖物即可,到此,双网卡绑定桥接模式和仅主机模式已搭建完成。
如果我们只需要在宿主机绑定一个网卡时,只需要将一个网卡绑定在br0上做桥接即可。