Kubernetes OpenStack Integration
Last updated
Was this helpful?
Last updated
Was this helpful?
Kubernetes 所建立 pod 的資料可以儲存在 cinder 的 volume,建立的 service 也可以使用 neutron 的 loadbalancer 將對外服務開放,為了達成上述的目的,需要填入 openstack 相關資訊。
一般而言在 kubernetes master 的節點 /etc/kubernetes/cloud.conf 內填入 openstack 資訊,內容如下:
填完後,把 k8s 上的 service 型態改為 LoadBalancer,OpenStack 會根據上面的使用者跟 project,建立loadbalancer到該專案底下
透過 Rancher 所建立的 k8s ,可以在建立 k8s 前填完上面的參數,之後 Rancher 會自動建立此 config
由於需要知道 OpenStack 的使用者名稱和密碼,因此衍生出下列問題
當使用者更改密碼時,此 config 的密碼也只必須修改。
OpenStack Keystone API v3 extensions 有個功能叫做 trust,可以建立委託者(trust)和受託者(trustee)的關係,委託者可以授權給受託者,讓受託者可以針對被授權的project進行資源管理。
例如: 使用者admin 委託 使用者trustee 有權限對於 client 這個 project 進行資源管理。
建立 trust 的流程如下:
建立使用者,角色為Member,名稱自訂(此範例為trustee),密碼建議亂數
使用 admin token 建立 trust,trustor 為 admin使用者,trustee 為 trustee使用者,project 為 client,角色為 admin,使用指令如下
trustor_user_id: 委託人ID,為 admin
trustee_user_id: 受託人ID,為 trustee
project_id: 授權 project ID,為 client project ID
roles: 權限,只能授權 trust 所在 project 底下的權限
建立完成會得到此 trust 的 id,之後 Rancher 建立 cluster 的 API 中填入 trustee 使用者的ID跟密碼以及 trust 的 ID
這樣 k8s 就會使用 trustee 使用者對指定的 project 做資源管理
利用這樣的作法解決了使用者變更密碼的問題,透過 admin 建立 trustee 的使用者,密碼也是 admin 決定,因此可以得知密碼,密碼也不會更換。
這裡衍伸出了一個問題
當使用者建立 第一個 k8s,系統產生了一個 trustee 給這個 k8s 使用,
使用者再建立一個 k8s ,這時候如過要填入剛剛產生的 trustee 密碼,這時候資料庫就必須記錄 trustee 的密碼,就需要對密碼做加密和解密,所以只能選擇對稱式加密的演算法,因為密碼需要名碼。
如果要避開密碼記錄在資料庫,只能每個 k8s 都建立一個 trustee,只是會產生很多使用者。
Kubernetes 和 OpenStack 結合需要以下的資料:
Keystone URL
user-id (trustee 的 id)
password
tenant-id (使用者的 project id)
trust-id
subnet-id (k8s VM 所在的 subnet id)
floating-network-id (外網的 network id)
使用者得知 trustee 的 id 和密碼,是否可以使用 OpenStack API 操作資源?
可以,但是無法使用一般登入API的方法(/v3/auth/tokens),需要經過二次認證才能取得有效的 token
如果只使用 trustee id 和密碼登入取得的 token 沒有什麼用處,因為 trustee 不屬於任何 project 底下的成員,因此無法操作任何 project 底下的資源。
Rancher 使用建立 cluster API 時,需要加入,範例如下
詳細API參數說明,,以下為API範例
如果不是,使用上面 API 時填 Member 會錯誤,因為 admin 無法授權 Member 權限給 trustee,只能授權 admin,但是授權 admin 極度不安全,因此要可以授權 Member 的角色,需要先去修改使用者 project 底下的 admin 成員,將權限改為 admin,Member ,
所謂的二次認證是指先使用一般的認證(帳密認證)取得 token,,回傳的 token 才能對授權的 project 進行資源操作,因此使用者必須了解其相關性,才能使用 API 操作資源,以下是第二次認證要填的資料