来公司几个月了,除了搭建了kvm虚拟机,使用3台虚拟机组合成一个openstack的网络环境。还没有正式将openstack搭建起来过。时间都在开发web程序。不过openstack也是要学习的。只能利用有限的时间去学习,我现在就可以预见到我的学习曲线将会十分漫长。在这个漫长学习过程中,为了在后面不忘记前面的,还是将一些要点记录下来。

错误记录:

1.同步keystone数据库出错:/bin/sh -c "keystone-manage db_sync" keystone

  虽然keystone用户设置访问客户端是localhost以及%,但是不知道为什么同步数据库的时候出现keystone@controller 没有权限 (controller为keystone所在机器的名字)

$vi /etc/hosts

在127.0.0.1 后面添加 controller,然后执行,就可以同步了。

具体原因不清楚,猜测,运行同步操作,必须使用localhost。(修改了上面之后,ping controller ,会显示ping 127.0.0.1)

然后需要重新启动一下apache服务器,如果你使用apache的话:

$systemctl restart httpd.service

  

安装日记:

环境 学习机器ubuntu 14.04  desktop(16G内存),虚拟机环境 ubuntu14.04 server

一.kvm:

在本机上安装 kvm,(bios中开启了虚拟化)

qemu-kvm 虚拟机
libvirt-bin 虚拟化库

virt-manager 图形控制台(不用使用kvm的命令行了,方便)
bridge-utils 桥接
$ apt-get install qemu-kvm libvirt-bin virt-manager bridge-utils
virt-manager为图形面板,如下(如果不安装,就使用命令行)

二.本地创建网桥:

  3台虚拟机必须具备以下特性:

    1.每台虚拟机必须能够上网:

    2.3台机器组成一个虚拟子网:意味着至少有两个网络,一个是外网兼控制网,,一个是隧道内网

  因此,虚拟机是采取桥接方式:

    方法是

      a .首先在本机上新建一个桥接的虚拟网卡。

      b. 然后在建立虚拟机的时候添加硬件,将该虚拟桥接卡添加进来。这样虚拟机可以有一个桥接的网(连接到本机局域网当中),一个内部子网(用于openstack内部控制)

  备注:虚拟机与本机的通讯方式可以选择默认NAT模式,或者网桥模式。采取网桥模式,也意味着3台虚拟机是本机所在的这个局域网中的一员,和本机是对等的邻居关系。而采用NAT模式,意味着虚拟机对外的通讯都是使用本机作为代理。由于需要两个网络,需要添加硬件设备(网桥或者网卡)。采取桥接的虚拟网卡。

三.虚拟机安装ubuntu14.04server:

  我是建立虚拟机的时候使用cdrom安装的。只需要安装一台,其他的复制就好。复制好后可以改机器名字。

四.配置每台虚拟机的网络:

  1.按照安装说明配置机器 :(openstack网站上有ubuntu上安装openstack的书)

    a.修改 /etc/hostname文件:

      三台机器的名字分别修改为:controller(控制节点),network(网络节点),computer1(计算节点)

    b.修改 /etc/hosts:

      在其中添加:  (这个192.168.100 是控制子网,即外网,本地局域网)

#controller
192.168.100.151 controller #network
192.168.100.150 network #compute1
192.168.100.152 compute1

    c.修改 /etc/network/interfaces

      这里面配置隧道网络 192.168.50,以及外部和控制网络 192.168.100

auto lo
iface lo inet loopback # interface tunnel net
auto eth0
iface eth0 inet static
address 192.168.50.2
#gateway 192.168.50.1
netmask 255.255.255.0
#dns-nameservers 192.168.50.1 # interface outside,control net
auto eth1
#iface eth1 inet dhcp
iface eth1 inet static
address 192.168.100.151
gateway 192.168.100.1
netmask 255.255.255.0
dns-nameservers 114.114.114.114 up route add -net 192.168.50.0 netmask 255.255.255.0 gw 192.168.50.1 dev eth0

    d.三台虚拟机可以访问外网,互ping可通网络就搭建好了。

    e.为三台机器安装NTP:时间同步软件,由于测试,也没有必要设置,都跟远程机器时间同步好了。

五.controller安装keystone:

  (源:http://www.aboutyun.com/thread-14604-1-1.html)

  提示:使用本地的ssh连接虚拟机,不要使用virt那个启动界面,那个复制粘帖不好弄。使用ufw开启端口  

  1.安装:添加源并更新

$apt-get install ubuntu-cloud-keyring
$echo "deb http://ubuntu-cloud.archive.canonical.com/ubuntu" "trusty-updates/kilo main" > /etc/apt/sources.list.d/cloudarchive-kilo.list
$apt-get update && apt-get dist-upgrade

    由于这个源是国外的,请在/etc/apt/sources.list 文件中填入以下源

#sohu
deb http://mirrors.sohu.com/ubuntu/ trusty main restricted universe multiverse
deb http://mirrors.sohu.com/ubuntu/ trusty-security main restricted universe multiverse
deb http://mirrors.sohu.com/ubuntu/ trusty-updates main restricted universe multiverse
deb http://mirrors.sohu.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb http://mirrors.sohu.com/ubuntu/ trusty-backports main restricted universe multiverse
deb-src http://mirrors.sohu.com/ubuntu/ trusty main restricted universe multiverse
deb-src http://mirrors.sohu.com/ubuntu/ trusty-security main restricted universe multiverse
deb-src http://mirrors.sohu.com/ubuntu/ trusty-updates main restricted universe multiverse
deb-src http://mirrors.sohu.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb-src http://mirrors.sohu.com/ubuntu/ trusty-backports main restricted universe multiverse
#aliyun
deb http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse
#openstack kilo
deb http://ubuntu-cloud.archive.canonical.com/ubuntu trusty-updates/kilo main

  2.安装mariadb服务器

$apt-get install mariadb-server python-mysqldb

    配置 /etc/mysql/conf.d/mysqld_openstack.cnf

[mysqld]
bind-address = 192.168.100.151 #controller的ip地址
default-storage-engine = innodb
innodb_file_per_table
collation-server = utf8_general_ci
init-connect = 'SET NAMES utf8'
character-set-server = utf8

    重新启动数据库

$service mysql restart

    执行数据库安全设置:按照提示一步步的设置,除掉匿名用户,除掉root的远程登录权限等等。

$mysql_secure_installation

  3.安装消息队列rabbitmq

$apt-get install rabbitmq-server

    添加消息队列用户:openstack以及密码

$rabbitmqctl add_user openstack XXXXX

    设置消息队列openstack用户的权限

$rabbitmqctl set_permissions openstack ".*" ".*" ".*"

  

  4.安装keystone

    创建keystone数据库,并将该数据库的完全权限赋予给keystone;可以远程登录,xxxx是密码

$ mysql -u root -p
CREATE DATABASE keystone;
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'xxxx';
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'xxxx';

    使用apache运转keystone

      首先禁止keystone原生启动

$echo "manual" > /etc/init/keystone.override

      安装keystone,等等包

$apt-get install keystone python-openstackclient apache2 libapache2-mod-wsgi memcached python-memcache

      修改 /etc/keystone/keystone.conf,注意admin_token里面设置的字符串可以自己随便填写,但是为了能够在controller中访问keystone,必须设置环境变量OS_TOKEN=xxx

[DEFAULT]
admin_token = xxxx [database]
connection = mysql://keystone:passxxx@controller/keystone [memcache]
servers = localhost: [token]
provider = keystone.token.providers.uuid.Provider
driver = keystone.token.persistence.backends.memcache.Token [revoke]
driver = keystone.contrib.revoke.backends.sql.Revoke [DEFAULT]
verbose = True

      同步keystone数据库

$su -s /bin/sh -c "keystone-manage db_sync" keystone

      修改apache2

        a./etc/apache2/apache2.conf ,添加 ServerName controller

        b.创建配置 /etc/apache2/sites-available/wsgi-keystone.conf

Listen
Listen
<VirtualHost *:>
WSGIDaemonProcess keystone-public processes= threads= user=keystone
display-name=%{GROUP}
WSGIProcessGroup keystone-public
WSGIScriptAlias / /var/www/cgi-bin/keystone/main
WSGIApplicationGroup %{GLOBAL}
WSGIPassAuthorization On
<IfVersion >= 2.4>
ErrorLogFormat "%{cu}t %M"
</IfVersion>
LogLevel info
ErrorLog /var/log/apache2/keystone-error.log
CustomLog /var/log/apache2/keystone-access.log combined
</VirtualHost>
<VirtualHost *:>
WSGIDaemonProcess keystone-admin processes= threads= user=keystone
display-name=%{GROUP}
WSGIProcessGroup keystone-admin
WSGIScriptAlias / /var/www/cgi-bin/keystone/admin
WSGIApplicationGroup %{GLOBAL}
WSGIPassAuthorization On
<IfVersion >= 2.4>
ErrorLogFormat "%{cu}t %M"
</IfVersion>
LogLevel info
ErrorLog /var/log/apache2/keystone-error.log
CustomLog /var/log/apache2/keystone-access.log combined
</VirtualHost>

        c.enable 配置

$ln -s /etc/apache2/sites-available/wsgi-keystone.conf /etc/apache2/sites-enabled

        d.创建服务的wsgi应用

$mkdir -p /var/www/cgi-bin/keystone
$curl http://git.openstack.org/cgit/openstack/keystone/plain/httpd/keystone.py?h=stable/kilo | tee /var/www/cgi-bin/keystone/main /var/www/cgi-bin/keystone/admin
$ chown -R keystone:keystone /var/www/cgi-bin/keystone
$ chmod 755 /var/www/cgi-bin/keystone/*

        e.重新apache2

$service apache2 restart

  5.基本完成,后面就是创建service(服务实例),endpoint(url访问点),project (项目-资源集合),user(用户),domain(客户) role(角色) group(组)了。按照书本上写的一步步来,就可以了。    

    1.创建service,endpoint

      首先必须设置环境变量,还记得我们在配置keystone配置文件里面设置的admin_token吗,下面的xxxx即为你设置的admin_token

$export OS_TOKEN=xxxx
$export OS_URL=http://controller:35357/v2.0

      创建keystone服务

$openstack service create --name keystone --description "OpenStack Identity" identity

      创建访问点endpoint

$openstack endpoint create --publicurl http://controller:5000/v2.0 --internalurl http://controller:5000/v2.0 --adminurl http://controller:35357/v2.0 --region RegionOne identity

    2.创建项目,用户,角色,v3支持domain,group;为了后面的方便,最好按照教程将所有创建动作完成。

$ openstack project create --description "Admin Project" admin
$ openstack user create --password-prompt admin
$ openstack role create admin
$ openstack role add --project admin --user admin admin

用户请求服务过程

当我们使用dashborad时我们知道登陆的时候提供了用户名密码, 后面的处理流程如下

第一步:用这个用户名密码获取临时Token和用户基本信息

第二步:用这个token去查询这个用户的项目信息,(v3之前叫做tenant租户,后面叫做project)

第三步:选择一个项目, 这时重新向keystone请求token和服务endpoint列表

第四步:这时开始利用新的token,
选择向相应服务的endpoint发出请求, 这是service会检查token

第五步:检查是不是有权限, 这就是role policy发挥作用的地方了

第六步:检查通过后, 开始执行请求

第七步:返回结果

    

project<n---1>domain : project为一个资源集,domain对应一个客户,一个客户可能拥有多个项目,因此就有domain存在必要。

user<n---n>project: user是使用用户名密码登录的用户。他可以参与多个project,一个project也可以拥有多个user。

group<n---n>user :  group是管理user的,v3版本使用group与role结合管理用户权限。更加方便,即所有加入该组的用户都有权限。

role 角色,不同的服务对角色有不同的解释规则。(project,user , role) 决定了用户请求某个资源的时候扮演什么角色,而角色的控制权限如何解释在服务中有详细定义。如果user跟project无关,当然不能请求project相应资源,即使有关,具体操作也要看角色。

六.controller安装glance:      

最新文章

  1. Html5下拉控件同时支持文本输入和下拉代码
  2. 小谈MVC 模式
  3. SQLServer2008设置 开启远程连接
  4. js设计模式总结-策略模式
  5. ecshop怎么添加配送方式
  6. FreeMarker 一二事 - 静态模板结合spring展示
  7. ASCII码表 char(9),char(10),char(13)等
  8. gcc 的编译过程
  9. npm 常用命令详解
  10. 初学node.js有感三
  11. 虹软2.0 离线人脸识别 Android 开发 Demo
  12. 18个Python高效编程技巧,Mark!
  13. PTA天梯地图
  14. hdu 1728 迷宫 给定最大转弯次数 (BFS)
  15. Maven install报MojoExecutionException
  16. Scala进阶之路-为什么要学习Scala以及开发环境搭建
  17. django后台导入excel文件
  18. 祝福csdn回望2014,展望2015 大致可以这样总结和展望
  19. 【BZOJ 4455】 4455: [Zjoi2016]小星星 (容斥原理+树形DP)
  20. 003杰信-在jsp页面输入数据,然后在oracle数据库中插入factory数据,当字段允许为空时要特殊处理

热门文章

  1. TF录像存储专项测试
  2. [C++] right value reference
  3. EZOJ #227
  4. 关于神经网络中的padding
  5. Photo4
  6. Java中的Set,List,Map的区别
  7. requests+正则表达式 爬取 妹子图
  8. myisam innodb memory 区别(2)
  9. 3.1.2 condition 条件
  10. HDU 6097 Mindis (计算几何)