zoukankan      html  css  js  c++  java
  • Centos7安装部署openstack--Keystone认证服务

    一、openstack概述

      1、拓扑图

             

       Horizon 是一个 dashboard 就是一个控制面板 Celiometer 是一个监控计费 像快照,配置都要计费的 Keystone 是一个登录认证 像有些网站都是qq登录 或者微信登录 Heat 是一个编排服务(playbook) 就是通过定义剧本 来批量启动一系列的虚拟机,然后一键实现一个集群的搭建(利用ansible 来执行) swift 是一个对象存储 就是用户的东西不在是存在某一个目录下面,因为传统的目录下没有数据库,而swift (对象存储 )就专门建一个数据库 把每一个文件当成一个记录对象,而不是目录级别的,就是一个文件变成数据库里的一条记录。

      2、openstck架构(soa架构

        模块:(keystone认证服务,glance镜像服务,nova计算服务,neutron网络服务,cinder存储服务,horizon web界面)

      3、soa架构

        SOA:拆业务,把每一个功能都拆成一个独立的web服务,每一个独立的web服务,至少拥有一个集群。

        开源的微服框架 :阿里开源的dubbo 、spring boot。

    二、安装keystone认证服务

      1、安装服务

    [root@controller ]#yum install openstack-keystone httpd mod_wsgi -y                      mod_wsgi提供http服务与python之间的连接

      2、在你配置 OpenStack 身份认证服务前,你必须创建一个数据库和管理员令牌。

    [root@controller ~]# mysql -u root -p
    MariaDB [(none)]> CREATE DATABASE keystone;
    MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost'  IDENTIFIED BY 'KEYSTONE_DBPASS';
    MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%'  IDENTIFIED BY 'KEYSTONE_DBPASS';

      3、生成一个随机值在初始的配置中作为管理员的令牌。

    [root@controller ~]# openssl rand -hex 10

      4、修改配置文件

    [root@controller ]# cp /etc/keystone/keystone.conf /etc/keystone/keystone.conf.bak                       备份配置文件
    [root@controller ]# grep -Ev '^$|#' /etc/keystone/keystone.conf.bak >/etc/keystone/keystone.conf         过滤掉空格和注释,然后导入配置文件
    [root@controller ]# vim /etc/keystone/keystone.conf                                                      编辑配置文件,如下图
    [root@controller ]# md5sum /etc/keystone/keystone.conf 用MD5记录配置文件

    [DEFAULT]
    ...
    admin_token = ADMIN_TOKEN

    [database]
    ...
    connection = mysql+pymysql://keystone:KEYSTONE_DBPASS@controller/keystone

    [token]
    ...
    provider = fernet

      

       5、安装专门用于修改配置文件的服务

    [root@controller ]# yum install openstack-utils -y
    [root@controller ]# grep -Ev '^$|#' /etc/keystone/keystone.conf.bak >/etc/keystone/keystone.conf                  还原刚第二步修改的配置文件
    [root@controller ]# openstack-config --set /etc/keystone/keystone.conf DEFAULT admin_token ADMIN_TOKEN            用工具修改配置文件
    [root@controller ]# openstack-config --set /etc/keystone/keystone.conf database connection mysql+pymysql://keystone:KEYSTONE_DBPASS@controller/keystone
    [root@controller ]# openstack-config --set /etc/keystone/keystone.conf token provider fernet
    [root@controller ]# cat /etc/keystone/keystone.conf                                                               查看配置文件
    [root@controller ]# md5sum /etc/keystone/keystone.conf                                                            查看修改的配置文件与上一步手动修改的配置文件MD5值

      6、初始化身份认证服务的数据库

    [root@controller ]# mysql keystone -e 'show tables;'                                                     切换到数据库,查看数据库下面的表
    [root@controller ~]# su -s /bin/sh -c "keystone-manage db_sync" keystone 同步数据库,同步完成在去查看,就会多出很多表

       7、初始化Fernet keys

    [root@controller ~]# keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone

      初始化之后,在 /etc/keystone/下面会多出fernet-keys的文件夹

         

       8、配置 Apache HTTP 服务器

    [root@controller ~]# echo "ServerName controller" >> /etc/httpd/conf/httpd.conf

      9、用下面的内容创建`/etc/httpd/conf.d/wsgi-keystone.conf``文件

    [root@controller ~]# vim /etc/httpd/conf.d/wsgi-keystone.conf
    
    Listen 5000
    Listen 35357
    
    <VirtualHost *:5000>
        WSGIDaemonProcess keystone-public processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP}
        WSGIProcessGroup keystone-public
        WSGIScriptAlias / /usr/bin/keystone-wsgi-public
        WSGIApplicationGroup %{GLOBAL}
        WSGIPassAuthorization On
        ErrorLogFormat "%{cu}t %M"
        ErrorLog /var/log/httpd/keystone.log
        CustomLog /var/log/httpd/keystone_access.log combined
    
        <Directory /usr/bin>
            Require all granted
        </Directory>
    </VirtualHost>
    
    <VirtualHost *:35357>
        WSGIDaemonProcess keystone-admin processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP}
        WSGIProcessGroup keystone-admin
        WSGIScriptAlias / /usr/bin/keystone-wsgi-admin
        WSGIApplicationGroup %{GLOBAL}
        WSGIPassAuthorization On
        ErrorLogFormat "%{cu}t %M"
        ErrorLog /var/log/httpd/keystone.log
        CustomLog /var/log/httpd/keystone_access.log combined
    
        <Directory /usr/bin>
            Require all granted
        </Directory>
    </VirtualHost>

       10、启动http服务,并加入开机自启动

    [root@controller etc]# systemctl start httpd.service
    [root@controller etc]# systemctl enable httpd.service

             

    三、配置令牌,并注册服务   

      1、配置令牌

    [root@controller etc]# export OS_TOKEN=ADMIN_TOKEN                                   配置认证令牌
    [root@controller etc]# export OS_URL=http://controller:35357/v3                      配置端点URL
    [root@controller etc]# export OS_IDENTITY_API_VERSION=3                              配置认证 API 版本

      

       2、创建服务实体和API端点

    [root@controller ~]# openstack service create   --name keystone --description "OpenStack Identity" identity
    +-------------+----------------------------------+
    | Field | Value |
    +-------------+----------------------------------+
    | description | OpenStack Identity |
    | enabled | True |
    | id | 0636e3be3cd148c6b54fd24686e8d6ea |
    | name | keystone |
    | type | identity |
    +-------------+----------------------------------+
    
    [root@controller ~]# openstack endpoint create --region RegionOne   identity public http://controller:5000/v3
    +--------------+----------------------------------+
    | Field | Value |
    +--------------+----------------------------------+
    | enabled | True |
    | id | 8227630dece449018c6dd7f3199c18b6 |
    | interface | public |
    | region | RegionOne |
    | region_id | RegionOne |
    | service_id | 0636e3be3cd148c6b54fd24686e8d6ea |
    | service_name | keystone |
    | service_type | identity |
    | url | http://controller:5000/v3 |
    +--------------+----------------------------------+
    
    [root@controller ~]# openstack endpoint create --region RegionOne   identity internal http://controller:5000/v3
    
    +--------------+----------------------------------+
    | Field | Value |
    +--------------+----------------------------------+
    | enabled | True |
    | id | b1c3e0e738854c568ad236ae00a0da6d |
    | interface | internal |
    | region | RegionOne |
    | region_id | RegionOne |
    | service_id | 0636e3be3cd148c6b54fd24686e8d6ea |
    | service_name | keystone |
    | service_type | identity |
    | url | http://controller:5000/v3 |
    +--------------+----------------------------------+
    
    [root@controller ~]# openstack endpoint create --region RegionOne   identity admin http://controller:35357/v3
    +--------------+----------------------------------+
    | Field | Value |
    +--------------+----------------------------------+
    | enabled | True |
    | id | fb800ecf21c845a6bfdd05c5de1f4656 |
    | interface | admin |
    | region | RegionOne |
    | region_id | RegionOne |
    | service_id | 0636e3be3cd148c6b54fd24686e8d6ea |
    | service_name | keystone |
    | service_type | identity |
    | url | http://controller:35357/v3 |
    +--------------+----------------------------------+

      创建service项目

    openstack project create --domain default 
      --description "Service Project" service
    +-------------+----------------------------------+
    | Field       | Value                            |
    +-------------+----------------------------------+
    | description | Service Project                  |
    | domain_id   | e0353a670a9e496da891347c589539e9 |
    | enabled     | True                             |
    | id          | 894cdfa366d34e9d835d3de01e752262 |
    | is_domain   | False                            |
    | name        | service                          |
    | parent_id   | None                             |
    +-------------+----------------------------------+
    
    openstack project create --domain default 
      --description "Demo Project" demo
    +-------------+----------------------------------+
    | Field       | Value                            |
    +-------------+----------------------------------+
    | description | Demo Project                     |
    | domain_id   | e0353a670a9e496da891347c589539e9 |
    | enabled     | True                             |
    | id          | ed0b60bf607743088218b0a533d5943f |
    | is_domain   | False                            |
    | name        | demo                             |
    | parent_id   | None                             |
    +-------------+----------------------------------+
    
    openstack user create --domain default 
    >   --password DEMO_PASS demo
    +---------------------+----------------------------------+
    | Field               | Value                            |
    +---------------------+----------------------------------+
    | domain_id           | d0fb278401404c569f5cf9c00c750817 |
    | enabled             | True                             |
    | id                  | 1ca7f08e5e954074837db6c877834c07 |
    | name                | demo                             |
    | options             | {}                               |
    | password_expires_at | None                             |
    +---------------------+----------------------------------+
    
     openstack role create user
    +-----------+----------------------------------+
    | Field     | Value                            |
    +-----------+----------------------------------+
    | domain_id | None                             |
    | id        | 3db197f5d549400eb825ae24e839e7ea |
    | name      | user                             |
    +-----------+----------------------------------+
    
    openstack role add --project demo --user demo user

      注解:每个添加到OpenStack环境中的服务要求一个或多个服务实体和三个认证服务中的API 端点变种。

    四、创建域、项目(租户)、用户和角色

      1、创建域``default``

    [root@controller ~]# openstack domain create --description "Default Domain" default
    +-------------+----------------------------------+
    | Field       | Value                            |
    +-------------+----------------------------------+
    | description | Default Domain                   |
    | enabled     | True                             |
    | id          | 73e42b9fc6b64cfdb17940cdf0a0f692 |
    | name        | default                          |
    | tags        | []                               |
    +-------------+----------------------------------+

      2、创建 admin 项目

    [root@controller ~]# openstack project create --domain default   --description "Admin Project" admin
    +-------------+----------------------------------+
    | Field       | Value                            |
    +-------------+----------------------------------+
    | description | Admin Project                    |
    | domain_id   | 73e42b9fc6b64cfdb17940cdf0a0f692 |
    | enabled     | True                             |
    | id          | 17e6fb94c09347fc8bdc854afef7922f |
    | is_domain   | False                            |
    | name        | admin                            |
    | parent_id   | 73e42b9fc6b64cfdb17940cdf0a0f692 |
    | tags        | []                               |
    +-------------+----------------------------------+

      3、创建 admin 用户

    [root@controller ~]# openstack user create --domain default  --password ADMIN_PASS admin
    +---------------------+----------------------------------+
    | Field               | Value                            |
    +---------------------+----------------------------------+
    | domain_id           | 73e42b9fc6b64cfdb17940cdf0a0f692 |
    | enabled             | True                             |
    | id                  | 0a48bf33893b4854bf85fbd69050c2f6 |
    | name                | admin                            |
    | options             | {}                               |
    | password_expires_at | None                             |
    +---------------------+----------------------------------+

      4、创建 admin 角色

    [root@controller ~]# openstack role create admin
    +-----------+----------------------------------+
    | Field     | Value                            |
    +-----------+----------------------------------+
    | domain_id | None                             |
    | id        | 2ef07766d0a04bacb8778b0b0ac0be51 |
    | name      | admin                            |
    +-----------+----------------------------------+

      5、添加``admin`` 角色到 admin 项目和用户上

    [root@controller ~]# openstack role add --project admin --user admin admin

      6、删除环境变量,因为安全性的原因,关闭临时认证令牌机制

        ###编辑 /etc/keystone/keystone-paste.ini 文件,从``[pipeline:public_api]``,[pipeline:admin_api]``和``[pipeline:api_v3]``部分删除``admin_token_auth 。

        重置``OS_TOKEN``和``OS_URL`` 环境变量

    [root@controller ~]# unset OS_TOKEN OS_URL

      7、作为 admin 用户,请求认证令牌

    [root@controller ~]# openstack --os-auth-url http://controller:35357/v3  --os-project-domain-name default --os-user-domain-name default --os-project-name admin --os-username admin token issue

        注解:这个命令使用``admin``用户的密码:ADMIN_PASS

      8、用环境变量,执行命令

    [root@controller ~]# export OS_PROJECT_DOMAIN_NAME=default
    [root@controller ~]# export OS_USER_DOMAIN_NAME=default
    [root@controller ~]# export OS_PROJECT_NAME=admin
    [root@controller ~]# export OS_USERNAME=admin
    [root@controller ~]# export OS_PASSWORD=ADMIN_PASS
    [root@controller ~]# export OS_AUTH_URL=http://controller:35357/v3
    [root@controller ~]# export OS_IDENTITY_API_VERSION=3
    [root@controller ~]# export OS_IMAGE_API_VERSION=2
    
    [root@controller ~]# openstack user list                   执行了环境变量,才能使用这个命令
    +----------------------------------+-------+
    | ID | Name |
    +----------------------------------+-------+
    | 0a48bf33893b4854bf85fbd69050c2f6 | admin |
    +----------------------------------+-------+
    [root@controller ~]# openstack --os-auth-url http://controller:35357/v3  --os-project-domain-name default --os-user-domain-name default  --os-project-name admin --os-username admin user list      用参数执行命令

      9、把环境变量创建成脚本,创建admin-openrc文件

    [root@controller ~]# vim 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=ADMIN_PASS
    export OS_AUTH_URL=http://controller:35357/v3
    export OS_IDENTITY_API_VERSION=3
    export OS_IMAGE_API_VERSION=2

    [root@controller ~]# source admin-openrc 每次执行openstack命令之前,保证有环境变量,登出之后,重新执行此命令

       10、自动执行,开机拥有环境变量

    [root@controller ~]# vim .bashrc
    # .bashrc
    
    # User specific aliases and functions
    
    alias rm='rm -i'
    alias cp='cp -i'
    alias mv='mv -i'
    
    # Source global definitions
    if [ -f /etc/bashrc ]; then
    . /etc/bashrc
    fi
    source admin-openrc                             在最后加入这段

      11、验证keystone服务是否正常

  • 相关阅读:
    Bone Collector II(背包 求第k优解)
    How Many Answers Are Wrong (彻底理解带权并查集)
    System Testing(Codeforces Round #543 (Div. 2, based on Technocup 2019 Final Round))D
    Rikka with Minimum Spanning Trees徐州区域赛a题
    cin加速语句
    牛客练习赛41 b 666RPG (01背包)
    js字符串拼接优化
    nodejs中使用递归案例
    thunk的主要用法
    $in的方法总结
  • 原文地址:https://www.cnblogs.com/aqicheng/p/13207044.html
Copyright © 2011-2022 走看看