openstack centos 7 centos7

大家好,今天小编来为大家解答openstack centos 7这个问题,centos7很多人还不知道,现在让我们一起来看看吧!

如何借助OpenStack命令行工具管理虚拟机

OpenStack中有两种不同的界面用来管理云资源。一个是通过Horizon,这是基于Web的OpenStack仪表板;另一个就是通过OpenStack命令行接口(CLI)。

我在本教程中将演示如何从命令行,在OpenStack上创建或终止虚拟机。这个过程是在Havana版本的OpenStack中进行测试的。至于像OpenStack Folsom这些早期的OpenStack版本,你只要将本教程所用的命令行中的“neutron”换成“quantum”即可。

姑且假设部署的一套OpenStack系统已在某处构建并运行起来。我要使用OpenStack CLI客户程序,在现有的OpenStack系统上管理虚拟机。

安装OpenStack CLI客户程序

第一步就是安装必要的OpenStack命令行客户程序:

在Debian、Ubuntu或Linux Mint上,执行这个命令:

$ sudo apt-get install python-pip$ sudo pip install python-novaclient python-keystoneclient python-neutronclient

在CentOS、Fedora或RHEL上,执行这个命令:

$ sudo yum install python-pip$ sudo pip install python-novaclient python-keystoneclient python-neutronclient

设定环境变量

为了能够使用OpenStack CLI客户程序,你就要设定必要的环境变量。为此,创建一个名为openrc.sh的脚本,如下所示。

$ sudo vi openrc.sh export OS_USERNAME=dan export OS_PASSWORD=my_password export OS_TENANT_NAME=demo export OS_AUTH_URL=

在上述脚本中,OS_USERNAME/OS_PASSWORD是OpenStack用户名及密码。OS_TENANT_NAME是所创建的项目的名称。OS_AUTH_URL是Keystone端点的URL。Keystone是一项OpenStack服务,负责不同的OpenStack组件之间的身份验证。你应该把192.168.10.10换成所部署的系统中运行OpenStack Keystone的那个主机的IP地址。

现在,运行openrc.sh,设定环境变量,如下所示。

$ source openrc.sh

这时候,你可以准备运行OpenStack命令行客户程序了。确认你在运行时没有遇到任何错误:

$ nova list

它显示内容为空的结果,这意味着一切都正常。

构建网络

现在,你可以准备构建一个连接虚拟机的网络了。

创建一个名为"xmodulo"的新网络。

$ neutron net-create xmodulo

创建一个名为"xmodulo_subnet"的新子网,并将其添加到刚构建的那个网络。

$ neutron subnet-create xmodulo 10.0.0.0/24--name xmodulo_subnet

检查可用网络列表,确认该网络已成功构建。

$ neutron net-list

在输出结果中,要记下你所构建的网络的"ID"(编号)。之后你创建虚拟机时,要用到这个编号。

启动虚拟机

在创建并启动虚拟机之前,你首先要知道几个信息。

查明你想创建的那个虚拟机的类型。为此,运行下面这个命令。

$ nova flavor-list

在该示例中,我准备选择最小的虚拟机类型"m1.nano",它有64 MB内存、1个虚拟处理器(vCPU)、无磁盘。记下这个类型名称。

下一步,为你的虚拟机选择所要使用的虚拟机映像。为了列出所有可用的虚拟机映像,请使用这个命令:

$ nova image-list

记下你想为虚拟机使用的那个映像的ID。

下一步,为你的虚拟机选择所要使用的安全组的类型。安全组为你的虚拟机决定了入站访问规则。想了解可用的安全组,请运行该命令:

$ nova secgroup-list

想检查"默认"安全组的访问规则,请使用这个命令:

$ nova secgroup-list-rules default

在该示例中,我准备为虚拟机选择名为"default"的安全组。该安全组里面正好没有规则。

最后,我们使用到目前为止所获得的信息,创建一个虚拟机。指定你已了解的虚拟机类型(--flavor)、虚拟机映像的ID(--image)以及网络的ID(net-id=)。把[vm-name]换成你虚拟机的名称,这个名称需要很独特。

$ nova boot [vm-name]--flavor m1.nano--image d2b830be-3 7df-4fa9-90b2-91c472d19aaa--security-groups default-ni c net-id=1cbcddcf-3a7d-481f-b6f2-a97c6447c925

为了确认虚拟机已成功创建并启动,请运行这个命令:

$ nova list

停止、暂停和清除虚拟机

当你停止运行某个虚拟机时,它完全关闭。另一方面,你暂停虚拟机时,它临时被冻结,随时可以从暂停状态重新启动。在这两种情况下,虚拟机映像仍留在OpenStack里面。

想停止虚拟机,运行这个命令:

$ nova stop [vm-name]

想暂停虚拟机,运行这个命令:

$ nova suspend [vm-name]

如果你想从OpenStack清除已终停止虚拟机或已暂停虚拟机的映像,请使用这个命令:

$ nova delete [vm-name]

Centos7系统有什么特点

CentOS 7是一款基于 Red Hat Enterprise Linux(RHEL)开发的免费开源操作系统。它具有以下特点:

兼容性高:CentOS 7兼容大多数硬件,可以运行在多种计算机硬件平台上,包括 x86、x64和 ARM等处理器体系结构。

稳定性好:CentOS 7采用了 RHEL的源代码,在稳定性方面有很大优势。

安全性高:CentOS 7安装时会自动开启防火墙和 SELinux,可以有效保护系统安全。

支持软件包管理:CentOS 7采用了 YUM包管理器,可以方便地安装、升级和卸载软件包。

网络功能强大:CentOS 7提供了丰富的网络功能,包括虚拟网络、Bonding、VLAN等,可以满足各种网络需求。

免费开源:CentOS 7是一款免费开源的操作系统,可以免费下载使用。

openstack neutron网络介绍

由于网络部分出现了许多得新名词。将从整体到分部细致讲解。

来源于网络得一张图

如图所示,连成了一条线。重要得如何实现互联,接下来以表象论证这张图。

最好将图放在一边,边看边对照图。

这里先介绍从虚拟机访问外网。端口A开始:

表现出来就是虚拟机有张网卡A。

查询此虚拟机得子网ip为 10.1.1.5,以及所在节点,记住这个节点。

通过子网ip查询到端口id为 b65c1085-a971-4333-82dc-57012e9be490

记住这个id

图中A与B互联,意味着A与B一定具有某种映射关系。

若没有此命令则安装: yum install-y bridge-utils

可以看到这个id对应的tap设备!

veth pair是什么?后面再介绍。

由图可知,端口B(qvbXXX)和端口C(tapXXX)在同一个linux网桥上。它们俩互通了。

端口D在ovs网桥上。C和D的互联是veth pair的特性。

由图可以看出,qvoXXX在ovs网桥上,qvb在linux网桥上。它们之间的互联是veth pair的特性,它们就像一根导线的两端。

ovs查询命令:

这里可以看到3种网桥: br-int、br-tun、br-ex。这里有个印象就好。

仔细的查看一下,可以看到qvoXXX在br-int网桥上。

至此D端口也找到了

E、F端口通过ovs网桥自身连接。

ovs-vsctl show可以看到两个patch类型的端口,用于连接br-int和br-tun。类似于veth pair。

ovs-vsctl show可以在br-tun网桥上看到vxlan类型的端口,并注明本地ip和remote ip,通过此类型端口,将不同的物理环境互联,对于上层好似就一个网桥。再者br-tun网桥还与br-int互联,这意味,对于再上一层的应用,似乎只有一个br-int。

和【E】【F】相同。

此时携带源ip为子网的流量到达M端口,而L端口得网段为外网网段,因此M网段的流量此时无法直接进入L端口。借助router(网络命名空间),使用iptables,将M端口流量的源ip转换为外网网段。此时流量可进入L端口从而访问外网。(M与N之间连通性非网络对实现,而是ovs tap设备实现。网络对的一个明显特征为 ip a可以看到@符号连接两个端口)

找到虚拟机所在租户的路由id

本机为 894699dc-bc60-4b5e-b471-e95afa20f1d7

根据路由id找到网络命名空间

在所有节点上执行如下命令,找到对应id的qrouter

ip netns

本环境为:qrouter-894699dc-bc60-4b5e-b471-e95afa20f1d7

在此网络命名空间的节点上执行(如下命令意义为进入网络命名空间):

此时已进入网络命名空间。

查看ip

可以看到qg和qr开头的网卡名称。qg为弹性ip地址组,qr为子网网关。此时在虚拟机所在节点上查询ovs网桥,可以在br-int看到与此同名的qg和qr端口。

由于是源地址转换,因此先路由再转换源ip(iptables规则)。

查看路由规则:

route-n

第一条可以看到外网的网关,通过qg网卡发送,规则正好匹配。

选好路由规则之后,进行更改源ip。

可以看到 neutron-l3-agent-float-snat(配置了弹性ip才会出现)、neutron-l3-agent-snat。因为neutron-l3-agent-float-snat优先级高于neutron-l3-agent-snat,如果没有配置弹性ip,则会将源ip改为该路由的外网ip;如果配置了弹性ip则会将源ip改为弹性ip。

总的来说,流量从qr出去绕了一圈(网络命名空间)改变了源ip又从qg进入,然后通过ovs patch进入br-ex。

br-ex如何与外网连接的呢?进入网络节点查看ovs网桥:

可以看到 br-ex与em3网卡互联。因此流量直接走em3出去。还记得你这张网卡是干嘛的吗?是那张不配置ip的物理网卡!

通过iptables的prerouting可以看出,在进入之前修改了目的弹性ip为子网ip,后经路由转发。另,网络命名空间可以通过arp发现子网ip与mac地址的对应关系。

lbaas,负载均衡

dhcp,dhcp服务。

通过前面说的br-tun实现。如果没有单独划分网络,则使用管理网网段。若单独配置了tunnel网络,则br-tun里的网络使用tunnel网络。

br-tun里定义了vxlan,并且指定了 local_ip、remote_ip。根据这两个ip以及路由信息,可以确定 br-tun通过哪张网卡与外部通信。也是因此可以为tunnel配置专用网卡。

都是通过iptables实现。

防火墙:qrouter网络命名空间中得iptables实现。

安全组:虚拟机所在得宿主机得iptables实现。

可以看到防火墙规则。

可以看到对应端口id得安全组规则。

已经知道了qrouter利用nat表实现弹性ip与子网ip之间的映射,但是如何从外部访问到qg网卡的?

这里做了一个简单的模拟操作:

dnsmasq实现。

kolla-ansible的dnsmasq日志相对路径参考:neutron/dnsmasq.log(可通过dnsmasq.conf找到日志路径)

日志中可以看到dhcp的详细过程。过程参考如下:

文档参考:

dhcp也通过网络命名空间实现,名称由网络id决定。dhcp可以拥有多个,通过neutron.conf中 dhcp_agents_per_network决定。

另:centos7虚拟机中的/var/log/messages也记录了dhcp相关操作。

network qos可以理解为网络流量限制,官方名称:网络质量即服务

本环境通过openvswitch实现的qos。

如上图为设置的带宽限制规则。

根据端口号查看流表,命令参考:

上图标记的104就为dscp mark乘 4的结果,乘4是一种规范。

阅读剩余
THE END