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

OpenStack 最小化安装配置(五):KeyStone服务配置

2014-12-21 19:35 507 查看
前面的配置都算比较简单。接下来这个KeyStone服务算是比较难受的。我也配了好久,这里我设置我的Keystone的虚拟机IP地址为192.168.137.104.内部通信的IP 为192.168.1.104 首先第一步要做的事情肯定是安装服务。以下是我的安装脚本。

keystone_install.sh

apt-get update
apt-get install -y keystone python-keystone python-keystoneclient python-mysqldb
安装好之后修改配置文件/etc/keystone/keystone.conf

在[DEFAULT]下添加一句话

admin_token = grizzly
然后在

[database]做如下修改

#connection = sqlite:////var/lib/keystone/keystone.db
connection = mysql://keystoneUser:keystonePass@192.168.1.102/keystone
把原来的connection键值对注释掉。由于它原来要用的是sqlite数据库,我们这里采用MySQL数据库,以上面的格式对应了用户名keystoneUser密码keystonePass,还有数据库的ip地址,最后我们要访问的数据库叫做keystone这些都是之前创建数据库的时候创建的如果不喜欢可以自己修改。记得对应就可以了。

重启服务。

service keystone restart


接着要同步数据表。

keystone-manage db_sync

如果没有报错,同步成功。

接下来要添加用户了。

下面我编写脚本setting.sh 首先定义一些环境变量

setting.sh

#!/bin/bash
#这个脚本用来定义一些环境变量
#作者用的是G 版,这个算是版本代号吧
export ADMIN_TOKEN="grizzly"

#OpenStack keystone service system
#创建系统管理员用户名,密码,邮箱,还有租户。
export KEYSTONE_SYSTEM_ADMIN_USER_NAME="admin"
export KEYSTONE_SYSTEM_ADMIN_USER_PASS="adminPassword"
export KEYSTONE_SYSTEM_ADMIN_USER_EMAIL="hengrj@126.com"
export KEYSTONE_SYSTEM_ADMIN_TENANT_NAME="adminTenant"
#这个是系统租户,Keystone,Glance,Nova这些系统用户的所属租户
export KEYSTONE_SYSTEM_SERVICE_TENANT_NAME="serviceTenant"

export KEYSTONE_SYSTEM_TEST1_TENANT_NAME="aipuTenant"
export KEYSTONE_SYSTEM_TEST1_MANAGER_NAME="aipumanager"
export KEYSTONE_SYSTEM_TEST1_MANAGER_PASS="aipu123"
export KEYSTONE_SYSTEM_TEST1_MEMBER_NAME="aipumember"
export KEYSTONE_SYSTEM_TEST1_MEMBER_PASS="aipu123"

export KEYSTONE_SYSTEM_TEST2_TENANT_NAME="maotaiTenant"
export KEYSTONE_SYSTEM_TEST2_USER_NAME="maotai"
export KEYSTONE_SYSTEM_TEST2_USER_PASS="maotai123"

#系统用户的基本信息三个系统用户都是属于serviceTenant租户.
export KEYSTONE_SERVER_IP=192.168.1.104
export KEYSTONE_KEYSTONE_SERVICE_NAME="keystone"
export KEYSTONE_KEYSTONE_USER_NAME="keystone"
export KEYSTONE_KEYSTONE_USER_PASS="Keystone_Pass"

export GLANCE_SERVER_IP=192.168.1.105
export KEYSTONE_GLANCE_SERVICE_NAME="glance"
export KEYSTONE_GLANCE_USER_NAME="glance"
export KEYSTONE_GLANCE_USER_PASS="Glance_Pass"

export NOVA_SERVER_IP=192.168.1.106
export KEYSTONE_NOVA_SERVICE_NAME="nova"
export KEYSTONE_NOVA_USER_NAME="nova"
export KEYSTONE_NOVA_USER_PASS="Nova_Pass"


上面只是创建了一些环境变量。我们需要做的是把这些所需要的用户通过keystone的命令导入进去Keystone的数据库中

下面是我的创建脚本我是抄作者的。不过意思我大概都理解了,添加了注释

#!/bin/bash
. ./settings.sh

#Synchronize database
keystone-manage db_sync

#Keystone system env, support this scripts
export SERVICE_TOKEN=$ADMIN_TOKEN
export SERVICE_ENDPOINT="http://$KEYSTONE_SERVER_IP:35357/v2.0"

