欢迎来到Introzo百科
Introzo百科
当前位置:网站首页 > 技术 > kvm虚拟化管理平台WebVirtMgr部署

kvm虚拟化管理平台WebVirtMgr部署

日期:2023-10-01 03:24

经过以下三篇文章,kvm虚拟化管理平台webvirtmgr环境的部署和安装已经完成:
kvm虚拟化管理平台WebVirtMgr部署-虚拟化环境安装-完整记录(0)
kvm虚拟化管理平台 WebVirtMgr 部署 - 完整记录(一)
kvm 虚拟化管理平台 WebVirtMgr 部署 - 完整记录(二)

正常情况下,虚拟机(以下简称 vm)通过网卡与主机进行通信网桥,只要宿主机能连接互联网,虚拟机也能顺利连接互联网。

不过,我的测试环境中的网络环境比较特殊:
没有内网交换机设置,也就是说内网没有网关,主机的默认网关是外网地址。
如下,主机开启了两张网卡:em1(外网),em2(内网,添加到网桥br0上)

[root@openstack ~]# ip addr           #查看同期机的闹钟配置情况
1: lo: mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00: 00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 范围主机 lo
inet6 ::1/128 范围主机
valid_lft 永远首选_lft 永远
2: em1 mtu 1500 qdisc mq 状态 UP qlen 1000
链接/以太 44:a8:42:21:a6:00 brd ff:ff:ff:ff:ff:ff
inet 103.10.86.17/26 brd 111.101.186.163 范围全局 em1
inet6 fe80::46a8:42ff:fe21:a600/64 范围链接
永远有效_lft 永远首选_lft
3: em2 mtu 1500 qdisc mq 状态 UP qlen 1000
链接/以太 44:a8:42:21:a6:01 brd ff:ff:ff:ff:ff:ff
inet6 fe80::46a8:42ff:fe21:a601/64 范围链接
valid_lft 永远 Preferred_lft 永远
4: em3: mtu 1500 qdisc noop 状态 DOWN qlen 1000
链接/乙醚 44:a8 :42:21:a6:02 brd ff:ff:ff:ff:ff:ff
5:em4: mtu 1500 qdisc noop 状态 DOWN qlen 1000
链接/以太 44:a8:42:21:a6:03 brd ff:ff:ff:ff:ff:ff
6: br0: mtu 1500 qdisc noqueue 状态未知
链接/以太 44:a8:42:21:a6:01 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.17/24 brd 192.168.1.255 范围全局 br0
inet6 fe80::46a8:42ff:fe21:a601/64 范围链接
valid_lft 永远 Preferred_lft 永远
8: vnet0: mtu 1 500 qdisc pfifo_fast 状态未知 qlen 500
链接/以太 fe:54:00:08:cf:9a brd ff:ff:ff:ff:ff:ff
inet6 fe80::fc54:ff:fe08:cf9a/64 范围链接
永远有效_lft 永远首选_lft 永远

[root@openstack ~]#route -n #查看路由,默认路由网关为外网
内核IP路由表
Destination Gateway Genmask Flags Metric Ref Use Iface
103.10.86.0 0.0 。 0.0 255.255.255.192 U 0 0 0 em1
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 br0
169.254.0.0 0.0.0.0 255.25 5.0.0 U 1002 0 0 em1
169.254.0.0 0.0 .0.0 255.255.0.0 U 1006 0 0 br0
0.0.0.0 111.101.186.1 0.0.0.0 UG 0 0 0 em1

由于不存在内网网关,且虚拟机与主机之间采用桥接模式,因此虚拟机无法通过桥接模式连接互联网。

为了将安装好的虚拟机连接到互联网,我们需要手动进行一些特殊的配置:
1)主机部署了squid代理环境,即虚拟机的外部访问请求通过主机鱿鱼代理。
2)对vm的访问请求是通过主机的iptables的NAT或者nginx反向代理(proxy_pass)转发的。

------------------------------------------------------------ --- ---------------------------------------------------------- --- --------
以下是http模式的squid代理;
如果是https的squid代理,可以参考我的另一篇技术博客内容:Squid代理http和https上网操作记录
------------ ------------------------------------------------ -------------- ------------------------------------------------------------------------

宿主机的Squid代理部署记录

yum命令直接在线安装squid
[root@openstack ~]#yum install squid

安装完成后,修改squid.conf文件内容。修改前可以先备份一下文件
[root@openstack ~]# cd /etc/squid/
[root@openstack squid]#cp squid.conf squid.conf_bak
[root@openstack squid ]#vim squid.conf
1.在文件中找到 http_access Deny all,修改为http_access allowed all ​​,表示所有用户都可以访问此代理,
2。找到 http_port 3128,修改为http_port 192.168.1.17:3128,这里的IP和端口是Squid的代理IP(这里是主机的IP)和端口,

