Openstack keystone組件詳解

OpenStack Keystone 

Keystone(OpenStack Identity Service)是 OpenStack 框架中負責管理身份驗證、服務規則和服務令牌功能的模塊。用戶訪問資源須要驗證用戶的身份與權限,服務執行操做也須要進行權限檢測,這些都須要經過 Keystone 來處理。Keystone相似一個服務總線, 或者說是整個Openstack框架的註冊表, 其餘服務經過keystone來註冊其服務的Endpoint(服務訪問的URL),任何服務之間相互的調用, 須要通過Keystone的身份驗證, 來得到目標服務的Endpoint來找到目標服務。linux

 

第一部分:json

keystone的功能有哪些?api

openstack是一個SOA架構,各個項目獨立提供先關的服務,且互不依賴,如nova提供計算服務,glance提供鏡像服務等。防止耦合性,且擴展性不高 實際上全部的組件都依賴keystone,
它有兩個功能:
(1)用戶管理:驗證用戶身份信息合法性
2)服務目錄管理:提供各個服務目錄的(Service Catalog:包括service和endpoint)服務,不管任何服務或者客戶訪問openstack都要訪問keystone獲取服務列表,以及每一個服務的endpoint
以下圖,這個圖只是一個簡單的表達,具體裏面的工做流程確定不止這些,各位慢慢往下看

 

Keystone基本概念介紹服務器

  1.user:User即用戶,指的是使用openstack service的用戶,能夠是人,服務,系統,就是說只要是訪問openstack service 的對象均可以稱爲User網絡

  2.Credentials:是用於確認用戶身份的憑證。說白了就是「信物」,能夠是:架構

    (1):用戶名和密碼框架

    (2):用戶名跟API Kye(祕鑰)              #(1)(2)用戶第一次確認身份的方法dom

    (3):一個keystone分配的身份的token            #(3)用戶已經確認身份後的方法 (token是有時間限制的)ide

  3.Authentication:ui

    (1):用戶身份驗證的過程。keystone服務經過檢查用戶的Credentials來肯定用戶的身份

    (2):第一次驗證身份是使用用戶名與密碼或者用戶名與API Key的形式。當用戶的Credentials被驗證後,keystone會給用戶分配一個Authentication token 供該用戶的後續請求操做(返回的token中就包含User的Role列表)

 

   4.Token

    (1):是一串數字字符串,當用戶訪問資源時須要使用的東西,在keystone中主要是引入令牌機制來保護用戶對資源的訪問,同時引入PKI、PKIZ、fernet、UUID其中一個隨機加密產生一串數字,對令牌加以保護

    (2):token並非長久有效的,是有時效性的,在有效的時間內能夠訪問資源。

  5.Role:

    (1):自己是一堆ACL集合,主要用於權限的劃分。

    (2):能夠給User指定Role,是user得到role對應的操做權限。

    (3):系統默認使用管理Role的角色 管理員用戶:admin 普通用戶:member(老版本) user(新版本)

    (5):user驗證的時候必須帶有Project。老版本叫(Tenant)

 

大致流程以下圖:

 

  6.Policy

    (1):對於keystone service 來講,Policy就是一個JSON文件,rpm安裝默認是在/etc/keyston/policy.json。經過配置這個文件,keystone實現了對User基於Role的權限管理(User <-- Role(ACL) <--Policy)

    (2):Policy就是用來控制User對Project(tenant)中資源的操做權限

 

  7.Project(Tenant)

    (1):Project(Tenant)是一我的或服務所擁有的資源集合。不一樣的Project之間資源是隔離的,資源能夠設置配額

    (2):Project(Tenant)中能夠有多個User,每個User會根據權限的劃分來使用Project(Tenant)中的資源

    (3):User在使用Project(Tenant)的資源前,必需要與這個Project關聯,而且制定User在Project下的Role,一個assignment(關聯) 即:Project-User-Role

 

  8.Service 

    即服務,如Nova,Glace,等各個組件

  9.Endpoint:

    (1):用來經過訪問和定位某個openstack service的地址,一般是一個URL

    (2):不一樣的region有不一樣的Endpoint(region使用與跨地域的雲服務,好比像阿里雲有華北,華東等等,)

    (3):任何服務都訪問openstack service中的資源時,都要訪問keystone

    (4):Endpoint分爲三類:

      1.admin url —>管理員用戶使用 Port:35357

      2.internal url —>openstack內部組件間互相通訊 Port:5000 (組件之間通訊基於Restful api)

      3.public url —> 其餘用戶訪問地址 Port:5000

 

  region異地建機房,以下圖

  10.Service與Endpoint關係

    (1):在openstack中,每個service中都有三種Endpoint:Admin、Public、Internal(建立完service後須要爲其建立API Endpoint)

    (2):Admin使用者爲管理員,可以修改User Project(Tenant)

    (3):public使用者爲客戶端,使用者在外網管理本身雲服務器

    (4):internal使用者爲內部組件間相互調用

    (5):三種Endpoint在網絡上開放的權限也不一樣,Admin一般只能對內網開放,public一般能夠對外網開放,internal只能對有安裝openstack服務的機器開放

 

  11.V3版本更新

    1.Tenant更改成Project

    2.添加了Domain(對系統資源進行限額)

    3.添加了Group (組的概念爲了更好的管理用戶,例如linux下對組受權,其組下面的用戶也有了相應的權限)

    4.member更改成user

 

 

 第二部分:

    舉個例子

    將上面各個部分結合起來。

    好比說,某公司年會組織跟團去旅遊(公司至關於一個group,公司的員工至關於User)。到了晚上要住店,首先要先到前臺登記(前臺就至關於Keystone),對前臺(keystone)來講,你要住店要拿出你的證實(對keystone來講就是要證實你是你)。

    怎麼辦?拿出身份證,這裏的身份證就至關於Credentials(用戶名和密碼),前臺(keystone)會進行驗證你的身份信息(Authentication),驗證成功後,前臺(Keystone)會給你一個房卡(Token),而且有不一樣的房卡(好比:普通卡,會員卡,白金卡等),不一樣的卡有不一樣的權限(Role),而且拿到房卡後,前臺(keystone)會給你一個導航圖(Endpoint)讓你找到你的房間。而且一個酒店不光會有住宿服務,可能還有別的服務(service),像餐飲,娛樂,按摩等等,好比說要去吃飯,不知道路線怎麼走,看一下導航圖(endpoint)就知道了,到餐飲部門(service)會有三個路線(Endpoint)能夠走。爲何會有三個,領導層通道 --> 走後門(admin),內部員工通道 -->(internal),客人通道  -->(public)。知道如何去,也有了權限(Token/Role)到了餐飲部門,當你點餐的時候,會讓你刷上你的會員卡(這個步驟就是service像keystone確認你有沒有權限),驗證成功後,你就能夠點餐吃飯

  圖片理解

 

第三部分

  官方介紹

    1.User:has account credentials, is associated with one or more projects or domains

         user是帳戶憑證,是與一個或多個項目或相關的域

    2.Group: a collection of users, is associated with one or more projects or domains

                group就是用戶的一個集合,與一個或多個項目或相關的域

    3.Project(Tenant): unit of ownership in OpenStack, contains one or more users

        project(tenant)是一個單位,指在openstack中可用的資源,它包含一個或多個用戶

    4.Domain:unit of ownership in OpenStack, contains users, groups and projects

        domain是一個單位,它包含用戶、組和項目

    5.Role:a first-class piece of metadata associated with many user-project pairs

        role一個用戶與project相關聯的元素據

    6.Token:identifying credential associated with a user or user and project

        Token鑑定憑證關聯到用戶或者用戶和項目

    7.Extras:bucket of key-value metadata associated with a user-project pair

        extras關於用戶-項目的關係,還能夠設置一些其餘的屬性

    8.Rule:describes a set of requirements for performing an action

        rule描述了一組要求 執行一個動做

 

 

第四部分

  工做流程(以建立一個VM爲例)

  

上面的圖主要是講述keystone在各個組件之間的做用,先不要去想別的組件是如何工做的。經過上面那幅圖能夠看出來keystone在各個組件間扮演着一箇中間人的做用,每一個服務於服務間使用或者某個用戶與服務間的使用,都要先到keystone這裏來報道!

 

第五部分

  官方介紹

 

  詳解

    1.用戶/API 想建立一個實例,首先會將本身的credentials發給keystone。認證成功後,keystone會頒給用戶/API一個臨時的令牌(Token)和一個訪問服務的Endpoint。 PS:Token沒有永久的

    2.用戶/API 把臨時Token提交給keystone,keystone並返回一個Tenant(Project)

    3.用戶/API 向keystone發送帶有特定租戶的憑證,告訴keystone用戶/API在哪一個項目中,keystone收到請求後,會發送一個項目的token到用戶/API  PS:第一個Token是來驗證用戶/API是否有權限與keystone通訊,第二個Token是來驗證用戶/API是否有權限訪問我keystone的其它服務。用戶/API 拿着token和Endpoint找到可訪問服務

    4.服務向keystone進行認證,Token是否合法,它容許訪問使用該服務(判斷用戶/API中role權限)?

    5.keystone向服務提供額外的信息。用戶/API是容許方法服務,這個Token匹配請求,這個Token是用戶/API的

    6.服務執行用戶/API發起的請求,建立實例

    7.服務會將狀態報告給用戶/API。最後返回結果,實例已經建立

相關文章
相關標籤/搜索