Eucalyputs配置虚拟机网络和启动虚拟机
Eucalyputs配置虚拟机网络和启动虚拟机<br /> Eucalyputs中启动实例不能通过外网访问的问题<br />问题描述:eucalyputs在启动虚拟机时是一个IP一对一的nat转换,一个外部IP对应一个内部IP,也就是说,一个虚拟机有一个内部ip和一个外部ip,但我们不能通过外面IP访问该虚拟机<br /> 通过eucalyputs启动一个实例<br />配置环境变量<br />E
Eucalyputs配置虚拟机网络和启动虚拟机
Eucalyputs中启动实例不能通过外网访问的问题
问题描述:eucalyputs在启动虚拟机时是一个IP一对一的nat转换,一个外部IP对应一个内部IP,也就是说,一个虚拟机有一个内部ip和一个外部ip,但我们不能通过外面IP访问该虚拟机
通过eucalyputs启动一个实例
配置环境变量
EUCA_KEY_DIR=$(dirname $(readlink -f ${BASH_SOURCE})) export S3_URL=http://10.51.3.94:8773/services/Walrus export EC2_URL=http://10.51.3.94:8773/services/Eucalyptus export EC2_PRIVATE_KEY=${EUCA_KEY_DIR}/euca2-admin-451ed732-pk.pem export EC2_CERT=${EUCA_KEY_DIR}/euca2-admin-451ed732-cert.pem export EC2_JVM_ARGS=-Djavax.net.ssl.trustStore=${EUCA_KEY_DIR}/jssecacerts export EUCALYPTUS_CERT=${EUCA_KEY_DIR}/cloud-cert.pem export EC2_ACCESS_KEY='WKy3rMzOWPouVOxK1p3Ar1C2uRBwa2FBXnCw' export EC2_SECRET_KEY='GE7QJmvXY7wp28OFxo01dSRWge1iV5y4U7hA' # This is a bogus value; Eucalyptus does not need this but client tools do. export EC2_USER_ID='000100729354' |
启动实例
euca-describe-images euca-run-instances -k mykey -n <number of instances to start> <emi-id> |
启动后 euca-describe-instances 查看启动实例
可以看到回返回两个IP 10.51.3.202 和 172.68.1.4 (如果返回IP都是0.0.0.0,说明启动没有成功,可以一次同时启动两个实例即 –n 2)前面一个是外部IP
为什么不能用外部IP访问进去
l Eucalyputs配置虚拟机原理
Eucalyputs是用一个外部IP和一个内部IP进行nat转换,这样做的目的为了从外面不能了解内部网络结构,而且便于管理。
Eucalyputs 在启动时会用brctl工具创建一个网桥,名为eucabr10,利用这个网桥实现一个内网,并实现用DHCP分配IP。
eucalyputs在启动一个实例时,用xml文件
<interface type="bridge"> <source bridge="eucabr10" /> <mac address="d0:0d:52:C5:09:3E" /> <script path="/etc/xen/scripts/vif-bridge" /> </interface> |
将该实例接入到eucabr10这个网桥上,并给它分配一个内部IP地址,同时还创建一个interface添加一个外部IP,并将这两个IP一对一关联起来。
但是,在实现这个一对一转换时通过iptable自带的nat转换的,而不是通过路由器,iptables不能将两个ip的所有端口一一对应起来,需要一个一个去配置,如:
iptables -t nat -A PREROUTING -p tcp -d 10.51.3.250 --dport 22 -j DNAT --to-destination 192.168.22.239:22 |
将10.51.3.250和192.168.22.239的22端口对应起来,故外部IP无法连接进来。此方法有时可以配通,有时不行。
解决方案
在现实环境中,内部网络与外部网络肯定要通过路由器的,让路由器来做静态IP转换,将虚拟机xml文件改成<source bridge="xenbr0" />直接桥接到路由器。注:也可以利用brctl来设置host上桥接方案,具体做法可以在安装brctl后查看帮助信息。
用eucalyputs启动Amazon下载的虚拟机文件
Eucalyputs调用img启动虚拟机过程
1. Eucalyputs在创建一个虚拟机前先要建立两个文件分区ephemeral和swap,
/* create swap partition */ if (swap_size_mb>0) { sem_p (disk_sem); if ((e=vrun ("dd bs=1M count=%lld if=/dev/zero of=%s/swap 2>/dev/null", swap_size_mb, rundir_path)) != 0) { logprintfl (EUCAINFO, "creation of swap (dd) at %s/swap failed/n", rundir_path); sem_v (disk_sem); return e; } if ((e=vrun ("mkswap %s/swap >/dev/null", rundir_path)) != 0) { logprintfl (EUCAINFO, "initialization of swap (mkswap) at %s/swap failed/n", rundir_path); sem_v (disk_sem); return e; } sem_v (disk_sem); } |
if (limit_mb>0) { sem_p (disk_sem); if ((e=vrun ("dd bs=1M count=%lld if=/dev/zero of=%s/ephemeral 2>/dev/null", limit_mb, rundir_path )) != 0) { logprintfl (EUCAINFO, "creation of ephemeral disk (dd) at %s/ephemeral failed/n", rundir_path); sem_v (disk_sem); return e; } if ((e=vrun ("mkfs.ext3 -F %s/ephemeral >/dev/null 2>&1", rundir_path)) != 0) { logprintfl (EUCAINFO, "initialization of ephemeral disk (mkfs.ext3) at %s/ephemeral failed/n", rundir_path); sem_v (disk_sem); return e; |
这段代码的意思是先用dd命令创建swap文件,再格式化作为虚拟机的交换分区,即作为虚拟内存使用,大小为521M,然后用同样的方式创建一个ephemeral文件作为数据分区,大小为要启动img文件的两倍
2. 设置用来作为启动虚拟机配置信息的xml文件,该xml文件生成后内容如下:
<domain type="xen" id="18"> <name>i-52C5093E</name> - <os> <type>linux</type> <kernel>/usr/local/eucalyptus//admin/i-52C5093E/kernel</kernel> <initrd>/usr/local/eucalyptus//admin/i-52C5093E/ramdisk</initrd> <root>/dev/sda1</root> <cmdline>ro</cmdline> </os> <memory>524288</memory> <vcpu>1</vcpu> - <devices> - <disk type="file"> <source file="/usr/local/eucalyptus//admin/i-52C5093E/root" /> <target dev="sda1" /> </disk> - <disk type="file"> <source file="/usr/local/eucalyptus//admin/i-52C5093E/ephemeral" /> <target dev="sda2" /> </disk> - <disk type="file"> <source file="/usr/local/eucalyptus//admin/i-52C5093E/swap" /> <target dev="sda3" /> </disk> - <interface type="bridge"> <source bridge="eucabr10" /> <mac address="d0:0d:52:C5:09:3E" /> <script path="/etc/xen/scripts/vif-bridge" /> </interface> </devices> </domain>
|
虚拟机启动后遇到的问题
1. 没有密码,不能登录
解决吧办法:
(1) 用密钥登陆修改密码
(2) 在启动前,将从amazon下载的images 用
mount –o loop images /mnt/ vi /mnt/etc/passwd |
如下图
将第一行root:x: 中root后的x去掉,保存
2. 用ifconfig 命令,发现虚拟机没有获取到IP,用service network restart重启网卡,提示找不到2.6.27.21-0.1-xen这个内核中的文件
解决办法,启动eucalyputs 推荐的镜像文件中的虚拟机,找到/lib/modules/下,将2.6.27.21-0.1-xen复制出来,将从amazon下载的image 用上面修改密码的方式,将这个文件拷贝到/lib/modules/下,再从新启动就可以了。
调用API用xen启动从amazon下载的镜像文件的虚拟机
1. xen中安装的虚拟机的镜像文件,调用API启动该虚拟机,API就不在这里描述了,主要讲配置该虚拟机的xml文件,内容如下:
<domain type='xen'> <name>fc8</name> <uuid>7f5deab6-2f67-24bb-057b-809ab9e26956</uuid> <memory>524288</memory><currentMemory>524288</currentMemory> <vcpu>1</vcpu> <bootloader>/usr/bin/pygrub</bootloader> <os> <type arch='x86_64' machine='xenpv'>linux</type> </os> <clock offset='utc'/> <on_poweroff>destroy</on_poweroff> <on_reboot>restart</on_reboot> <on_crash>restart</on_crash> <devices> <disk type='file' device='disk'> <driver name='tap' type='aio'/> <source file='/var/lib/xen/images/centos'/> <target dev='xvda' bus='xen'/> </disk> <interface type='bridge'> <mac address='00:16:36:0a:35:46'/> <source bridge='xenbr0'/> <script path='vif-bridge'/> </interface> <console type='pty'> <target port='0'/> </console> </devices> </domain>
|
2. 调用API ,用xen启动从amazon下载的虚拟机镜像文件定义的虚拟机
将从amazon中下载下来的镜像文件,用上面用eucalyputs启动的方法,先mount清除密码,并将内核拷到相应路径下。
启动虚拟机的xml文件内容如下
<domain type="xen" id="18"> <name>i-52C5093E</name> - <os> <type>linux</type> <kernel>/usr/local/eucalyptus//admin/i-52C5093E/kernel</kernel> <initrd>/usr/local/eucalyptus//admin/i-52C5093E/ramdisk</initrd> <root>/dev/sda1</root> <cmdline>ro</cmdline> </os> <memory>524288</memory> <vcpu>1</vcpu> - <devices> - <disk type="file"> <source file="/usr/local/eucalyptus//admin/i-52C5093E/root" /> <target dev="sda1" /> </disk> - <disk type="file"> <source file="/usr/local/eucalyptus//admin/i-52C5093E/ephemeral" /> <target dev="sda2" /> </disk> - <disk type="file"> <source file="/usr/local/eucalyptus//admin/i-52C5093E/swap" /> <target dev="sda3" /> </disk> - <interface type="bridge"> <source bridge="xenbr10" /> <mac address="d0:0d:52:C5:09:3E" /> <script path="/etc/xen/scripts/vif-bridge" /> </interface> </devices> </domain>
|
其中第五行和第六行的kernel,ramdisk是从eucalyputs启动的虚拟机实例所在的文件夹拷出来的,路径设在自己放置的路径
更多推荐
所有评论(0)