文章目录
Dashboard(horizon)是一个web接口,使得云平台管理员以及用户可以管理不同的Openstack资源以及服务,这个部署示例使用的是 Apache Web 服务器。接下来将描述如何在控制节点上安装和配置仪表板。
首先用admin用户身份登陆;
查看集群状态

查看镜像、计算节点、网络等等

云主机已启动

也可以在计算节点上查看云主机,已启动(有网卡信息)


安装软件包

编辑文件 /etc/openstack-dashboard/local_settings

在 controller 节点上配置仪表盘以使用 OpenStack 服务(修改主机名);
启用第3版认证API;
通过仪表盘创建的用户默认角色配置为 user

允许所有主机访问仪表板

配置 memcached 会话存储服务

启用对域的支持

配置API版本

通过仪表盘创建用户时的默认域配置为 default

我们选择的是网络参数1,因此禁用支持3层网络服务

可以选择性地配置时区

重启web服务器以及会话存储服务

验证仪表盘的操作:在浏览器中输入 http://controller/dashboard访问仪表盘。
验证使用 admin 或者demo用户凭证和default域凭证。

可以看到我们的云主机

使用 admin 身份登陆

点击管理员–网络(物理网络映射的是eth1提供者网络provider)

我们删除子网

删除网络

接下来,我们以管理员的身份创建网络

创建成功,点击创建子网

进行如下填写

激活DHCP

点击创建即可。接下来我们使用demo用户身份登陆,开始创建云主机,名为vm1

选择镜像

选择类型

选择网络

选择安全组

导入密钥对

此时我们的云主机成功建立,点击最右侧的倒三角,选择控制台

点击此处只显示控制台

输入指定的用户名和密码,可以看到云主机被分配到的ip,到此图形化方式搭建云主机成功。

前一章我们在控制节点配置了公共网络,接下来,我们在controller节点上安装并配置私有网络组件。
所需的安装组件已经装过了,接下来配置服务组件,编辑/etc/neutron/neutron.conf 文件

在[DEFAULT]部分,启用路由服务和重叠的IP地址

接下来配置 Modular Layer 2 (ML2) 插件,ML2插件使用Linuxbridge机制来为实例创建layer-2虚拟网络基础设施。
编辑/etc/neutron/plugins/ml2/ml2_conf.ini文件

在[ml2]部分,启用flat,VLAN以及VXLAN网络;
启用VXLAN私有网络;
启用Linuxbridge和layer-2机制

在[ml2_type_vxlan]部分,为私有网络配置VXLAN网络识别的网络范围

对文件内容进行过滤查看

接下来配置Linuxbridge代理,Linuxbridge代理为实例建立layer-2虚拟网络并且处理安全组规则。
编辑/etc/neutron/plugins/ml2/linuxbridge_agent.ini文件

在[vxlan]部分,启用VXLAN覆盖网络,配置覆盖网络的物理网络接口的IP地址,启用layer-2 population

对文件内容进行过滤查看

接下来配置layer-3代理,Layer-3代理为私有虚拟网络提供路由和NAT服务。
编辑/etc/neutron/l3_agent.ini文件

在[DEFAULT]部分,配置Linuxbridge接口驱动和外部网络网桥

重启neutron-server和layer-3服务

用admin用户身份,查看

配置Linuxbridge代理,Linuxbridge代理为实例建立layer-2虚拟网络并且处理安全组规则。
编辑/etc/neutron/plugins/ml2/linuxbridge_agent.ini文件

在[vxlan]部分,启用VXLAN覆盖网络,配置覆盖网络的物理网络接口的IP地址,启用layer-2 population

重启Linuxbridge代理
接下来配置Dashboard,编辑文件 /etc/openstack-dashboard/local_settings

打开支持3层网络服务

重启web服务器以及会话存储服务

接下来使用demo用户登陆网页,可以查看到此时的网络拓扑

点击创建网络

私有网络



此时网络创建成功

可以查看到私有网络的拓扑结构,我们还没有在私有网络上建立云主机

新建路由(两个不同的网段(172.25/10.0)之间需要路由)


创建成功,接下来我们需要设置网关,使用admin用户登陆,点击下图编辑网络

选择外部网络


再次用demo用户登陆,点击设置网关

选择public

查看此时的网络拓扑,可以看到此时的路由器已经可以连接外网。接下来我们需要设置私有网络与路由器相连,进行数据通信

点击增加接口

选择私有网络

此时私有网络可以与路由器相连


可以看到路由接口ip

点击创建云主机




选择私有网络



云主机创建成功

此时接入不同网络的两个云主机可以通过路由器进行数据通信


查看vm2详细信息

查看vm1详细信息

可以看到我们私有网路的云主机,且可以访问公共网络的云主机(通过)
且可以上网(需要真机打开转发)

但是从外部无法访问私有网络的云主机

需要点击vm2,选择绑定浮动ip

点击加号,即可获取到自动分配的浮动ip


绑定成功

此时,外网可以通过浮动ip访问内网

也可以通过远程连接vm2,也就实现了从外部访问云主机内部的需求

出于纯粹的兴趣,我很好奇如何按顺序创建PI,而不是在过程结果之后生成数字,而是让数字在过程本身生成时显示。如果是这种情况,那么数字可以自行产生,我可以对以前看到的数字实现垃圾收集,从而创建一个无限系列。结果只是在Pi系列之后每秒生成一个数字。这是我通过互联网筛选的结果:这是流行的计算机友好算法,类机器算法:defarccot(x,unity)xpow=unity/xn=1sign=1sum=0loopdoterm=xpow/nbreakifterm==0sum+=sign*(xpow/n)xpow/=x*xn+=2sign=-signendsumenddefcalc_pi(digits
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
使用带有Rails插件的vim,您可以创建一个迁移文件,然后一次性打开该文件吗?textmate也可以这样吗? 最佳答案 你可以使用rails.vim然后做类似的事情::Rgeneratemigratonadd_foo_to_bar插件将打开迁移生成的文件,这正是您想要的。我不能代表textmate。 关于ruby-使用VimRails,您可以创建一个新的迁移文件并一次性打开它吗?,我们在StackOverflow上找到一个类似的问题: https://sta
我对最新版本的Rails有疑问。我创建了一个新应用程序(railsnewMyProject),但我没有脚本/生成,只有脚本/rails,当我输入ruby./script/railsgeneratepluginmy_plugin"Couldnotfindgeneratorplugin.".你知道如何生成插件模板吗?没有这个命令可以创建插件吗?PS:我正在使用Rails3.2.1和ruby1.8.7[universal-darwin11.0] 最佳答案 随着Rails3.2.0的发布,插件生成器已经被移除。查看变更日志here.现在
如何使用RSpec::Core::RakeTask初始化RSpecRake任务?require'rspec/core/rake_task'RSpec::Core::RakeTask.newdo|t|#whatdoIputinhere?endInitialize函数记录在http://rubydoc.info/github/rspec/rspec-core/RSpec/Core/RakeTask#initialize-instance_method没有很好的记录;它只是说:-(RakeTask)initialize(*args,&task_block)AnewinstanceofRake
这里是Ruby新手。完成一些练习后碰壁了。练习:计算一系列成绩的字母等级创建一个方法get_grade来接受测试分数数组。数组中的每个分数应介于0和100之间,其中100是最大分数。计算平均分并将字母等级作为字符串返回,即“A”、“B”、“C”、“D”、“E”或“F”。我一直返回错误:avg.rb:1:syntaxerror,unexpectedtLBRACK,expecting')'defget_grade([100,90,80])^avg.rb:1:syntaxerror,unexpected')',expecting$end这是我目前所拥有的。我想坚持使用下面的方法或.join,
关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭8年前。Improvethisquestion为什么SecureRandom.uuid创建一个唯一的字符串?SecureRandom.uuid#=>"35cb4e30-54e1-49f9-b5ce-4134799eb2c0"SecureRandom.uuid方法创建的字符串从不重复?
我已经构建了一些serverspec代码来在多个主机上运行一组测试。问题是当任何测试失败时,测试会在当前主机停止。即使测试失败,我也希望它继续在所有主机上运行。Rakefile:namespace:specdotask:all=>hosts.map{|h|'spec:'+h.split('.')[0]}hosts.eachdo|host|begindesc"Runserverspecto#{host}"RSpec::Core::RakeTask.new(host)do|t|ENV['TARGET_HOST']=hostt.pattern="spec/cfengine3/*_spec.r
我正在阅读SandiMetz的POODR,并且遇到了一个我不太了解的编码原则。这是代码:classBicycleattr_reader:size,:chain,:tire_sizedefinitialize(args={})@size=args[:size]||1@chain=args[:chain]||2@tire_size=args[:tire_size]||3post_initialize(args)endendclassMountainBike此代码将为其各自的属性输出1,2,3,4,5。我不明白的是查找方法。当一辆山地自行车被实例化时,因为它没有自己的initialize方法
我有一个存储主机名的Ruby数组server_names。如果我打印出来,它看起来像这样:["hostname.abc.com","hostname2.abc.com","hostname3.abc.com"]相当标准。我想要做的是获取这些服务器的IP(可能将它们存储在另一个变量中)。看起来IPSocket类可以做到这一点,但我不确定如何使用IPSocket类遍历它。如果它只是尝试像这样打印出IP:server_names.eachdo|name|IPSocket::getaddress(name)pnameend它提示我没有提供服务器名称。这是语法问题还是我没有正确使用类?输出:ge