然后在启动之前执行以下命令来测试Squid
[root@openstack squid]# squid -k parse
2016/08/09 13:35:04|处理配置文件:/etc /squid/squid.conf(深度0)
2016/08/09 13:35:04|处理:acl管理器原型cache_object
............
............
2016/08/09 13:35:04|处理:refresh_pattern。 0 20% 4320
2016/08/09 13:35:04|初始化 https 代理上下文

[root@openstack鱿鱼]# squid -z
2016/08/09 13:35:12|创建交换目录

[root@openstack鱿鱼]# /etc/init.d/squid start
启动鱿鱼: . [好]

[root@openstack squid]# netstat -nltp
活动互联网连接(仅限服务器)
Proto Recv-Q Send-Q 本地地址外部地址状态 PID/程序名称
..... ........
tcp 0 0 192.168.1.17:3128 0.0.0.0:* 听71848/(鱿鱼)
........................

------------------------------------------------------------ --- ---------------------------------------
如果主机已启用iptables 防火墙规则,您还需要将以下行添加到 /etc/sysconfig/iptables:
-A INPUT -s 192.168.1.0/24 -p tcp -m state --state NEW -m tcp --dport 3128 -j ACCEPT
然后重新启动 iptables 服务
[root@openstack ~]# /etc/init.d/iptables restart

在虚拟机 VM 上配置 Squid 代理
只需将以下行添加到系统环境变量配置文件 /etc/profile 中(添加在文件底部)
[root@vmserver001 ~] # vim /etc/profile
.....
export http_proxy=http://192.168.1.17:3128
[root@vmserver001 ~]#source /etc/profile #使上述配置生效

测试虚拟机是否可以外部访问:
[root@vmserver001 ~]#curl http://www.introzo.com #可以正常访问
[root@vmserver001 ~]#yum list #yum 可以正常在线使用
[root@vmserver001 ~]#wget http://www.introzo.com/mingpeng/blog/293744 #可以正常下载
--------- --- ---------------------------------------------------------- --- --------------------------

虚拟机内部访问请求是通过主机的iptables的NAT端口转发来实现的:

? 8.1.151
虚拟机3:ip-192.168.1.152

需要访问宿主机的8088、8089、8090端口,分别转发到虚拟机1、虚拟机2、虚拟机3的80端口

虚拟机操作
1)关闭防火墙iptables
#/etc/init.d/iptables stop
#chkconfig iptables off
然后修改/etc/sysconfig/中的“SELINUX” selinux =禁用“
#setenforce 0
#getenforce
#reboot

? -eth0
…..
网关=192.168.1.17

#/etc/init.d/网络重启

主机操作
首先开启主机的IP转发功能:
[root@openstack ~]# echo 1 > /proc/sys/net/ipv4/ip_forward

设置nat转发规则

[root@kvmserver ~]# cat /etc/sysconfig/iptables
# 由 iptables-save v1.4.7 于 2016 年 8 月 16 日星期二 09:48:24
*filter
:INPUT ACCEPT 生成[0:0]
:转发接受 [0:0]
:输出接受 [449:63333]
-A 输入 -m 状态 --state 相关,已建立 -j 接受
-A输入 -p icmp -j 接受
-A 输入 -i lo -j 接受
-A 输入 -p tcp -m 状态 --state 新 -m tcp --dport 22 -j 接受
-A输入-p tcp -m状态--状态新-m tcp--dport 80 -j接受

-A 输入 -p tcp -m 状态 --state 新 -m tcp --dport 6080 -j 接受                                                                                                                                                                                                                           6080端口是vnc服务端口,也必须打开
-A INPUT -p tcp - m 状态 --state 新 -m tcp --dport 8088 -j 接受
-A 输入 -p tcp -m 状态 --state 新 -m tcp --dport 8089 -j 接受
-A 输入 -p tcp -m 状态 --state 新 -m tcp --dport 8090 -j 接受
-A 输入 -s 192.168.1.0/24 -p tcp -m 状态 --state 新 -m tcp --dport 3128 -j Accept##-A input -j Reject-Reject-With ICMP-HOST-PROHIBITED // 这两行注释掉,否则重新发布NAT端口时会出现问题! W# -A Forward -j Reject-Reject-With ICMP-HOST-PROHIBITED
Commit
# 于 2016 年 8 月 16 日星期二 09:48:24 完成
# 由 IPTABLES 生成 - 保存 v1。 4.7 2016年8月16日星期二09:48:24
*nat
:carouting接受[9:32464]
:后路由接受[9:8580]
:OUTPUT接受[9:9:8第580章]
-A PREROUTING -p tcp -m tcp --dport 8088 -j DNAT --to-destination 192.168.1.150:80 //注意DNAT规则必须放在SN中高于AT规则!
-A 预路由 -p tcp -m tcp --dport 8089 -j DNAT --到目的地 192.168.1.151:80
-A 预路由 -p tcp -m tcp --dport 8090 -j DNAT --到目的地 192.168.1.152:80
-A POSTROUTING -d 192.168.1.150 -p tcp -m tcp --sport 80 -j SNAT --到源 192.168.1.17
-A POSTROUTING -d 192 。 168. 1.151 -p tcp -m tcp --sport 80 -j SNAT --to-源 192.168.1.17
-A POSTROUTING -d 192.168.1.152 -p tcp -m tcp --sport 80 -j SNAT --to- source 192.168.1.17
COMMIT
# Completed on Tue Aug 16 09:48:24 2016

然后重启 iptables 即可生效!
[root@openstack ~]#service iptables restart

************************************
或者在终端命令行操作:
[root@openstack ~]#iptables -t nat -A PREROUTING -p tcp -m tcp --dport 8088 -j DNAT --to-destination 192.168.1.150:80
[root@openstack ~]#iptables -t nat -A POSTROUTING -d 192.168.1.150 -p tcp -m tcp --sport 80 -j SNAT --to-source 192.168.1.17
[root@openstack ~]#iptables -t 过滤器 -A INPUT -p tcp -m state - -状态新-m tcp --dport 8088 -j接受

[root@openstack ~]#iptables -t nat -A PREROUTING -p tcp -m tcp --dport 8089 -j DNAT --to-destination 192.168.1.151:80
[root@openstack ~]# iptables -t nat -A POSTROUTING -d 192.168.1.151 -p tcp -m tcp --sport 80 -j SNAT --to-source 192.168.1.17
[root@openstack ~]#iptables -t filter -A INPUT -p tcp -m 状态 --state 新 -m tcp --dport 8089 -j 接受

[root@openstack ~]#iptables -t nat -A PREROUTING -p tcp -m tcp --dport 8090 -j DNAT --to-destination 192.168.1.152:80
[root@openstack ~]# iptables -t nat -A POSTROUTING -d 192.168.1.152 -p tcp -m tcp --sport 80 -j SNAT --to-source 192.168.1.17
[root@openstack ~]#iptables -t filter -A INPUT -p tcp -m 状态 --state 新 -m tcp --dport 8090 -j 接受

保存规则并重启iptables
[root@openstack ~]#service iptables save

[root@openstack ~]#service iptables restart

#在终端命令行添加规则后一定要先保存然后重启~

#将规则添加到/etc/sysconfig/iptables文件后,需要重启才能生效~

#查看设置的规则
[root@openstack ~]#iptables -L #查看过滤表的规则
[root@openstack ~]#iptables -L -t nat #查看过滤表的规则nat表

****************************
注意:
nat端口转发设置成功后,记得在/etc/sysconfig/iptables 文件注释掉以下两行!不然nat转发会有问题!一般情况下,如上设置nat转发规则并保存并重启防火墙后,/etc/sysconfig/iptables文件中的以下两行会被自动删除。
#-A INPUT -j REJECT --reject-with icmp-host-prohibited
#-A FORWARD -j REJECT --reject-with icmp-host-prohibited

**************************************************** ****** ********************************************** *****

同理,如果是其他端口的NAT转发,例如想通过3306端口访问虚拟机1的数据。
可设置:主机63306->虚拟机3306

主机操作:
[root@openstack ~]#iptables -t nat -A PREROUTING -p tcp -m tcp --dport 63306 -j DNAT --to-destination 192.168.1.150:3306
[ root@openstack ~]#iptables -t nat -A POSTROUTING -d 192.168.1.150 -p tcp -m tcp --dport 3306 -j SNAT --to-source 192.168.1.17
[root@openstack ~]# iptables -t filter -A INPUT -p tcp -m state --state NEW -m tcp --dport 63306 -j ACCEPT #防火墙释放63306端口
[root@openstack ~]#/etc/init.d/iptables save

[root@openstack ~]#/etc/init.d/iptables 重启

虚拟机需要提前在mysql中授权给主机

**************************************************** ****** ********************************************** *****

**************************************************** ****** ********************************************** *****

注:

比如访问宿主机的8080端口,转发到虚拟机的80端口,除了使用上面iptables的nat转发规则外,还可以使用nginx的proxy_pass反向代理实现。

宿主机上nginx配置如下:

[root@bastion-IDC ~]# cat /Data/app/nginx/conf/vhosts/80-vm.conf
server {
监听 8088;
server_name localhost;
位置/ {
root /opt/;
索引index.html index.htm;
proxy_pass http://192.168.1.150/;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set _header 主机 $host;
}

}

重启nginx服务,iptables开放8080端口

这样访问主机8080,即http://111.101.186.163:8080时,显示的结果就是http://192.168.1.150的结果

**************************************************** ******

除了使用nginx反向代理外,还可以使用haproxy反向代理(其他章节介绍过)

关灯