设为首页 收藏本站
查看: 1169|回复: 0

[经验分享] kvm虚拟化管理平台WebVirtMgr部署-完整记录(3)

[复制链接]

尚未签到

发表于 2017-6-24 07:33:16 | 显示全部楼层 |阅读模式
  继下面三篇文章完成了kvm虚拟化管理平台webvirtmgr环境的部署安装:
kvm虚拟化管理平台WebVirtMgr部署-虚拟化环境安装-完整记录(0)
kvm虚拟化管理平台WebVirtMgr部署-完整记录(1)
kvm虚拟化管理平台WebVirtMgr部署-完整记录(2)

一般情况下,虚拟机(下面称vm)跟宿主机通过网桥方式进行通信,只要宿主机能联网,那么vm也就能顺利联网。
  然而,我的测试环境下的网络环境比较特殊:
没有内网交换机设置,也就是说内网没有网关,宿主机默认的网关是外网地址的。
如下,宿主机开启了两个网卡:em1(外网),em2(内网,加入到网桥br0中)
  [iyunv@openstack ~]# ip addr           #查看宿主机的网卡配置情况
1: lo: <LOOPBACK,UP,LOWER_UP> 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 scope host lo
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: em1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
    link/ether 44:a8:42:21:a6:00 brd ff:ff:ff:ff:ff:ff
    inet 103.10.86.17/26 brd 111.101.186.163 scope global em1
    inet6 fe80::46a8:42ff:fe21:a600/64 scope link
       valid_lft forever preferred_lft forever
3: em2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
    link/ether 44:a8:42:21:a6:01 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::46a8:42ff:fe21:a601/64 scope link
       valid_lft forever preferred_lft forever
4: em3: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000
    link/ether 44:a8:42:21:a6:02 brd ff:ff:ff:ff:ff:ff
5: em4: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000
    link/ether 44:a8:42:21:a6:03 brd ff:ff:ff:ff:ff:ff
6: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN
    link/ether 44:a8:42:21:a6:01 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.17/24 brd 192.168.1.255 scope global br0
    inet6 fe80::46a8:42ff:fe21:a601/64 scope link
       valid_lft forever preferred_lft forever
8: vnet0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 500
    link/ether fe:54:00:08:cf:9a brd ff:ff:ff:ff:ff:ff
    inet6 fe80::fc54:ff:fe08:cf9a/64 scope link
       valid_lft forever preferred_lft forever
  [iyunv@openstack ~]# route -n    #查看路由,默认路由网关是外网的
Kernel IP routing table
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.255.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
  由于内网网关不存在,并且vm和宿主机之间采用的是bridge桥接模式,所以vm不能通过桥接模式自行联网了。
  要想使安装后的vm联网,还需要我们手动进行些特殊配置:
1)宿主机部署squid代理环境,即vm对外的访问请求通过宿主机squid代理出去。
2)vm对内的访问请求通过宿主机iptables的nat转发进来或者nginx反向代理(proxy_pass)进来。
  ---------------------------------------------------------------------------------------------------------
下面说的是http方式的squid代理;
如果是https的squid代理,可以参考我的另一篇技术博客内容:squid代理http和https方式上网的操作记录
---------------------------------------------------------------------------------------------------------
  宿主机的squid代理部署记录
  yum命令直接在线安装squid
[iyunv@openstack ~]#yum install squid
  安装完成后,修改squid.conf 文件中的内容,修改之前可以先备份该文件
[iyunv@openstack ~]# cd /etc/squid/
[iyunv@openstack squid]#cp squid.conf squid.conf_bak
[iyunv@openstack squid]#vim squid.conf
1.找到文件中的 http_access deny all,将其修改为http_access allow all,表示所有用户都可以访问这个代理,
2.找到http_port 3128 ,将其修改为http_port 192.168.1.17:3128,这里的IP及端口是squid的代理IP(这里也就是宿主机的ip)及端口,
  然后执行下面命令,进行squid启动前测试
[iyunv@openstack squid]# squid -k parse
2016/08/09 13:35:04| Processing Configuration File: /etc/squid/squid.conf (depth 0)
2016/08/09 13:35:04| Processing: acl manager proto cache_object
..............
..............
2016/08/09 13:35:04| Processing: refresh_pattern .          0    20%  4320
2016/08/09 13:35:04| Initializing https proxy context
  [iyunv@openstack squid]# squid -z
2016/08/09 13:35:12| Creating Swap Directories
  [iyunv@openstack squid]#/etc/init.d/squid start
Starting squid: .                                          [  OK  ]
  [iyunv@openstack squid]# netstat -nltp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
.............     
tcp        0      0 192.168.1.17:3128           0.0.0.0:*                   LISTEN      71848/(squid)      
.............
  --------------------------------------------------------------------------------------
如果宿主机开启了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服务
[iyunv@openstack ~]# /etc/init.d/iptables restart
  虚拟机VM上进行squid代理配置
只需要在系统环境变量配置文件/etc/profile里添加下面一行即可(在文件底部添加)
[iyunv@vmserver001 ~]# vim /etc/profile
.......
export http_proxy=http://192.168.1.17:3128
[iyunv@vmserver001 ~]#source /etc/profile       #使上面的配置生效
  测试虚拟机是否能对外访问:
[iyunv@vmserver001 ~]# curl http://www.baidu.com         #能正常对外访问
[iyunv@vmserver001 ~]#yum list                     #yum能正常在线使用
[iyunv@vmserver001 ~]#wget http://my.oschina.net/mingpeng/blog/293744       #能正常在线下载
--------------------------------------------------------------------------------------
  虚拟机对内的访问请求通过宿主机iptables的nat端口转发实现:
  比如:
宿主机:外网ip-111.101.186.163,内网ip-192.168.1.17
虚拟机1:ip-192.168.1.150
虚拟机2:ip-192.168.1.151
虚拟机3:ip-192.168.1.152
  要求通过访问宿主机的8088、8089、8090端口,分别nat转发到虚拟机1、虚拟机2、虚拟机3的80端口
  虚拟机的操作
1)关闭防火墙iptables
#/etc/init.d/iptables stop
#chkconfig iptables off
然后修改/etc/sysconfig/selinux里的“SELINUX=disabled"
#setenforce 0
#getenforce
#reboot   
  2)将三台虚拟机的网关指向宿主机的内网地址  (这一点很重要!)
#vim /etc/sysconfig/network-script/ifcfg-eth0
.....
GATEWAY=192.168.1.17
  #/etc/init.d/network restart
  宿主机的操作
先开启宿主机的IP转发功能:
[iyunv@openstack ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
  设置nat转发规则
  [iyunv@kvmserver ~]# cat /etc/sysconfig/iptables
# Generated by iptables-save v1.4.7 on Tue Aug 16 09:48:24 2016
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [449:63333]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
  -A INPUT -p tcp -m state --state NEW -m tcp --dport 6080 -j ACCEPT                     //6080端口为vnc服务端口,一定也要打开
-A INPUT -p tcp -m state --state NEW -m tcp --dport 8088 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 8089 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 8090 -j ACCEPT
-A INPUT -s 192.168.1.0/24 -p tcp -m state --state NEW -m tcp --dport 3128 -j ACCEPT
#-A INPUT -j REJECT --reject-with icmp-host-prohibited                                              //这两行注释掉,不然nat端口转发的时候会有问题!
#-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
# Completed on Tue Aug 16 09:48:24 2016
# Generated by iptables-save v1.4.7 on Tue Aug 16 09:48:24 2016
*nat
:PREROUTING ACCEPT [9:32464]
:POSTROUTING ACCEPT [9:8580]
:OUTPUT ACCEPT [9:8580]
-A PREROUTING -p tcp -m tcp --dport 8088 -j DNAT --to-destination 192.168.1.150:80        //注意,DNAT规则一定要都放在SNAT规则之上!
-A PREROUTING -p tcp -m tcp --dport 8089 -j DNAT --to-destination 192.168.1.151:80
-A PREROUTING -p tcp -m tcp --dport 8090 -j DNAT --to-destination 192.168.1.152:80
-A POSTROUTING -d 192.168.1.150 -p tcp -m tcp --sport 80 -j SNAT --to-source 192.168.1.17
-A POSTROUTING -d 192.168.1.151 -p tcp -m tcp --sport 80 -j SNAT --to-source 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,使之生效!
[iyunv@openstack ~]#service iptables restart
  ******************************
或者在终端命令行操作:
[iyunv@openstack ~]#iptables -t nat -A PREROUTING -p tcp -m tcp --dport 8088 -j DNAT --to-destination 192.168.1.150:80
[iyunv@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
[iyunv@openstack ~]#iptables -t filter -A INPUT -p tcp -m state --state NEW -m tcp --dport 8088 -j ACCEPT
  [iyunv@openstack ~]#iptables -t nat -A PREROUTING -p tcp -m tcp --dport 8089 -j DNAT --to-destination 192.168.1.151:80
[iyunv@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
[iyunv@openstack ~]#iptables -t filter -A INPUT -p tcp -m state --state NEW -m tcp --dport 8089 -j ACCEPT
  [iyunv@openstack ~]#iptables -t nat -A PREROUTING -p tcp -m tcp --dport 8090 -j DNAT --to-destination 192.168.1.152:80
[iyunv@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
[iyunv@openstack ~]#iptables -t filter -A INPUT -p tcp -m state --state NEW -m tcp --dport 8090 -j ACCEPT
  保存规则,然后重启iptables
[iyunv@openstack ~]#service iptables save
  [iyunv@openstack ~]#service iptables restart
  #终端命令行里添加规则后,要先save保存,然后重启~
  #/etc/sysconfig/iptables文件里添加规则后,要restart重启使之生效~
  #查看设置的规则
[iyunv@openstack ~]#iptables -L #查看filter表的规则
[iyunv@openstack ~]#iptables -L -t nat #查看nat表的规则
  **********************
注意:
nat端口转发设置成功后,记得在/etc/sysconfig/iptables文件里注释掉下面两行!不然nat转发会有问题!一般如上面在nat转发规则设置好并save和restart防火墙之后就会自动在/etc/sysconfig/iptables文件里删除掉下面两行内容了。
#-A INPUT -j REJECT --reject-with icmp-host-prohibited
#-A FORWARD -j REJECT --reject-with icmp-host-prohibited
  *********************************************************************************************
  同样的,如果是其他端口的nat转发,比如想访问虚拟机1的数据接3306端口。
可以设置:宿主机63306->虚拟机3306
  宿主机操作:
[iyunv@openstack ~]#iptables -t nat -A PREROUTING -p tcp -m tcp --dport 63306 -j DNAT --to-destination 192.168.1.150:3306
[iyunv@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
[iyunv@openstack ~]#iptables -t filter -A INPUT -p tcp -m state --state NEW -m tcp --dport 63306 -j ACCEPT         #防火墙放行63306端口
[iyunv@openstack ~]#/etc/init.d/iptables save
  [iyunv@openstack ~]#/etc/init.d/iptables restart
  虚拟机需要提前在mysql里授权给宿主机
  *********************************************************************************************
  *********************************************************************************************
  注意:
  如上面访问宿主机8080端口转发到虚拟机的80端口,除了上面使用iptables的nat转发规则实现,也可以使用nginx的proxy_pass反向代理实现。
  在宿主机的nginx配置如下:
  [iyunv@bastion-IDC ~]# cat /Data/app/nginx/conf/vhosts/80-vm.conf
server {
        listen       8088;
        server_name  localhost;
        location / {
            root   /opt/;
            index index.html index.htm;
            proxy_pass http://192.168.1.150/;
            proxy_set_header X-Forwarded-For $remote_addr;
            proxy_set_header Host $host;
        }
  }
  重启nginx服务,iptables开放8080端口
  这样,访问宿主机8080,即http://111.101.186.163:8080显示结果就是http://192.168.1.150的结果
  ***********************************************
  除了用nginx反向代理,还可以使用haproxy反向代理(在其他篇章中有介绍)

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-387452-1-1.html 上篇帖子: KVM 虚拟化基本搭建 下篇帖子: [原] KVM 虚拟化原理探究(2)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表