#Used to get id
get_id()
{
echo `$@ | awk '/ id / { print $4 }'`
}

#Create Tenants
echo 'create Tanants'
ADMIN_TENANT_ID=$(get_id keystone tenant-create --name=$KEYSTONE_SYSTEM_ADMIN_TENANT_NAME)
SERVICE_TENANT_ID=$(get_id keystone tenant-create --name=$KEYSTONE_SYSTEM_SERVICE_TENANT_NAME)

#Following is for testing
TEST1_TENANT_ID=$(get_id keystone tenant-create --name=$KEYSTONE_SYSTEM_TEST1_TENANT_NAME)
TEST2_TENANT_ID=$(get_id keystone tenant-create --name=$KEYSTONE_SYSTEM_TEST2_TENANT_NAME)

#Create Users
echo 'create users'

ADMIN_USER_ID=$(get_id keystone user-create --name=$KEYSTONE_SYSTEM_ADMIN_USER_NAME \
--pass=$KEYSTONE_SYSTEM_ADMIN_USER_PASS --email=$KEYSTONE_SYSTEM_ADMIN_USER_MAIL)

TEST1_MANAGER_USER_ID=$(get_id keystone user-create --name=$KEYSTONE_SYSTEM_TEST1_MANAGER_NAME \
--pass=$KEYSTONE_SYSTEM_TEST1_MANAGER_PASS --email=$KEYSTONE_SYSTEM_ADMIN_USER_MAIL)

TEST1_MEMBER_USER_ID=$(get_id keystone user-create --name=$KEYSTONE_SYSTEM_TEST1_MEMBER_NAME \
--pass=$KEYSTONE_SYSTEM_TEST1_MEMBER_PASS --email=$KEYSTONE_SYSTEM_ADMIN_USER_MAIL)

TEST2_USER_ID=$(get_id keystone user-create --name=$KEYSTONE_SYSTEM_TEST2_USER_NAME \
--pass=$KEYSTONE_SYSTEM_TEST2_USER_PASS --email=$KEYSTONE_SYSTEM_ADMIN_USER_MAIL)

#Create Roles

echo 'create roles'
ADMIN_ROLE_ID=$(get_id keystone role-create --name=admin)
PROJECTMANAGER_ROLE_ID=$(get_id keystone role-create --name=projectmanager)
MEMBER_ROLE_ID=$(get_id keystone role-create --name=Member)
KEYSTONEADMIN_ROLE_ID=$(get_id keystone role-create --name=KeystoneAdmin)
KEYSTONESERVICE_ROLE_ID=$(get_id keystone role-create --name=KeystoneServiceAdmin)

echo "***************GRANT admin user on admin role to all tenant except serviceTenant*******"

echo "ADMIN_TENANT_ID: " $ADMIN_TENANT_ID
echo "ADMIN_USER_ID: " $ADMIN_USER_ID
echo "ADMIN_ROLE_ID: " $ADMIN_ROLE_ID

echo "Let admin user could manager all the tenant: Add adminuser with adminroles to all Tenants"
keystone user-role-add --user $ADMIN_USER_ID --tenant_id $ADMIN_TENANT_ID --role $ADMIN_ROLE_ID
keystone user-role-add --user $ADMIN_USER_ID --tenant_id $SERVICE_TENANT_ID --role $ADMIN_ROLE_ID

keystone user-role-add --user $ADMIN_USER_ID --tenant_id $TEST1_TENANT_ID --role $ADMIN_ROLE_ID
keystone user-role-add --user $ADMIN_USER_ID --tenant_id $TEST2_TENANT_ID --role $ADMIN_ROLE_ID

keystone user-role-add --user $ADMIN_USER_ID --tenant_id $TEST1_TENANT_ID --role $PROJECTMANAGER_ROLE_ID
keystone user-role-add --user $ADMIN_USER_ID --tenant_id $TEST2_TENANT_ID --role $PROJECTMANAGER_ROLE_ID

echo "******************these things, I did not know why ****************"
keystone user-role-add --user $ADMIN_USER_ID --tenant_id $ADMIN_TENANT_ID --role $KEYSTONEADMIN_ROLE_ID
keystone user-role-add --user $ADMIN_USER_ID --tenant_id $ADMIN_TENANT_ID --role $KEYSTONESERVICE_ROLE_ID

echo "**********************************GRANT test1 manager and member with related roles to test1tenant **********"
keystone user-role-add --user $TEST1_MANAGER_USER_ID --tenant_id $TEST1_TENANT_ID --role $PROJECTMANAGER_ROLE_ID
keystone user-role-add --user $TEST1_MEMBER_USER_ID --tenant_id $TEST1_TENANT_ID --role $MEMBER_ROLE_ID
keystone user-role-add --user $TEST2_USER_ID --tenant_id $TEST2_TENANT_ID --role $PROJECTMANAGER_ROLE_ID

echo "********************************create, nova , glance ......on serviceTenant ****************to tenant"
NOVA_USER_ID=$(get_id keystone user-create --name=$KEYSTONE_NOVA_USER_NAME \
--pass=$KEYSTONE_NOVA_USER_PASS \
--tenant_id $SERVICE_TENANT_ID \
--email=hengrj@126.com)

keystone user-role-add --tenant_id $SERVICE_TENANT_ID \
--user $NOVA_USER_ID \
--role $ADMIN_ROLE_ID

GLANCE_USER_ID=$(get_id keystone user-create --name=$KEYSTONE_GLANCE_USER_NAME \
--pass=$KEYSTONE_GLANCE_USER_PASS \
--tenant_id $SERVICE_TENANT_ID \
--email=hengrj@126.com)

keystone user-role-add --tenant_id $SERVICE_TENANT_ID \
--user $GLANCE_USER_ID \
--role $ADMIN_ROLE_ID

KEYSTONE_USER_ID=$(get_id keystone user-create --name=$KEYSTONE_KEYSTONE_USER_NAME \
--pass=$KEYSTONE_KEYSTONE_USER_PASS \
--tenant_id $SERVICE_TENANT_ID \
--email=hengrj@126.com)

keystone user-role-add --tenant_id $SERVICE_TENANT_ID \
--user $KEYSTONE_USER_ID \
--role $ADMIN_ROLE_ID

echo "*************************************create service ******************** to tenant"
NOVA_SERVICE_ID=$(get_id keystone service-create --name=$KEYSTONE_NOVA_SERVICE_NAME --type=compute --description="Nova")
GLANCE_SERVICE_ID=$(get_id keystone service-create --name=$KEYSTONE_GLANCE_SERVICE_NAME --type=image --description="Keystone")
KEYSTONE_SERVICE_ID=$(get_id keystone service-create --name=$KEYSTONE_KEYSTONE_SERVICE_NAME --type=identity --description="Keystone")

echo "***********************************create endpoint ************************"
keystone endpoint-create --region RegionOne \
--service_id=$NOVA_SERVICE_ID \
--publicurl="http://$NOVA_SERVER_IP:8774/v2/%(tenant_id)s" \
--adminurl="http://$NOVA_SERVER_IP:8774/v2/%(tenant_id)s" \
--internalurl="http://$NOVA_SERVER_IP:8774/v2/%(tenant_id)s"

keystone endpoint-create --region RegionOne \
--service_id=$GLANCE_SERVICE_ID \
--publicurl=http://$GLANCE_SERVER_IP:9292/v1 \
--adminurl=http://$GLANCE_SERVER_IP:9292/v1 \
--internalurl=http://$GLANCE_SERVER_IP:9292/v1

keystone endpoint-create --region RegionOne \
--service_id=$KEYSTONE_SERVICE_ID \
--publicurl=http://$KEYSTONE_SERVER_IP:5000/v2.0 \
--adminurl=http://$KEYSTONE_SERVER_IP:35357/v2.0 \
--internalurl=http://$KEYSTONE_SERVER_IP:5000/v2.0

echo "finished"
亲测可用。如果出现错误有可能是之前的服务没有做好。要根据实际情况检查下才行。

简单测试一下,如果成功了。运行以下命令

keystone user-list




会得到一些用户信息,一般失败的话在脚本导入的时候就已经有错误报告了。如果正常的话

执行了source keystone.sh后结果会十分和谐。



好了,Keystone认证服务基本上已经完成了,这个服务其实要配置的文件不多。比较多的是脚本。只要有这个脚本作为模板以后可以添加更多的用户,还有租户等等。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: