溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

openstack云計(jì)算keystone架構(gòu)怎么用

發(fā)布時(shí)間:2022-04-20 13:45:34 來(lái)源:億速云 閱讀:153 作者:iii 欄目:開(kāi)發(fā)技術(shù)

本篇內(nèi)容介紹了“openstack云計(jì)算keystone架構(gòu)怎么用”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

    keystone架構(gòu)

    openstack云計(jì)算keystone架構(gòu)怎么用

    Keystone API

    Keystone API與Openstack其他服務(wù)的API類(lèi)似,也是基于ReSTFul HTTP實(shí)現(xiàn)的。

    Keystone API劃分為Admin API和Public API:

    • Public API不僅實(shí)現(xiàn)獲取版本以及相應(yīng)擴(kuò)展信息的操作,同時(shí)包括獲取Token以及Token租戶(hù)信息的操作;

    • Admin API主要提供服務(wù)開(kāi)發(fā)者使用,不僅可以完成Public API的操作,同時(shí)對(duì)User、Tenant、Role和Service Endpoint進(jìn)行管理操作。

    Router

    Keystone Router主要實(shí)現(xiàn)上層API和底層服務(wù)的映射和轉(zhuǎn)換功能,包括四種Router類(lèi)型。

    (1) AdminRouter負(fù)責(zé)將Admin API請(qǐng)求映射為相應(yīng)的行為操作并轉(zhuǎn)發(fā)至底層相應(yīng)的服務(wù)執(zhí)行;

    (2) PublicRouter與AdminRouter類(lèi)似;

    (3) PublicVersionRouter對(duì)系統(tǒng)版本的請(qǐng)求API進(jìn)行映射操作;

    (4) AdminVersionRouter與PublicVersionRouter類(lèi)似。

    Services

    Keystone Service接收上層不同Router發(fā)來(lái)的操作請(qǐng)求,并根據(jù)不同后端驅(qū)動(dòng)完成相應(yīng)操作,主要包括四種類(lèi)型;

    (1) Identity Service

    Identity Service提供關(guān)于用戶(hù)和用戶(hù)組的授權(quán)認(rèn)證及相關(guān)數(shù)據(jù)。

    Keystone-10.0.0支持ldap.core.Identity,Sql.Identity兩種后端驅(qū)動(dòng),系統(tǒng)默認(rèn)的是Sql.Identity;

    Users:

    用戶(hù)這一概念在openstack中實(shí)際上是用來(lái)標(biāo)識(shí)一個(gè)使用者(an individual API consumer)

    一個(gè)用戶(hù)必須被一個(gè)具體的domain擁有

    所有的用戶(hù)名不是全局唯一的,在同一個(gè)domain中用戶(hù)名才唯一

    Groups:

    用戶(hù)組是一個(gè)包含了一系列用戶(hù)的容器,一個(gè)group必須被一個(gè)具體的domain擁有

    所有的組名不是全局唯一的,在同一domain種組名才唯一

    (2) Resource Service

    Resouse服務(wù)提供關(guān)于projects和domains的數(shù)據(jù)

    projects

    Projects(在v2.0中稱(chēng)之為T(mén)enants)在openstack中project代表資源的結(jié)合

    一個(gè)project必須被一個(gè)具體的domain所擁有

    所有的project都不是全局唯一的,僅僅在一個(gè)domain中project唯一

    新建一個(gè)project沒(méi)有指定domain,它將被添加到默認(rèn)的domain中即default

    Domains

    Domains是一個(gè)更高級(jí)別的包含n個(gè)projects-users-groups的容器。
    默認(rèn)的Domains名為Default

    在v3版本中的唯一性概念

    Domain名,在所有的domains中全局唯一

    Role名.在所有的domains中全局唯一

    User名,僅僅在它自己所在的domain中唯一

    Project名,僅僅在它自己所在的domain中唯一

    Group名,僅僅在它自己所在的domain中唯一

    基于這些容器結(jié)構(gòu),domains代表了openstack資源的管理方式,只要某一assignment(project-user-role)被授予權(quán)限,一個(gè)domain中的用戶(hù)就可以訪問(wèn)另外一個(gè)domain中的資源。

    (3) Assignment Service

    Assignment Service提供role及role assignments的數(shù)據(jù)

    Roles

    role角色標(biāo)識(shí)了一個(gè)用戶(hù)可以獲得的權(quán)限級(jí)別

    可以在domain或project級(jí)別授予role。

    可以分配給單個(gè)用戶(hù)或組級(jí)別role。

    role名稱(chēng)是全局唯一的。

    Role Assignments

    A 3-tuple that has a Role, a Resource and an Identity.

    Resource指的是project

    Identity指的是user

    Role指的是role即project-user-role

    (4) Token Service

    Token Service提供認(rèn)證和管理令牌token的功能,用戶(hù)的credentials認(rèn)證通過(guò)后就得到token

    Keystone-10.0.0對(duì)于Token Service支持Kvs.Token,Memcache.Token,

    Memcache_pool.Token,Sql.Token四種后端驅(qū)動(dòng),系統(tǒng)默認(rèn)的是kvs.Token

    (5) Catalog Service

    Catalog Service提供service和Endpoint相關(guān)的管理操作(service即openstack所有服務(wù),endpont即訪問(wèn)每個(gè)服務(wù)的url)

    keystone-10.0.0對(duì)Catalog Service支持兩種后端驅(qū)動(dòng):Sql.Catalog、Templated.Catalog兩種后端驅(qū)動(dòng),系統(tǒng)默認(rèn)的是templated.Catalog;

    (6) Policy ServicePolicy Service

    提供一個(gè)基于規(guī)則的授權(quán)驅(qū)動(dòng)和規(guī)則管理

    keystone-10.0.0對(duì)Policy Service支持兩種后端驅(qū)動(dòng):rules.Policy,sql.Policy,默認(rèn)使用sql.Policy

    Backend Driver

    Backend Driver具有多種類(lèi)型,不同的Service選擇不同的Backend Driver。

    官方https://docs.openstack.org/keystone/latest/#groups

    keystone管理這些概念的方法

    組件名稱(chēng)管理對(duì)象生成方法保存方式配置項(xiàng)
    identityuser,以及 user group-sql, ldap.core

    [identity]

    driver = keystone.identity.backends.[sql|ldap.core].Identity

    token用戶(hù)的臨時(shí) tokenpki,pkiz,uuidsql, kvs,memcached

    [token]

    driver = keystone.token.persistence.backends.[sql|kvs|memcache|memcache_pool].Token

    provider=keystone.token.providers.[pkiz|pki|uuid].Provider
    credentialEC2 credential sql

    [credential]

    driver = keystone.credential.backends.sql.Credential

    provider=keystone.token.providers.[core|fernet].Provider

    catalogregion,service,endpoint sql|templated

    [catalog]

    driver = keystone.catalog.backends.[sql|templated].Catalog

    assignmenttenant,domain,role 以及它們與 user 之間的關(guān)系external, password, tokensql

    [assignment]

    methods = external, password, token

    password = keystone.auth.plugins.password.Password

    trusttrustsql 

    [trust]

    driver = keystone.trust.backends.[sql].Trust

    policyKeystone service 的用戶(hù)鑒權(quán)策略 ruels|sql

    [default]

    policy_file = policy.json

    [policy]

    driver = keystone.policy.backends.[ruels|sql].Policy

    keystone-10.0.0代碼結(jié)構(gòu)展示

    keystone-manage 是個(gè) CLI 工具,它通過(guò)和 Keystone service 交互來(lái)做一些無(wú)法使用 Keystone REST API 來(lái)進(jìn)行的操作,包括:

    db_sync: Sync the database.

    db_version: Print the current migration version of the database.

    mapping_purge: Purge the identity mapping table.

    pki_setup: Initialize the certificates used to sign tokens.

    saml_idp_metadata: Generate identity provider metadata.

    ssl_setup: Generate certificates for SSL.

    token_flush: Purge expired tokens.

    每個(gè)Keystone 組件,比如 catalog, token 等都有一個(gè)單獨(dú)的目錄。
    每個(gè)組件目錄中:

    routes.py 定義了該組件的 routes (routes 見(jiàn) 探索 OpenStack 之(11):cinder-api Service 啟動(dòng)過(guò)程分析 以及 WSGI / Paste deploy / Router 等介紹)。

    其中identity 和 assignment 分別定義了 admin 和 public 使用的 routes,分別供 admin service 和 public service 使用。

    controller.py 文件定義了該組件所管理的對(duì)象,比如 assignment 的controller.py 文件定義了 Tenant、Role、Project 等類(lèi)。

    core.py 定了了兩個(gè)類(lèi) Manager 和 Driver。Manager 類(lèi)對(duì)外提供該組件操作具體對(duì)象的方法入口;

    Driver 類(lèi)定義了該組件需要其Driver實(shí)現(xiàn)類(lèi)所提供的接口。
    backend 目錄下的每個(gè)文件是每個(gè)具體driver 的實(shí)現(xiàn)

    下載keystone-10.0.0演示https://www.openstack.org/

    keystone服務(wù)啟動(dòng)

    Keystone is an HTTP front-end to several services. Like other OpenStack applications, this is done using python WSGI interfaces and applications are configured together usingPaste. The application’s HTTP endpoints are made up of pipelines of WSGI middleware。。。

    詳見(jiàn):https://docs.openstack.org/keystone/latest/

    /usr/bin/keystone-all 會(huì)啟動(dòng) keystone 的兩個(gè)service:admin and main,它們分別對(duì)應(yīng) /etc/keystone/keystone-paste.ini文件中的兩個(gè)composite:

    openstack云計(jì)算keystone架構(gòu)怎么用

    可見(jiàn) admin service 提供給administrator 使用;main 提供給 public 使用。

    它們分別都有 V2.0 和 V3 版本,只是目前的 keystone Cli 只支持 V2.0.比較下 admin 和 public:

    名稱(chēng)middlewaresfactory功能區(qū)別
    admin比 public 多s3_extensionkeystone.service:public_app_factory

    從 factory 函數(shù)來(lái)看, admin service 比 public service 多了identity 管理功能, 以及 assignment 的admin/public 區(qū)別:

    1. admin 多了對(duì) GET/users/{user_id} 的支持,多了get_all_projects,get_project,get_user_roles 等功能

    2. keystone 對(duì) admin service 提供 admin extensions, 比如OS-KSADM等;對(duì) public service 提供 public extensions。

    簡(jiǎn)單總結(jié)一下, public service 主要提供了身份驗(yàn)證和目錄服務(wù)功能;admin service 增加了 tenant、user、role、user group 的管理功能。

    public

    sizelimit url_normalize build_auth_context token_auth admin_token_auth xml_body_v2

    json_body ec2_extension user_crud_extension

    keystone.service:admin_app_factory

    /usr/bin/keystone-all 會(huì)啟動(dòng) admin 和 public 兩個(gè) service,分別綁定不同 host 和 端口。

    默認(rèn)的話,綁定host 都是 0.0.0.0;

    admin 的綁定端口是 35357 (admin_port), public 的綁定端口是 5000 (public_port)。

    因此,給 admin 使用的OS_AUTH_URL 為 http://controller:35357/v2.0,

    給 public 使用的OS_AUTH_URL=http://controller:5000/v2.0

    keystone詳細(xì)說(shuō)明

    WSGI server的父進(jìn)程(50511號(hào)進(jìn)程)開(kāi)啟兩個(gè)socket去分別監(jiān)聽(tīng)本環(huán)境的5000和35357號(hào)端口,
    其中5000號(hào)端口是為main的WSGI server提供的,35357號(hào)端口為admin的WSGI server提供的。

    即WSGI server的父進(jìn)程接收到5000號(hào)端口的HTTP請(qǐng)求時(shí),則將把該請(qǐng)求轉(zhuǎn)發(fā)給為main開(kāi)啟的WSGI server去處理,

    而WSGI server的父進(jìn)程接收到35357號(hào)端口的HTTP請(qǐng)求時(shí),則將把該請(qǐng)求轉(zhuǎn)發(fā)給為admin開(kāi)啟的WSGI server去處理。

    vim /etc/keystone/keystone-paste.ini

    openstack云計(jì)算keystone架構(gòu)怎么用

    日志

    2016-09-14 11:53:01.037 12698 INFO keystone.common.wsgi [req-07b28d5b-084c-467e-b45a-a4c8a52b7e96
    9ff041112e454cca9b54bf117a80ca29 15426931fe4746d08736c5e5c1da6b1c 
    - 6e495643fb014e5e8a3992c69d80d234 6e495643fb014e5e8a3992c69d80d234] 
    GET http://controller02:35357/v3/auth/tokens

    (1) type = composite

    這個(gè)類(lèi)型的section會(huì)把URL請(qǐng)求分發(fā)到對(duì)應(yīng)的Application,use表明具體的分發(fā)方式,比如”egg:Paste#urlmap”表示使用Paste包中的urlmap模塊,這個(gè)section里的其他形式如”key = value”的行是使用urlmap進(jìn)行分發(fā)時(shí)的參數(shù)。

    (2) type = app

    一個(gè)app就是一個(gè)具體的WSGI Application。

    (3) type = filter-app

    接收一個(gè)請(qǐng)求后,會(huì)首先調(diào)用filter-app中的use所指定的app進(jìn)行過(guò)濾,如果這個(gè)請(qǐng)求沒(méi)有被過(guò)濾,就會(huì)轉(zhuǎn)發(fā)到next所指定的app進(jìn)行下一步的處理。

    (4) type = filter

    與filter-app類(lèi)型的區(qū)別只是沒(méi)有next。

    (5) type = pipeline

    pipeline由一系列filter組成。

    這個(gè)filter鏈條的末尾是一個(gè)app。pipeline類(lèi)型主要是對(duì)filter-app進(jìn)行了簡(jiǎn)化,否則,如果多個(gè)filter,就需要多個(gè)filter-app,然后使用next進(jìn)行連接。OpenStack的paste的deploy的配置文件

    主要采用的pipeline的方式。

    因?yàn)閡rl為http://192.168.118.1:5000/v2.0/tokens,因?yàn)榛緐rl的后面接的信息為/v2.0,所以將到public_api的section作相應(yīng)操作。

    “openstack云計(jì)算keystone架構(gòu)怎么用”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

    向AI問(wèn)一下細(xì)節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI