zoukankan      html  css  js  c++  java
  • keystone系列四:keystone部署及操作

    一 前言

    任何软件的部署都是没有技术含量的,任何就部署讲部署的人都是江湖骗子。

    部署的本质就是拷贝,粘贴,回车。我们家养了条狗,它可以胜任这件事情。

    我们搞技术的,一定不能迂腐:轻信或者一概不信。

    轻信者的傻逼就像是只学了上半册的葵花宝典,上半册教你欲练此功必先自宫,而下半册说的则是不自宫其实也可以。

    不信者的傻逼就像是马冬什么?马什么梅?什么冬梅?

    二 版本信息

    官网http://docs.openstack.org/newton/install-guide-rdo/keystone.html

    我们按照Newton这个版本来部署,其实跟大家讲,openstack基本保持每6个月更新一个版本,面对如此快的版本更迭,我们其实瞅准了一个版本深入研究下去就好,深入到什么层次,为社区提交代码。任何每来一个新版本就去部署一次的主都是傻叉。

    三 部署keystone

    参考官网http://docs.openstack.org/newton/install-guide-rdo/

    系统信息

    [root@localhost ~]# cat /etc/redhat-release 
    CentOS Linux release 7.0.1406 (Core) 
    [root@localhost ~]# uname -r
    3.10.0-123.el7.x86_64

    step 1:准备阶段

    yum -y install centos-release-openstack-newton #安装官方yum源
    yum -y upgrade #更新
    yum -y install python-openstackclient #安装工具
    yum -y install openstack-selinux #安装openstack-selinux包自动管理openstack组件的安全策略

    step 2:部署mariadb

    安装

    '''
    keystone支持ldap和mysql作为后端Driver,用来存放用户相关信息,catalog等,这里我们选用mariadb
    '''
    yum -y install mariadb mariadb-server python2-PyMySQL 

    配置:/etc/my.cnf.d/openstack.cnf

    [mysqld]
    bind-address = 192.168.31.57 #本机管理网络ip
    
    default-storage-engine = innodb
    innodb_file_per_table
    max_connections = 4096
    collation-server = utf8_general_ci
    character-set-server = utf8

    启动服务且设置开机启动

    
    
    systemctl start mariadb.service
    systemctl enable mariadb.service

    初始化数据库(可有可无)

    mysql_secure_installation

    step 3:部署keystone

    keystone关于数据库的操作

    mysql -u root -p #登入数据库
    CREATE DATABASE keystone; #新建库keystone
    GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' 
      IDENTIFIED BY '123'; #新建本地访问keystone库的账号
    GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' 
      IDENTIFIED BY '123'; #新建远程访问keystone库的账号

    安装软件包

    #keystone软件包名openstack-keystone
    #安装httpd和mod_wsgi的原因是,社区主推apache+keystone
    #openstack-keystone本质就是一款基于wsgi协议的web app,而httpd本质就是一个兼容wsgi协议的web server,所以我们需要为httpd安装mod_wsgi模块
    yum -y install openstack-keystone httpd mod_wsgi

    配置:/etc/keystone/keystone.conf

    #让openstack-keystone能够知道如何连接到后端的数据库keystone
    #mysql+pymysql:pymysql是一个python库,使用python可以操作mysql原生sql
    [database]
    connection = mysql+pymysql://keystone:123@192.168.31.57/keystone
    [token]
    provider = fernet #fernet为生成token的方式

    初始化数据库keystone

    #之所以要初始化,是因为python的orm对象关系映射,需要初始化来生成数据库表结构
    su -s /bin/sh -c "keystone-manage db_sync" keystone

    初始化的时候可能会报错

    瞬间蒙蔽:我命名建立的用户,啥啥的都能访问啊

    初始化Fernet key仓库

    keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
    keystone-manage credential_setup --keystone-user keystone --keystone-group keystone

    step 4:配置web server整合keystone

    修改本机主机名

    hostnamectl set-hostname controller

    配置/etc/hosts

    192.168.31.57 controller

    配置/etc/httpd/conf/httpd.conf

    ServerName controller

    为mod_wsgi模块添加配置文件

    #直接拷贝模块文件或者做软连接都可以
    ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/

    启动httpd服务且设置开机自启

    systemctl start httpd.service
    systemctl enable httpd.service

    四 keystone操作

    part 1:创建keystone的catalog

    配置/etc/keystone/keystone.conf 

    [DEFAULT]
    admin_token = 123

    设置环境变量

    #OS_TOKEN=配置文件中的admin_token
    #会在filter过滤过程中被admin_token_auth中间间设置is_admin=True
    #谁有这个admin_token谁就是管理员了。
    
    export OS_TOKEN=123 #等于keystone.conf中admin_token的值
    export OS_URL=http://192.168.31.57:35357/v3
    export OS_IDENTITY_API_VERSION=3

    为keystone创建catalog

    #基于上一步给的权限,创建认证服务实体
    openstack service create 
      --name keystone --description "OpenStack Identity" identity
    
    #基于上一步建立的服务实体,创建访问该实体的三个api端点
    openstack endpoint create --region RegionOne 
      identity public http://192.168.31.57:5000/v3
      
    openstack endpoint create --region RegionOne 
      identity internal http://192.168.31.57:5000/v3
      
    openstack endpoint create --region RegionOne 
      identity admin http://192.168.31.57:35357/v3

    part 2:创建域,租户,用户,角色,把四个元素关联到一起

    The Identity service provides authentication services for each OpenStack service. The authentication service uses a combination of domainsprojectsusers, and roles.

    建立一个公共的域名:

    openstack domain create --description "Default Domain" default 

    创建管理员信息:

    #创建admin项目
    openstack project create --domain default 
      --description "Admin Project" admin 
    #创建admin用户
    openstack user create --domain default 
      --password-prompt admin
    #创建admin角色
    openstack role create admin
    #创建上述三者的关联
    openstack role add --project admin --user admin admin

    part 3:使用Bootstrap完成part1和part2二者的工作

    Bootstrap the Identity service:

    #本质就是在为keystone创建catalog
    keystone-manage bootstrap --bootstrap-password 123 
      --bootstrap-admin-url http://192.168.31.57:35357/v3/ 
      --bootstrap-internal-url http://192.168.31.57:35357/v3/ 
      --bootstrap-public-url http://192.168.31.57:5000/v3/ 
      --bootstrap-region-id RegionOne

    设置环境变量(is_admin不会被设置成True,admin用户会获得一个Token)

    export OS_USERNAME=admin
    export OS_PASSWORD=123 #就是keystone-manage中设定的--bootstrap-password
    export OS_PROJECT_NAME=admin
    export OS_USER_DOMAIN_NAME=Default
    export OS_PROJECT_DOMAIN_NAME=Default
    export OS_AUTH_URL=http://192.168.31.57:35357/v3
    export OS_IDENTITY_API_VERSION=3

    part 4:创建用于后期测试用的项目,用户,租户,建立关联

    创建project名为demo

    openstack project create --domain default 
      --description "Demo Project" demo

    创建普通用户demo

    openstack user create --domain default 
      --password-prompt demo

    创建普通用户的角色即user

    openstack role create user

    建立关联

    openstack role add --project demo --user demo user

    part 5:为后续的服务创建统一租户service

    解释:后面每搭建一个新的服务都需要在keystone中执行四种操作:1.建项目 2.建用户 3.建角色 4.做关联

    #后面所有的服务公用一个项目service,都是管理员角色admin
    #所以实际上后续的服务安装关于keysotne的操作只剩2,4
    openstack project create --domain default 
      --description "Service Project" service

    五 验证

    part 1:准备

    出于安全考虑,需要关闭临时令牌认证机制(配置文件中的admin_token和keystone-manage的--bootstrap-password都是基于该机制)

    该机制会将用户的请求设置is_admin=True,源码分析中会介绍,先暂且理解到这里

    编辑/etc/keystone/keystone-paste.ini
    将
    [pipeline:public_api]
    [pipeline:admin_api]
    [pipeline:api_v3] 
    中的admin_token_auth都去掉

    取消一切设置的环境变量,如

    unset OS_AUTH_URL OS_PASSWORD

    part 2:验证操作方法一

    管理员用户admin申请token

    openstack --os-auth-url http://controller:35357/v3 
    --os-identity-api-version 3  
    --os-project-domain-name default 
    --os-user-domain-name default   
    --os-project-name admin 
    --os-username admin 
    token issue

    注意:一定要加上--os-identity-api-version 3

    普通用户demo申请token

    openstack --os-auth-url http://controller:5000/v3 
    --os-identity-api-version 3  
    --os-project-domain-name default 
    --os-user-domain-name default   
    --os-project-name demo 
    --os-username demo 
    token issue

    part 3:验证操作方法二

    curl -i 
    -H "Content-Type: application/json" 
    -d '
    {
        "auth": {
            "identity": {
                "methods": [
                    "password"
                ],
                "password": {
                    "user": {
                        "domain":{
                            "name": "default"
                         },
                        "name": "admin",
                        "password": "123"
                    }
                }
             },
             "scope": {
                "project": {
                    "domain": {
                            "name":"default"
                    },
                   "name": "admin"
                }
             }
         }
    }' 
    http://127.0.0.1:5000/v3/auth/tokens

    六 创建脚本

    为了不写一长串的用户信息,可以把他们定义成脚本的方式

    admin-openrc

    export OS_PROJECT_DOMAIN_NAME=Default
    export OS_USER_DOMAIN_NAME=Default
    export OS_PROJECT_NAME=admin
    export OS_USERNAME=admin
    export OS_PASSWORD=123
    export OS_AUTH_URL=http://192.168.31.57:35357/v3
    export OS_IDENTITY_API_VERSION=3
    export OS_IMAGE_API_VERSION=2

    demo-openrc

    export OS_PROJECT_DOMAIN_NAME=Default
    export OS_USER_DOMAIN_NAME=Default
    export OS_PROJECT_NAME=demo
    export OS_USERNAME=demo
    export OS_PASSWORD=123
    export OS_AUTH_URL=http://192.168.31.57:35357/v3
    export OS_IDENTITY_API_VERSION=3
    export OS_IMAGE_API_VERSION=2

    针对不同的业务应该有不同的用户信息,也都应该定义成脚本形式,方便管理

    我们的申请token操作简化成

    source admin-openrc
    openstack token issue

    七 keystone使用套路总结

    (1)user归属于一个或多个Project,并且在每个项目中充当一个角色。所以我们需要创建Project,创建User,创建Role,并将User和Project、Role关联起来;

    创建域,租户,用户,角色,把四个元素关联到一起
    建立一个公共的域名:
    openstack domain create --description "Default Domain" default
    
    管理员:admin
    openstack project create --domain default 
      --description "Admin Project" admin
      
    openstack user create --domain default 
      --password-prompt admin
     
    openstack role create admin
    
    openstack role add --project admin --user admin admin
    
    普通用户:demo
    openstack project create --domain default 
      --description "Demo Project" demo
      
    openstack user create --domain default 
      --password-prompt demo
     
    openstack role create user
    
    openstack role add --project demo --user demo user
    View Code

    (2)Keystone本质是提供Identity服务的,所以它的实现或者提供的机制也是基于用户来设计的。为了提供服务目录,配置Keystone的时候创建了一个特殊的ServiceProject,为每个服务创建对应的用户(Nova, Swift, cinder...),并且都归属于ServiceProject。然后配置、设置相应的Endpoint。

    为后续的服务创建统一租户service,所有的服务公用一个租户service
    openstack project create --domain default 
      --description "Service Project" service
    
    
    建立服务实体service
    openstack service create --name glance 
      --description "OpenStack Image" image
      
    建端点endpoint
    openstack endpoint create --region RegionOne 
      image public http://controller01:9292
      
    
    openstack endpoint create --region RegionOne 
      image internal http://controller01:9292
     
    openstack endpoint create --region RegionOne 
      image admin http://controller01:9292
    View Code 
  • 相关阅读:
    第36课 经典问题解析三
    第35课 函数对象分析
    67. Add Binary
    66. Plus One
    58. Length of Last Word
    53. Maximum Subarray
    38. Count and Say
    35. Search Insert Position
    28. Implement strStr()
    27. Remove Element
  • 原文地址:https://www.cnblogs.com/linhaifeng/p/6269707.html
Copyright © 2011-2022 走看看