使用 Rancher 的專案和 Kubernetes 命名空間
命名空間是 Kubernetes 的一個概念,它允許叢集內有虛擬叢集,這對於將叢集劃分為各自擁有自己的存取控制和資源配額的單獨「虛擬叢集」很有用。
專案是一組命名空間,它是 Rancher 引入的概念。專案允許您將多個命名空間作為一個群組進行管理,並在其中執行 Kubernetes 操作。您可以使用專案來支援多租戶,以便團隊可以存取叢集內的專案,而無需存取同一叢集中的其他專案。
專案在 UI 上被淡化,因為不需要在專案範圍內建立 Kubernetes 資源。但是,諸如 Secrets 之類的資源仍然可以在專案範圍內建立。
本節說明專案和命名空間如何與 Rancher 配合使用。
關於命名空間
命名空間是 Kubernetes 引入的概念。根據官方 Kubernetes 命名空間文件,
Kubernetes 支援由同一實體叢集支援的多個虛擬叢集。這些虛擬叢集稱為命名空間。[...] 命名空間旨在用於具有分布在多個團隊或專案中的眾多使用者的環境中。對於只有幾個到數十個使用者的叢集,您完全不需要建立或考慮命名空間。
命名空間提供以下功能:
- 為名稱提供範圍: 資源的名稱需要在命名空間內唯一,但不需要跨命名空間唯一。命名空間不能彼此巢狀,每個 Kubernetes 資源只能在一個命名空間中。
- 資源配額: 命名空間提供了一種在多個使用者之間劃分叢集資源的方法。
您可以在專案級別分配資源,以便專案中的每個命名空間都可以使用它們。您也可以透過明確地將資源分配給命名空間來繞過這種繼承。
您可以將以下資源直接分配給命名空間:
要在原生 Kubernetes 叢集中管理權限,叢集管理員需要為每個命名空間配置基於角色的存取策略。使用 Rancher,使用者權限則是在專案級別分配,權限會自動由特定專案擁有的任何命名空間繼承。
有關建立和移動命名空間的更多資訊,請參閱命名空間。
命名空間和 kubectl 的基於角色的存取控制問題
由於專案是 Rancher 引入的概念,kubectl 沒有能力將命名空間的建立限制為建立者可以存取的專案。
這意味著當具有專案範圍權限的標準使用者使用 kubectl 建立命名空間時,它可能無法使用,因為 kubectl 不要求新命名空間必須在某個專案範圍內。
如果您的權限限制在專案級別,最好透過 Rancher 建立命名空間,以確保您有權存取該命名空間。
如果標準使用者是專案擁有者,該使用者將能夠在該專案內建立命名空間。Rancher UI 將阻止該使用者在其可存取的專案範圍之外建立命名空間。
關於專案
就層次結構而言:
- 叢集包含專案
- 專案包含命名空間
您可以使用專案來支援多租戶,以便團隊可以存取叢集內的專案,而無需存取同一叢集中的其他專案。
在 Kubernetes 的基礎版本中,諸如基於角色的存取權限或叢集資源之類的功能被分配給各個命名空間。專案允許您透過同時授予個人或團隊對多個命名空間的存取權限來節省時間。
您可以使用專案執行以下操作:
當您建立叢集時,會自動在其中建立兩個專案:
叢集的預設專案
當您使用 Rancher 佈建叢集時,它會自動為叢集建立一個 default 專案。這是一個您可以用來開始使用叢集的專案,但您隨時可以刪除它並用具有更具描述性名稱的專案替換它。
如果您除了預設命名空間之外不需要更多內容,那麼您在 Rancher 中也不需要超過 Default 專案。
如果您需要超出 Default 專案的另一個組織層級,您可以在 Rancher 中建立更多專案來隔離命名空間、應用程式和資源。
系統專案
在故障排除時,您可以查看 system 專案以檢查 Kubernetes 系統中的重要命名空間是否正常運作。這個易於存取的專案使您不必對各個系統命名空間容器進行故障排除。
要打開它,請打開叢集檢視並點擊 叢集 > 專案/命名空間。此檢視顯示 system 專案中的所有命名空間。
system 專案:
- 在您佈建叢集時自動建立。
- 列出
v3/settings/system-namespaces中存在的所有命名空間(如果存在)。 - 允許您新增更多命名空間或將其命名空間移動到其他專案。
- 無法刪除,因為它是叢集操作所必需的。
在啟用了專案網路隔離選項的 RKE2/K3s 叢集中,system 專案會覆蓋專案網路隔離選項,以便它可以與其他專案通訊、收集日誌並檢查健康狀況。
專案授權
標準使用者僅在兩種情況下被授權專案存取權限:
- 管理員、叢集擁有者或叢集成員明確將標準使用者新增到專案的成員分頁。
- 標準使用者可以存取他們自己建立的專案。
Pod 安全策略
Rancher 擴展了 Kubernetes,除了叢集級別之外,還允許在專案級別應用 Pod 安全策略。但是,作為最佳實踐,我們建議在叢集級別應用 Pod 安全策略。
建立專案
本節說明如何建立 具有名稱和可選的 pod 安全策略、成員和資源配額的新專案。
為新專案命名
- 在左上角,點擊 ☰ > 叢集管理。
- 在叢集頁面上,前往您要在其中建立專案的叢集,然後點擊探索。
- 點擊叢集 > 專案/命名空間。
- 點擊建立專案。
- 輸入專案名稱。
建議:新增專案成員
使用成員部分為其他使用者提供專案存取權限和角色。
預設情況下,您的使用者被新增為專案 Owner。
-
被分配專案的
Owner或Member角色的使用者會自動繼承namespace creation角色。但是,此角色是一個 Kubernetes ClusterRole,這意味著其範圍擴展到叢集中的所有專案。因此,明確被分配專案的Owner或Member角色的使用者可以在他們被分配到的其他專案中建立命名空間,即使只分配了Read Only角色。 -
預設情況下,Rancher 的
project-member角色繼承自Kubernetes-edit角色,project-owner角色繼承自Kubernetes-admin角色。因此,project-member和project-owner角色都允許命名空間管理,包括建立和刪除命名空間的能力。 -
選擇
Custom即時建立自訂角色:自訂專案角色。
要新增成員:
-
在成員分頁中,點擊新增。
-
從選擇成員欄位中,搜尋您要分配專案存取權限的使用者或群組。只有在啟用外部身份驗證時,您才能搜尋群組。
注意事項:- 搜尋框中必須輸入至少 2 個字元才會顯示結果。
- 可以根據使用者名稱或顯示名稱搜尋使用者。
- 搜尋是基於前綴的(例如,搜尋
Sta時會出現名為Stan Dard的使用者,但搜尋Dar時不會出現),並且區分大小寫。
-
在專案權限部分,選擇一個角色。有關更多資訊,請參閱專案角色文件。
可選:新增資源配額
資源配額限制專案(及其命名空間)可以消耗的資源。有關更多資訊,請參閱資源配額。
要新增資源配額,
- 在資源配額分頁中,點擊新增資源。
- 選擇一個資源類型。有關更多資訊,請參閱資源配額。
- 輸入專案限制和命名空間預設限制的值。
- 可選: 指定容器預設資源限制,這將應用於專案中啟動的每個容器。如果您透過資源配額設定了 CPU 或記憶體限制,建議使用此參數。它可以在個別命名空間或容器級別上被覆寫。有關更多資訊,請參閱容器預設資源限制。
- 點擊建立。
結果: 您的專案已建立。您可以從叢集的專案/命名空間檢視中查看它。
| 欄位 | 說明 |
|---|---|
| 專案限制 | 專案的整體資源限制。 |
| 命名空間預設限制 | 每個命名空間可用的預設資源限制。此限制在建立時會傳播到專案中的每個命名空間。所有專案命名空間的組合限制不應超過專案限制。 |
刪除專案
- 在左上角,點擊 ☰ > 叢集管理。
- 在叢集頁面上,前往專案所附加到的叢集,然後點擊探索。
- 點擊叢集 > 專案/命名空間。
- 找到您要刪除的專案,然後點擊 ⋮。
- 選擇刪除。
當您刪除專案時,以前與專案關聯的任何命名空間將保留在叢集上。您可以在 Rancher UI 的專案/命名空間頁面的不在專案中分頁中找到這些命名空間。您可以透過移動它們將這些命名空間重新分配給專案。
延伸閱讀
您可以透過 Public API 以更程式化的方式建立專案和專案成員。有關更多資訊,請參閱專案工作流程文件。