OpenStack newton版安装教程(1)——keystone部分
一、OpenStack简介
OpenStack是一个管理虚拟机的平台,通常和KVM结合使用(所以当OpenStack出现问题的时候,只要KVM没挂掉那么上面的服务也不会中断,可以通过单机方式管理KVM,然后再修复OpenStack)。OpenStack平台将计算、网络、存储等服务集中进行管理。其常用组件如下:
Horizon:OpenStack的Dashboard,也就是图形化管理界面。该服务异常的话无法通过WEB界面对虚拟机进行管理
Nova:提供计算服务,比如虚拟机的建立、开关机等都和它有关,该服务异常的话无法新建虚拟机,已经创建的不受影响
Neutron:提供网络服务,IP配置等都和它有关
Keystone:提供认证服务,每一个服务都需要经过它来认证,它的作用就像是一个注册中心,用户只需要访问它就可以知道其他服务的地址
Glance:提供和管理镜像的服务
Cinder:提供块存储服务
其他:要完整的去部署一套OpenStack的话,除了上述组件外,还需要MySQL、RabbitMQ消息队列(用于各服务之间的通信)、Apache(用于WEB界面)、Memcached(缓存令牌信息)的支持
二、keystone相关概念
OpenStack平台中所有服务的授权和认证都需要经过keystone,它就像是一个注册中心,收集了所有服务的相关信息,这些服务要告诉Keystone自己是干嘛的以及自己的接口地址,也就是服务端口endpoint。用户需要使用这些服务的时候找注册中心就可以了。所以它是OpenStack平台中需要第一个安装的服务。服务在经过keystone身份认证后会得到一个授权秘钥,该秘钥用于在各个服务之间完成授权认证与数据传输。keystone经过配置后会为用户创建合适的角色、服务、租户、用户、API、服务端点、区域等服务,这些服务构成了云平台的基础设施。下面是keystone中一些名词解释:
用户(user):即某个项目的管理账户或使用账户。用户必须存在于某一个租户的某一个角色中才会有相关的权限,一个用户可以属于多个项目和多个角色
项目(project):有点类似组的概念。每个user必须在该project中才可以访问该project的资源,老版本中项目也叫做租户(tenant)
角色(role):权限的集合,即某个项目某个用户的权限。OpenStack在keystone创建后就会有两个默认角色,分别是管理员admin和普通用户member,这2个角色信息在/etc/keystone/policy.json中已被定义。
服务(service):neutron、glance、nova都属于服务
端点(endpoint):OpenStack的服务都运行在一个特定的URL与端口上,这些就是服务的端点地址。当客户端连接OpenStack时,keystone对已经定义的endpoint进行查询,并向客户端返回所需要的服务端点地址,以便客户端连接和使用。可以把endpoint理解为是一个服务暴露出来的访问点,如果需要访问这个服务,就需要知道它的endpoint,而endpoint一般是一个URL,知道了这个URL就可以访问这个服务。endpoint一般同时具备public、private和admin三种权限。public URL可以被全局访问,private URL只能被局域网访问,admin URL则从常规的访问中被分离了。
区域(zone):可以简单的理解为地域的划分,因为云平台一般会存在跨区域跨IDC的情况。在OpenStack中根据不同区域定义不同的endpoint。比如上海区域会有public、private、admin三个URL,在北京区域也应该定义三个服务端点URL
令牌(token):可以理解为秘钥,用户通过用户名和密码获取在某个项目的token实现登录
数据库:为便于记录所需验证组件、服务的信息,OpenStack需要数据库作为信息存储的主要手段,主要使用的是MySQL/MariaDB
三、配置OpenStack官方Yum源和客户端工具
通过YUM安装是最佳实现方式,所以在安装OpenStack组件之前要配置好OpenStack的官方YUM源。使用EPEL或者阿里云Yum仓库(在Centos/cloud中)都可以安装OpenStack的源,如图:
在控制节点+计算节点都执行以下命令安装OpenStack的yum源和OpenStack的客户端工具
yum install centos-release-openstack-newton -y #安装该软件包后会创建openstack客户端的yum源 yum upgrade -y yum install python-openstackclient openstack-selinux openstack-utils -y #安装客户端和selinux自动管理工具
四、在控制节点安装OpenStack相关环境(Chrony、MySQL、RabbitMQ、Memcached、Httpd)
1、安装chrony服务保证时间同步
可以把控制节点作为NTP服务端,计算节点作为客户端,该工具在CentOS 7中已经默认装好,做配置即可
server 10.0.0.11 iburst #把内网卡作为互相通信的网卡 allow 10.0.0.0/24 #允许该网段的IP进行时间同步 systemctl restart chronyd.service systemctl enable chronyd.service chronyc sources #验证服务
2、安装mariadb,并且为keystone创建用户并授权
yum install mariadb mariadb-server python2-pymysql -y vi /etc/my.cnf.d/openstack.cnf [mysqld] default-storage-engine = innodb #使用innodb引擎 innodb_file_per_table #innodb适用于每一张表 bind-address = 192.168.100.100 #本机IP,admin网段 max_connections =4096 collation-server = utf8_general_ci #中文编码的支持 character-set-server = utf8 #同上 systemctl enable mariadb.serivce systemctl start mariadb.service mysql > create database keystone; mysql > grant all privileges on keystone.* to 'keystone'@'localhost' identified by '123456'; mysql > grant all privileges on keystone.* to 'keystone'@'%' identified by '123456'; mysql > flush privileges;
3、安装RabbitMQ消息队列提供各组件通信功能,RabbitMQ运行后监听在5672端口
yum install rabbitmq-server systemctl start rabbitmq-server systemctl enable rabbitmq-server
修改RabbitMQ默认用户guest的密码(RabbitMQ默认的管理员账户密码都是guest),或者为OpenStack新建一个用户
rabbitmqctl change_password guest NEWPASSWORD #修改默认用户的密码 rabbitmqctl add_user openstack RABBIT_PASSWORD #创建一个openstack用户,密码请自定义 rabbitmqctl set_permissions openstack ".*" ".*" ".*" #给新建用户所有权限 rabbitmqctl set_user_tags openstack administrator #设置openstack用户的角色为admin,官方文档没有做这一步,貌似会登录不上MQ的web界面 rabbitmqctl list_users #查看当前用户信息
安装RabbitMQ的Web插件,实现可视化管理。装好后可以通过网页访问RabbitMQ,访问地址是http://ip:15672,如果访问异常,请记得关闭selinux和iptables
rabbitmq-plugins enable rabbitmq_management rabbitmq_management_agent rabbitmq_web_dispatch webmachine mochiweb amqp_client #安装插件 rabbitmq-plugins list #查看当前插件 systemctl restart rabbitmq.service #重启服务
4、安装httpd、memcached(keystone是依赖于httpd来提供服务的)
yum install httpd mod_wsgi memcached -y echo "OPTIONS=\"-l 0.0.0.0\"" >> /etc/sysconfig/memcached #修改memcached监听的网卡 systemctl enable memcached.service systemctl start memcached.service
五、OpenStack组件安装步骤
OpenStack的各个组件在安装时都可以遵循以下套路(除了Keystone自身稍有不同):
1、在mysql中创库授权
2、在keystone中创建用户并关联角色
3、在keystone中注册API
4、使用yum安装组件
5、修改服务配置文件
6、同步数据库
7、启动服务
六、安装Keystone
1、安装keystone
yum install openstack-keystone -y
2、编辑keystone配置文件/etc/keystone/keystone.conf(安装好openstack-utils后也可以使用openstack-config命令行实现配置修改)
openstack-config --set /etc/keystone/keystone.conf database connection mysql+pymysql://keystone:MYSQLPASSWORD@CONTROLLER_IP/keystone openstack-config --set /etc/keystone/keystone.conf token provider fernet
直接编辑文件的方式:
[database] connection = mysql+pymysql://keystone:DBPASS@CONTROLLER_IP/keystone #这里填写了数据库用户名、密码以及主机名(或IP) [token] provider = fernet #配置令牌的提供者为fernet,fernet是一种随机数的生成方法
3、初始化数据库,-s选项指定了执行的shell,-c选项是使用指定的用户执行命令然后退出该用户,这里使用keystone用户执行了keystone-manage db_sync这条命令来初始化keystone数据库。执行成功后查看keystone数据库进行验证,如果看到生成了相关数据代表成功。记住用户一定要是keystone,否则生成的文件属主不对会导致服务出错
su -s /bin/sh -c "keystone-manage db_sync" keystone
4、初始化fernet仓库(因为在第3步里对token采用了fernet技术来加密)
keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone keystone-manage credential_setup --keystone-user keystone --keystone-group keystone
5、发布创建keystone endpoint服务入口以及管理密码
keystone-manage bootstrap \ --bootstrap-password 0BcDemU0ER9HIAiQ #修改keystone的admin密码 --bootstrap-admin-url http://CONTROLLER_IP:35357/v3/ --bootstrap-internal-url http://CONTROLLER_IP:35357/v3/ --bootstrap-public-url http://CONTROLLER_IP:5000/v3/ --bootstrap-region-id RegionOne #每组endpoint包含的admin、internal、public都要对应一组区域,区域名以ReginOne,ReginTwo,以此类推
6、配置httpd并启动服务,注意做好配置文件的软连接,启动服务后keystone会监听于5000(普通用户)和35357(管理员)端口
sed -i "s/#ServerName www.example.com:80/ServerName CONTROLLER_IP/" /etc/httpd/conf/httpd.conf #设置ServerName为控制节点的IP或主机名 ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/ #该配置文件来自openstack-keystone这个包,做软连接给apache systemctl enable httpd.service systemctl start httpd.service
7、创建域、项目、用户和角色。这里为nova、neutron等组件创建了一个项目叫做service。在前面做初始化的时候其实还自动创建了一个admin的项目用于管理账号。
openstack project create --domain default --description "Service Project" service #创建一个项目叫做service,它属于default默认域 openstack project create --domain default --description "Mytest Project" test #创建一个项目叫做test openstack role create user #创建一个角色为user openstack user create --domain default --password yourpasswor test #创建一个test用户,它属于default默认域 openstack role add --project test --user test user #把用户test加入到test项目并赋予为user角色
上面的操作其实可以复用到后面为nova等组件创建用户和授权,过程基本是一样的,这里提前给个示例(可不执行):
openstack user create --domain default --password-prompt nova openstack role add --project service --user nova admin
8、上一步执行完成后,Keystone的安装其实已经完成。在官网文档中有一个验证步骤,使用了一长串命令进行操作。这是因为配置环境变量前需要用参数的形式把信息传递过去。如果配置好环境变量就可以简化命令行了。安装其他服务或者需要用到OpenStack的命令进行维护都需要先执行该变量才可以,如果报错401基本就是密码不对
cat > /root/admin-openrc << EOF
export OS_USERNAME=admin
export OS_PASSWORD=0BcDemU0ER9HIAiQ #这里需要填写第5步所创建的keystone密码
export OS_PROJECT_NAME=admin #项目
export OS_USER_DOMAIN_NAME=default #域,类似阿里云华北区、华东区的概念
export OS_PROJECT_DOMAIN_NAME=default
export OS_AUTH_URL=http://CONTROLLER_IP:35357/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
EOF
source /root/admin-openrc
9、使用命令验证信息,基本就是各种list,如果创建错了东西需要删除的话,先list出信息然后使用delete即可
openstack token issue #查看所有用户的token信息 openstack service list openstack user list #查看用户列表 openstack role list #查看角色列表 openstack project list #查看项目列表 openstack endpoint list openstack endpoint delete xxx #删除端点示例
至此keystone已经搭建完成,下一步就是Glance的部署了
评论