您的位置:首页 > 运维架构

安装openstack身份认证服务keystone

2018-11-08 18:11 357 查看
版权声明:本文转载自张晨的博客(https://blog.csdn.net/chansonzhang), 转载请保留本声明! https://blog.csdn.net/chansonzhang/article/details/83865628

前面用vagrant和virtualbox配置了一个虚拟机controller并且使用

vagrant ssh controller
登陆到controller(参考步骤),下面我们在controller中安装身份认证服务keystone
#1 更新源
在/etc/apt/sources.list.d目录下新建grizzly.list
在其中写入如下内容

deb http://ubuntu-cloud.archive.canonical.com/ubuntu precise-proposed/grizzly main

使用

sudo apt-get update
更新源,然后使用
sudo apt-get -y install ubuntu-cloud-keyring
添加
Ubuntu Cloud Archive
密钥。其中
-y
的意思是
Assume Yes to all queries and do not prompt

#2 安装mysql
输入下面的命令设置无交互安装

MYSQL_ROOT_PASS=openstack
MYSQL_HOST=172.16.0.200
echo "mysql-server-5.5 mysql-server/root_password password $MYSQL_ROOT_PASS" |sudo debconf-set-selections
echo "mysql-server-5.5 mysql-server/root_password_again password $MYSQL_ROOT_PASS" |sudo debconf-set-selections
echo "mysql-server-5.5 mysql-server/root_password seen true" |sudo debconf-set-selections
echo "mysql-server-5.5 mysql-server/root_password_again seen true" |sudo debconf-set-selections
export DEBIAN_FRONTEND=noninteractive
sudo apt-get update

然后开始安装mysql

sudo apt-get -q -y install mysql-server

-q
的意思是
Loggable output - no progress indicat

下来执行
sudo sed -i "s/^bind\-address.*/bind-address = ${MYSQL_HOST}/g" /etc/mysql/my.cnf
将/etc/mysql/my.cnf中的所有以
bind-address
开头的字符串替换为
bind-address = 172.16.0.200

sed
g
表示一行多次替换
-i
选项表示直接修改文件内容,否则只是将文件内容输出

重启mysql

sudo service mysql restart

然后执行以下命令

mysql -uroot -p${MYSQL_ROOT_PASS} -h localhost -e "GRANT ALL ON *.* to root@\"localhost\" IDENTIFIED BY \"${MYSQL_ROOT_PASS}\" WITH GRANT OPTION;"
mysql -uroot -p${MYSQL_ROOT_PASS} -h localhost -e "GRANT ALL ON *.* to root@\"${MYSQL_HOST}\" IDENTIFIED BY \"${MYSQL_ROOT_PASS}\" WITH GRANT OPTION;"
mysql -uroot -p${MYSQL_ROOT_PASS} -h localhost -e "GRANT ALL ON *.* to root@\"%\" IDENTIFIED BY \"${MYSQL_ROOT_PASS}\" WITH GRANT OPTION;"
mysqladmin -uroot -p${MYSQL_ROOT_PASS} flush-privileges

#3 安装keystone

sudo apt-get update
sudo apt-get -y install keystone python-keyring

下面是python-keyring的说明:

The Python keyring lib provides a easy way to access the system keyring service from python. It can be used in any application that needs safe password storage.

在mysql中创建一个keystone数据库

mysql -uroot -p${MYSQL_ROOT_PASS} -e "CREATE DATABASE keystone;"

为这个数据库创建一个用户,并设置密码

MYSQL_KEYSTONE_PASS=openstack
mysql -uroot -p${MYSQL_ROOT_PASS} -e "grant all privileges on keystone.* to 'keystone'@'%'"
mysql -uroot -p${MYSQL_ROOT_PASS} -e "set password for 'keystone'@'%'=password('${MYSQL_KEYSTONE_PASS}');"

配置openstack身份认证服务,让其使用mysql数据库

sudo sed -i "s#^connection.*#connection=mysql://keystone:openstack@172.16.0.200/keystone#" /etc/keystone/keystone.conf

这里需要说明的是所有跟在s后面的符号都被sed当做分隔符,之所以不用默认分隔符

/
是为了和连接字符串中的
/
区别开来。

配置超级用户admin的token

sudo sed -i "s/^# admin_token.*/admin_token = ADMIN/" /etc/keystone/keystone.conf

配置keystone的签名加密方式,Grizzly版本开始可以支持PKI(Public Key Infrastructure),我们这里设置为UUID(Universally Unique Identifier)

sudo sed -i "s/^#token_format.*/token_format = UUID/" /etc/keystone/keystone.conf

重启keystone服务

sudo stop keystone
sudo stop keystone

使用

sudo keystone-manage db_sync
为keystone数据库填充必要的数据表
可能报错
ImportError: No module named MySQLdb

解决方案
sudo apt-get install python-mysqldb

重新执行
sudo keystone-manage db_sync

至此,openstack身份认证服务keystone安装完成。

#创建租户、用户、角色
使用

vagrant ssh controller
登录到 controller
安装ubuntu客户端

sudo apt-get update
sudo apt-get -y install python-keystoneclient

配置环境变量

export ENDPOINT=172.16.0.200
export SERVICE_TOKEN=ADMIN
export SERVICE_ENDPOINT=http://${ENDPOINT}:35357/v2.0

创建两个租户

keystone tenant-create --name cookbook --description "Default Cookbook Tenant" --enabled true
keystone tenant-create --name admin --description "Admin Tenant" --enabled true

创建两个角色

keystone role-create --name admin
keystone role-create --name Member

获取cookbook租户的id

TENANT_ID=$(keystone tenant-list |awk '/ cookbook/{print $2}')

创建admin用户

PASSWORD=openstack
keystone user-create --name admin --tenant_id $TENANT_ID --pass $PASSWORD --email root@localhost --enable=true

给用户admin添加一个角色admin

ROLE_ID=$(keystone role-list|awk '/admin/{print $2}')
USER_ID=$(keystone user-list|awk '/admin/{print $2}')
keystone user-role-add --user $USER_ID --role $ROLE_ID --tenant_id $TENANT_ID

继续给admin用户添加全局的admin角色

TENANT_ID=$(keystone tenant-list |awk '/admin/{print $2}')
keystone user-role-add --user $USER_ID --role $ROLE_ID --tenant_id $TENANT_ID

在cookbook租户中创建一个demo用户,并为其添加Member角色

TENANT_ID=$(keystone tenant-list |awk '/cookbook/{print $2}')
keystone user-create --name demo --tenant_id $TENANT_ID --pass $PASSWORD --email demo@localhost --enable=true
ROLE_ID=$(keystone role-list|awk '/Member/{print $2}')
USER_ID=$(keystone user-list|awk '/demo/{print $2}')
keystone user-role-add --user $USER_ID --role $ROLE_ID --tenant_id $TENANT_ID

#定义服务端点
定义计算服务nova、EC2和镜像服务glance、身份认证服务keystone以及存储服务volume的服务

keystone service-create --name nova --type compute --description 'Openstack Compute Service'
keystone service-create --name ec2 --type ec2 --description 'EC2 Service'
keystone service-create --name glance --type image --description 'Openstack Image Service'
keystone service-create --name keystone --type identity --description 'Openstack Identity Service'
keystone service-create --name volume --type volume --description 'Volume Service'

创建上面5个服务对应的服务端点

NOVA_SERVICE_ID=$(keystone service-list|awk '/nova/{print $2}')
PUBLIC="http://$ENDPOINT:8774/v2/\$(tenant_id)s"
ADMIN=$PUBLIC
INTERNAL=$PUBLIC
keystone endpoint-create --region RegionOne --service_id $NOVA_SERVICE_ID --publicurl $PUBLIC --adminurl $ADMIN --internalurl $INTERNAL
EC2_SERVICE_ID=$(keystone service-list|awk '/ec2/{print $2}')
PUBLIC="http://$ENDPOINT:8773/services/Cloud"
ADMIN="http://$ENDPOINT:8773/services/Admin"
INTERNAL=$PUBLIC
keystone endpoint-create --region RegionOne --service_id $EC2_SERVICE_ID --publicurl $PUBLIC --adminurl $ADMIN --internalurl $INTERNA
GLANCE_SERVICE_ID=$(keystone service-list|awk '/glance/{print $2}')
PUBLIC="http://$ENDPOINT:9292/v1"
ADMIN=$PUBLIC
INTERNAL=$PUBLIC
keystone endpoint-create --region RegionOne --service_id $GLANCE_SERVICE_ID --publicurl $PUBLIC --adminurl $ADMIN --internalurl $INTERNAL
KEYSTONE_SERVICE_ID=$(keystone service-list|awk '/keystone/{print $2}')
PUBLIC="http://$ENDPOINT:5000/v2.0"
ADMIN="http://$ENDPOINT:35357/v2.0"
INTERNAL=$PUBLIC
keystone endpoint-create --region RegionOne --service_id $KEYSTONE_SERVICE_ID --publicurl $PUBLIC --adminurl $ADMIN --internalurl $INTERNAL
CINDER_SERVICE_ID=$(keystone service-list|awk '/volume/{print $2}')
PUBLIC="http://$ENDPOINT:8776/v1/%(tenant_id)s"
ADMIN=$PUBLIC
INTERNAL=$PUBLIC
keystone endpoint-create --region RegionOne --service_id $CINDER_SERVICE_ID --publicurl $PUBLIC --adminurl $ADMIN --internalurl $INTERNAL

创建一个service租户,并在这个租户内为上述服务创建用户

vagrant@controller:/$ keystone tenant-create --name service --description "Service Tenant" --enabled true
vagrant@controller:/$ SERVICE_TENANT_ID=$(keystone tenant-list|awk '/service/{print $2}')
vagrant@controller:/$ keystone user-create --name nova --pass nova --tenant_id $SERVICE_TENANT_ID --email nova@localhost --enabled true
vagrant@controller:/$ keystone user-create --name glance --pass glance --tenant_id $SERVICE_TENANT_ID --email glance@localhost --enabled true
vagrant@controller:/$ keystone user-create --name keystone --pass keystone --tenant_id $SERVICE_TENANT_ID --email keystone@localhost --enabled true
vagrant@controller:/$ keystone user-create --name cinder --pass cinder --tenant_id $SERVICE_TENANT_ID --email cinder@localhost --enabled true

接下来,为上述用户添加admin角色

vagrant@controller:/$ ADMIN_ROLE_ID=$(keystone role-list|awk '/admin/{print $2}')
vagrant@controller:/$ NOVA_USER_ID=$(keystone user-list|awk '/nova/{print $2}')
vagrant@controller:/$ GLANCE_USER_ID=$(keystone user-list|awk '/glance/{print $2}')
vagrant@controller:/$ KEYSTONE_USER_ID=$(keystone user-list|awk '/keystone/{print $2}')
vagrant@controller:/$ CINDER_USER_ID=$(keystone user-list|awk '/cinder/{print $2}')
vagrant@controller:/$ keystone user-role-add --user $NOVA_USER_ID --role $ADMIN_ROLE_ID --tenant_id $SERVICE_TENANT_ID
vagrant@controller:/$ keystone user-role-add --user $GLANCE_USER_ID --role $ADMIN_ROLE_ID --tenant_id $SERVICE_TENANT_ID
vagrant@controller:/$ keystone user-role-add --user $KEYSTONE_USER_ID --role $ADMIN_ROLE_ID --tenant_id $SERVICE_TENANT_ID
vagrant@controller:/$ keystone user-role-add --user $CINDER_USER_ID --role $ADMIN_ROLE_ID --tenant_id $SERVICE_TENANT_ID
阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: