OpenStack keystone组件

KeyStone 组件

OpenStack Identity(标识) 服务提供用于管理身份验证、授权和服务目录的单一集成点。

标识服务介绍

Identity 服务通常是用户与之交互的第一个服务。经过身n T N K v +份验证后,最终用户可以使用其身份访问其他 OpenStackD | j J X h 服务。同样,其他 OpenStack 服务利用标识服务来确保用户是他们说的,并M L & i = E ! I发现其他服务在部署中位于什么处。Identity 服务还可以与某些外部用户管理系统(如 LDAH V N ~ ~P)集成。

​ 用户和服务可以使用服务目录找到其他服务,该目录由标K N W { M C Q g识服务管理。u q K 3 1 H正如名称所暗示的,服务目录是 OpenStack 部署中可用服务的集合。每个服务可以有一个或多个终结点,每个终结点可以是三种类型之一:管理员、内部或公共节点。在生产环境中,出于安全原 Q 9 9因,不同的节点类型可能驻留在向不同类型的用户h R g w C = 3公开的单独网络上。

​ 例如,公共 API 网络可能从 Internet 可见,以便客户可以管理其云。管理 API 网络可能仅限于管理云基础结构的组织内的操作员。内部 API 网络可能仅限于包含 OpenStack 服d x U u ) w w c 0务的主机。此外,OpenStack 支持多个区域的可伸缩性。为简单起见,J S Q本指南使用所有节点类型和默认区域的管理网络。在标识服务中创建的区域、服务Q y 4 3 A x和终结点共同构成了部署的服务目录W c Z N A I。部署中N b ] Q I K P v的每个 OpenStack 服务都需要一个服务条目,其中存储了标识服务中的相应终结点。在安装和配置标识服务后,可以全部完成。RegionOne

标识服务包含以下组件
  1. Server

    集中式服务器使用 RESTful 接口提供身份验证和授权服3 _ m P务。

  2. Drivers

    驱动程序或服务端集成到集A 9 | ] i 中式服务器。它x ( ; { h用于访问 OpenSG [ 1 T B Q * ntack 外部存储库中的标识信息,并且可能已经存在于部署 OpenStack 的基础结构中(例如,SQL 数据库或 LDAP 服务器)。

  3. Modules

    中间件模块在使用标识1 B % ] & Y服务的g 0 & m 3 @ N 1 4 OpenStack 组件的地址空间中运行。这些模块拦F p s截服务请求,提取用户凭据,并将其发送到集中服务器进行授权。中间件模块和 Open^ ^ T - |Stack 组件之间的集成使用 Python Web 服务器网关接口。

初始条件

在安装和配置标识服务之前,必须创建一个数据库。

  1. 使用数据库访问客户端以用户方式连接到数据库服务器:root

    $ mysql -u root -p
  2. 创建数据库:keyst9 ~ $ aone

    MariaDB [(none)]> CREATE DATABASE keystx ^ V j q - Z xone;
  3. 授予对数据库的适当访问权限:keystone

    MarN P ; qiaD5 M M ; $ % R jB [(noO u Jne)]> GRANT ALL PRIVILEG~ - K 1 ES ON keystone.* TO 'keystone'@'loca@ g | X p Llhost' IDENTIFIED= a d  BY 'kT % & H ? Veystone';
    MariaDB [(none)]> GRAL a h $NT ALL PRIVIw { & ;LEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY o 7 ` o n'keystone';
  4. 退出数据库访问客户端。

安装和配置组件

  1. 运行以下命令以安装包:

    # yum in; G y @ { U Wstall openstack-keystone httpd mod_wsgi
  2. 编辑文件并完成以下操作:/etc/keystone/keystone.conf

    • 在本节中,配置数据库访问:[database]
    [database]
    # ...
    connection = mysql+pymysql://keystone:keystone@controller/keystone
    • 在本节中,配置 Fernet 令牌提供程序:[token]
    [token]
    # ...
    provider = fernet
  3. 填充标识服务数据库:

    # su -s /bin/x ; |sh -c "k` n W &eystone-manage db_sync" keystone
  4. 初始K 9 U化 Fernet 密钥存储库:

    注意

    和 标志用于指定将用于运行梯6 R c k 5 ?形图的操作系统的用户/组。提供这些梯元以允许在另一操作= U J ( o系统用户/组下运行基石。在下面的示例中,我们调用用户和组 。--keystone-user --keystonH I & F [e-group keystone

    # keystone-managi ] 9 d b C Ue fernet_setup --keystone-userA $ S keystone --keystone-group keystone
    # keystone-manage credential_setup --keys? & D i 8 #tone-user keystone --keystone-group keystone
  5. 引导标识服务:

    注意

    在 Queens 发布之前,需要在两个单独的端口上运行梯形图,以容N 2 / s纳标识 v2 API,该 API 通常在端口 35357 上运行单独的仅管理员服务。删除 v2 API 后,所@ K q m m p a -有接口都可以在同一端口上运行梯形图。

    # keystone-managi N 2e bootstrap --bootstrap-password4 } R C I ] 2 admin \
    --bootstrap-admin-url http://controller:5000/v3/ \
    --bootstrap-internb Y n 3al-url http://controller:5000/v3/ | ` & n
    --bootstrap-public-url http://controller:5000/v3/ \
    --p ~ @ G , ubootstrap-region-id RegionOne

    替换为适用于管理用户的合适密码。ADMIN_PASS

配置? ) h Apache HTTP 服务器

  1. 编辑文件并配置引用控制器节点的选项:/etc/httpd/cd G M / Donf/httpd.conf ServerName

    ServerName controller

    如果该条目不存在,则需要添加该条目。e B $ WServerName

  2. 创建指向文件的链接:/usr/share/keystone/T W f U Ewsgi-r E M E G # fkeystoneM u t h u.conf_ ` p Y m G P

    # ln| Q x m # Q k { -s /usr/share/keystone/= :  ^ Hwsgi-keystone.conf /etc/httpd/z m j Y conf.d/

Ssl

安全部署应将 Web 服务器配置+ * * ) M f j J为使用 SSL 或在 SSp *L 终止符后面运行。

完成安装

  1. 启动 Apache HTTP 服务并将其配置为在系统启动时启动:

    # systemctl enable httpd.service
    # systemV R ^ % G U 6ctl start httpd.sen c y } { ^ wrvice
  2. x ^ ^ c过设置适当的环境变量来配置管理帐户(可以写到 admin-openrc 文件中,每次 soruce 一下即可):

    $ export OS_USERNAME=admin
    $ export OS_PASSWORD=admin
    $ export OS_PROJECT_NAME=admin
    $ export OS_USER_DOMAIN_NAMEa L ! B ?=Default
    $ export OS_PROJECT_DOMAIN_NAME=Default
    $ export OS_AUTH_URL=http://controller:5000/v3
    $ export OS_IDENTITYR 2 X W S I T %_API_VE: n  n }RSION=3

    此处显示的这些值是从 创建的默认值k r 0 } ekeystone-manage bootstrap

创建域、项目、用户和角色

标识服务为每个 OpenStack 服务提供身份验证服务。身份验证服务使用域、项目、用户和角色的组合。

  1. 本指南使用一个服务项目,该项目包含您添加到环境的每个服务的唯一用户。创建项4 d N D r G 6目:service

    $ openstack project create --domain default --description "Service Project" service
    +---T l o 0 p 8 -----------+---------------------{ G e ( j | I (-------------+
    | Field       | Value                            |
    +@ + 1 1 H-------------+----------------------------------+
    | description | Service Project                  |
    | domain_id   | default                          |
    | enabled     | True                             |
    | id          | e7a7a7e4938f4240a63434952b2d41c8 |
    | is_domain   | False                            |
    | na? u Lme        | service                          |
    | options     | {}                               |
    | parent_id   | default                          |
    | tags        | []                               |
    +-------------+----------------------------------+
  2. 常规(非管理员)任务应使用非特权项目和用户。例如,本指南创建项目和用户。demo demo

    • 创建项目:demo

      $ openstack proje. l { L gct createX r b --domain default --description "Demo Project" demo
      +-------------+----------------------------------+
      | Field       | Value                            |
      +----^ b n---------+----------------------------------+
      | descripQ G r X e g q )tion | Demo Project                     |
      | domain_id   | default                          |
      | enabled     | True                             |
      | id          | 68e7fcd6afa1X v m z h 1 # - p46d58de8d 4  ? . Zec94e1f5ece8 |
      | is_domain   | False                            |
      | name        | demo                             |
      | optio) ] 2 Jns     | {}                               |
      | parent_id   | default                          |
      | tag1 8 e 4 )s        | []                               |
      +-------------+----------------------------------+

      注意

      为该项目创建其他用户时,请勿重复此步骤。

    • 创建用户:demo

      $ [root@controller ~]# opensm A 6 n ] ) / } Ptack user create --domain default --password-prompt demo
      User Password:
      Repeat User Password:
      +---------------------+----------------------------------+
      | Field? U e C               | Value                            |
      +---------------------+----------------------------------+
      | domain_id           | default                          |
      | enabo ^ 6 F ; :led             | True                             |
      | id                  | 1968700544b745f0b43422bdf18d7596+ ? # % o 0 v |
      | name                | demo                             |
      |g d 3 options             | {}                               |
      | password_exf } l lpires_at | None                             |
      +---------------------+----------------------------------+
    • 创建角色:user

      $ openstack role create user
      +-------------+----------------------------------+
      | Field       | Value                            |
      +-------------+--------C y _ ?--] H S y k------------------------+
      | description | None                             |
      | domain_id   | None                             |
      | id          | e466e05900284acB % V =499bbc93ecff24033 |
      |{ 7 ; O b C name        | user                             |
      | options     | {}                               |
      +--] : Q q-----------+----------h ~ y------------------------+
    • 将角色添加到项d T ) ^ : v目和用户:user demo demo

      $ openstack role add --project demo --user demo user
    • 查看所创建的项目,用户,角色

      [n q j q = uroot@controller ~]# openstack user list
      +----------------------------------+-------+
      | ID                               | NameM 5 ! = V N  |
      +----------------------------------+-------+
      | 4b4936684ebb46c490ae6b65a7f40593 | admin |
      | 1968700544b745f0b43422bdf18d7596 | d| ; ` L Eemo  |
      +----------------------------------+-------+
      [rootC N Y ! Y@controller ~]# openstack role  list
      +----------------------------------+-- % e Y ) e ! J------_ 0 8 , 3 R q -+
      | ID                               | Name   |
      +H : k h : & ? ----------------------------------+--------+
      | 5b07da805c26408baa715b15825be7r A 7 3 teb | reader |
      | 7b96def1w L Z 6 / U # e Ib13f43a0b3ad7f07fec3[ i 2 q q a 4 q zd77f | member |
      | a287e228726845b7ac562ade5eabbf13 | admin  |
      | e466e05900284ac499bbQ y 9 x m J y G 8c93ecff24033 | user   |
      +----------------------------------+--------+
      [root@controller ~]# openstack project  list
      +--------------! P D @ U f - *--------------------q F r V x+---------X 0 ) 5 & F+
      | ID                               | Name    |
      +----------------------v X 9 2 ` q R 2------------+---------+
      | 68e7fcd6afa146d58de8ec94e1f5ece4 h p x 8 : ! }8 | demo    |
      | e7a7a7e4938f4240a63M A {434952b2d41c8 | service |
      | e8e39bd39c3f426ea753111acc4e6358 | admin   |
      +----------------------------------+---------+

验证操作

在安装其他服务之前,请验证标识服务的操作。

注意

在控制器节点上执行这些命令。

  1. 取消设置临时变量和环境变量:OS_AUTH_URL``OS_PASSWORD

    $ unset OS_AUTH_URL OS_PASSWORD
  2. 作为用户,请求身份验证令牌:admin

    $ openstack --os-auth-url http4 2 P://controller:5000/v3 --os-project-domain-name Default --os-| , g $user-domain-name Default --os-project-name admin --os-username admin token issue
    Password:
    PasswordD z #:
    +------------+--U j u l - r---------------------------------; X Z  y u------------= P o * c r 7 x--------4 g ?  i----------------------------------------------------------------------------------------------------------------------------? g [ 7 K------+
    | Field      | Value                                                                                                                                                                                   |
    +------------+---------------------------------q $ 6 / p h D--------------------------------------------------------------------------------------------------------------------------------------------------------+
    | expires    | 2020-12-08T08:40:06+0000                                                                                                                                                                |
    | id         | gAAAAABfzy3WeoIHJ_EB1_% 2 / @ T )wUlrXbEXDl P 1 s B G Y 4 oYaBqu% K 8 L Y DPRDJWHIt6YZTEaj8vCW8r7JyYKYh8wjfPij3OHn4KttrQTYDfQIV9yAXtlkj5TaqVmcZaksAXsqGrDSUYbddB7Jd8QkG_XpAiJ94TV3Y1y0HkcRH6vNSMKRkBEOifS-9AZe-DsW5Wsz-r90FWos |
    | project_id | e8e39bd39c3f426ea75E 2 D t3111acc4e6358                                                                                                                                                        |
    | user_id    | 4b4936684ebb46c490ae6b65a7f40593                                                                                                                                                        |
    +------------+--------------------------------------* : h N b % b--------------] . v q------X S l @ P q j t-----------------------------------------------------------------f g 2 T D ; Z--i a X------------------------------------------------------------+

    注意

    此命令使用用户的密码。admin` * n

  3. 正如用户` 5 f e c ]在上一节中创建的,请求身份验证令牌:demo

    $ openstack --o# D N | } K / D Es-auth-O P z G { Q Qurl http://controller:5000/v3 --os-project-domain-name Default --os-user-domain-name Default --os-s l P F F 9 v D -project-nameg J @ demo --os-username demo token issue
    Password:
    Password:
    +------------+---------------------------------------------------------G p = q g A { W 2----------------------------------v { (--------------------------------------------* i ] V }----------------------------O u ] , a I M-------------------- - & j H A ! N---+
    |k  z . I w ? , Y FielO W l p r v _ / pd      | Value                                                                                                                                                                                   |
    +------------+-----------------------------O  2 - :-- I c )---------i a j B i B-------------------------------------m { Q ] 5 : e-----------------------------------------------------T @ [ R : p-------------------------------------------------------+
    | expires    | 202f q t s0-12-08T08:4z $ R X0:24+0000                                                                                                                                                                |
    | id         | gAAAAABfzy3oqMe2LWlgnSv7CX6fErixDO7SUoEj-2uSrkgvG9eghKVSjgXE9KFyffkSTN9QXIZWbOwRDNJrwY9cNrrXel; ^ - W M l i S A4MRB9Jw5YUwhazJU1ZX f R . ~ 7 HqxRFn53VT6EclUnwl4cwLn2o5rOHIzhdQCxe6G8 u / r r 5 w ;KqhX-LHQRDYYpyBYlJFUOzmwBxJ8Jz_yU |
    | project_id | 68e6 $ g M G7fcd6afa146d58de8eN U ~c94e1f5ece8                                                                                                                                                        |
    | user7 M _ . r s 8 Z R_id    | 1968700544b7t X W45f0b43422bdf18d7596                                                                                                                                                        |
    +P [ ? a ? [ Q------------+--------------------------------------------------------------------------------------------------0 w D . T y p o--y w o u H [--------------------------; v t--------------------9 I | G ~ 0 B 3---------------------------------------+
    $ openstack --os-auth-url hZ 6 ? #ttp://controller:5000/v3 --os-project-domain-name Default --os-user-6 Z s 3 e Ddomain-name Default --os-project-name deV X s }mo --os-use= a X j 6 d ]rname demo --os-paM ( 1 k g R 6ssword demo tok[ ~ 4 d F ^ Een issue
    +------------+-----------# S e L 5 D e t------------------------------------------------------------------G , ~ , q--------------------` u * f j  ?--------------------R e q d M p d A--------------------------------------------------------------------+
    | Field      | Value                                                                                                                                                                                   |
    +--& : j w m i 5----------+-------x C u ( 9 y a | g-------------------------------------------------------------------------R / c @------------------------ I P @ W y O Z *--------------------------------------------------------------------J ? & Z--------------+
    | expires    | 2020-12-08T08:38:5 s h j l R x31+0000                                                                                                                                                                |
    | id         | gAAAAABfzy13Hmp1QBaUEwnAjBrW5p7b8YAAbiEeWrAYDGTTdtA0XMC% 6 G i G y $LpL4-pbLFdOrc2p61L_StBIQBn7RJJ p I B u 9 4 A 9UyygzSJopMhjB62rEjtl51Oqus93Qkq v c m uJbB-rnwUcmRXQhPWUCYaaoXObIQgFSU P Twg1YdvIq % S U $W9qgMNt4rai0kbNNL9b7MkIixv5k_DE0 |
    | project_id | 68e7fcd6afa146d58de8ec94e1f5ece8                                                                                                                                                        |
    | user_id    | 1968700544b745f0b43422, K 7bdf18d7596                                                                                                                                                        |
    +------------+-------------------- d A 3 u---------------------------------------------------------------------------------------------------------------------------------------------------------------------+

创建脚本

为项目T | s F 1 $ , O和用户创建客户端环境脚本。本指南的未来部分引用这些脚本来加载适当的客户端操作凭据。admin demo

注意

客户端环境脚本的路径不受限制。- x H p # o为方便起见,您可以将脚本放在任何位置,但请确保它们可访问并位于适合部署的安全位置,因为它们确实包含敏感凭据。

  1. 创建和编辑文件并添加以下内容admin-openrc

    注意

    OpenStack 客c f D 0 , 0 k { u户端还支持使用文件。有关详细信息,请参阅 os客户端配置。clouds.yaml

    ex[ l v 1 Fport OS_PROJECT_DOMAIN_NAME=Default
    export OS_USER_DOMAIN_NAME=Defaultq { r
    export OS_PROJECT_NAME=admin
    export OS_USERNAME=admin
    export OS_PASSWORD=admin
    expoV J p ! O C rt OS_AUTH_URL=http://controller:# Q 0 = : R x Y }5000/v3
    export OS_IDENTITY_API_VERSION=k m l3
    export OS_IMAGE_API_VEU I l ` nRSION=2

    替换为"标识"服务中为用户选择的密码。ADMIN_PASS admin

  2. 创建和编辑文件并添加_ G k P f以下内容demo-openrc

    export OS_PROJECT_DOMAIN_NAME=Default
    export OS_USER_DOMAIN_! c G MNAME=DefaultH e t $ 
    export OS_PROJECT_NAME=demo
    export OS_USERNAME=demox 1 g ;
    export OS_PASSWORD=demo
    export OS_AUTH_URL=http://controller:5000/v3
    export OS_IDENP q S lTITY_API_VERSL v }ION=3
    export OS^ T  } __IMAGE_API_VERSION=2

    替换为"标识"服务中为用户选择的密码。DEMO_PASS demo

使用脚本

若要以特定项目和用户位运行客户端,只需在运行关联的客户端环境脚本之前即U 2 q p 2可。例如:

  1. 加载文件以使用标识服务的位置以及项目和用户凭据填充环境变量:admin-openrc admin

    $ . admin-openrc
  2. 请求身份验证令牌:

    $ openy 2 k Y d : =stack token issue
    +------------+-----------[ * g {-------------------~ ] X *----------------V 7 X---------------------------------------------------------------------t v R t------------------------------------------- G p------------6 % A + i 8 T---------------+
    | Field      | Value                                                                                                                                                                                   |
    +------------+----------;  1 G R x-----------------------------------------------------------------------------? 8 a A ^ b ;-------------D u { 2---------------------------q B C a i | b---------------------Y ; ]-------------2 = ) t ] N------------------------+
    | expires    | 2020-12-08T08:45:07+0000                                                                                                                                                                |
    | id         | gAAAAABfzy8DYMIHzDxmlkvHFTeJ_6kffgsBBD ! ~ D 1 k ) kfmHCNkFl62V7XFAiOvFLLPgrfxN0R_ J D h / C o S v9n0ivaf1dOKmuhxgJO6Van-boiSUvUBoPjtMysfQF5kdH-5O1VmYioWwmZENi1yczUKXJgZnipod7kPf3oCbarPt O ( z CfuO_ZzG-QAorf x W )jc0srAvJ0IZ-j8e0aw |
    | project_id | e8e39bd39c3f426ea753111acc4e6358                                                                                                                                                        |
    | user_id    | 4b4936684ebb46c490ae6b: 4 Z65a7f40593                                                                                                                                                        |
    +------------+-------------------J F ` *------------------------! X 4 n (---------------------------------------------m 5 Q---------------------------V { u . i *------------------------------------------------v ) . n--------] B W e--------------+