天天看點

kvm虛拟化管理平台WebVirtMgr部署-完整記錄(3)

繼下面三篇文章完成了kvm虛拟化管理平台webvirtmgr環境的部署安裝:

<a href="http://www.cnblogs.com/kevingrace/p/5737487.html" target="_blank">kvm虛拟化管理平台WebVirtMgr部署-虛拟化環境安裝-完整記錄(0)</a>

<a href="http://www.cnblogs.com/kevingrace/p/5737724.html" target="_blank">kvm虛拟化管理平台WebVirtMgr部署-完整記錄(1)</a>

<a href="http://www.cnblogs.com/kevingrace/p/5739009.html" target="_blank">kvm虛拟化管理平台WebVirtMgr部署-完整記錄(2)</a>

一般情況下,虛拟機(下面稱vm)跟主控端通過網橋方式進行通信,隻要主控端能聯網,那麼vm也就能順利聯網。

然而,我的測試環境下的網絡環境比較特殊:

沒有内網交換機設定,也就是說内網沒有網關,主控端預設的網關是外網位址的。

如下,主控端開啟了兩個網卡:em1(外網),em2(内網,加入到網橋br0中)

[root@openstack ~]# ip addr           #檢視主控端的網卡配置情況

1: lo: &lt;LOOPBACK,UP,LOWER_UP&gt; 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: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; 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 

3: em2: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; 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 

4: em3: &lt;BROADCAST,MULTICAST&gt; 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: &lt;BROADCAST,MULTICAST&gt; 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: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1500 qdisc noqueue state UNKNOWN 

inet 192.168.1.17/24 brd 192.168.1.255 scope global br0

8: vnet0: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; 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 

[root@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代理;

主控端的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 allow 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| 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

[root@openstack squid]# squid -z

2016/08/09 13:35:12| Creating Swap Directories

[root@openstack squid]# /etc/init.d/squid start

Starting squid: . [ OK ]

[root@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服務

[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.baidu.com #能正常對外通路

[root@vmserver001 ~]#yum list #yum能正常線上使用

[root@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轉發功能:

[root@openstack ~]# echo 1 &gt; /proc/sys/net/ipv4/ip_forward

設定nat轉發規則

[root@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

*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

然後重新開機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 filter -A INPUT -p tcp -m state --state NEW -m tcp --dport 8088 -j ACCEPT

[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 --state NEW -m tcp --dport 8089 -j ACCEPT

[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 --state NEW -m tcp --dport 8090 -j ACCEPT

儲存規則,然後重新開機iptables

[root@openstack ~]#service iptables save

#終端指令行裡添加規則後,要先save儲存,然後重新開機~

#/etc/sysconfig/iptables檔案裡添加規則後,要restart重新開機使之生效~

#檢視設定的規則

[root@openstack ~]#iptables -L #檢視filter表的規則

[root@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-&gt;虛拟機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 restart

虛拟機需要提前在mysql裡授權給主控端

如上面通路主控端8080端口轉發到虛拟機的80端口,除了上面使用iptables的nat轉發規則實作,也可以使用nginx的proxy_pass反向代理實作。

在主控端的nginx配置如下:

[root@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反向代理(在其他篇章中有介紹)

***************當你發現自己的才華撐不起野心時,就請安靜下來學習吧***************

本文轉自散盡浮華部落格園部落格,原文連結:http://www.cnblogs.com/kevingrace/p/5753193.html,如需轉載請自行聯系原作者

繼續閱讀