瞭解 Code Engine 架構與工作負載隔離
IBM Cloud® Code Engine 是 IBM Cloud 平台,可將容器映像檔、12-factor-apps、函數及批次工作統一為一站式服務。 它是由三個主要建置區塊組成的多租戶系統: 控制平面、一組 Shard (或 Shard) 及遞送層。 控制平面及 Shard 會實現為個別多區域 Kubernetes 叢集。 下圖提供架構的圖形概觀。
Code Engine 是以 IBM Cloud Kubernetes Service 叢集為基礎,並取決於 IBM Cloud Kubernetes Service的元件和工作量隔離。 如需相關資訊,請參閱 IBM Cloud Kubernetes Service VPC 叢集架構。
所有元件都由 IBM 管理及擁有,並在 IBM Cloud 帳戶中執行。 每一個叢集都在其自己的 VPC 中執行,並與其他叢集分開。
Code Engine 控制平面會執行所有 Code Engine 使用者之間共用的元件,並使 Kubernetes 叢集成為真正的多租戶系統。 控制平面由部署在其上的四個微服務組成。
| 元件 | 目的 |
|---|---|
| 資源分配管理系統 | 在 IBM Cloud 資源控制器中建立並刪除 Code Engine 專案資源,並要求將專案放置在 Shard 上。 |
| 專案放置控制器 | 選取 Shard,並要求在 Shard 上建立、刪除及隔離專案。 |
| API 伺服器 | 提供所選專案的目標資訊 (KUBECONFIG 檔案)。 它也會執行 IAM 存取原則檢查並寫入審核記錄。 |
Kube API proxy |
將每一個 API 要求 Proxy 至適當的 Shard 叢集,執行 IAM 原則檢查,並寫入審核記錄。 |
Shard 正在執行客戶工作負載,例如建置、批次工作或應用程式。 因此,Shard 叢集會執行下列微服務來控制客戶工作量。
| 元件 | 目的 |
|---|---|
| 專案隔離控制器 | 管理並隔離對應於 Code Engine 專案資源的 Kubernetes 名稱空間。 它會監視並確保施行隔離層面,例如角色型存取控制 (RBAC)、Pod 安全原則、資源配額及網路原則。 |
| 專案網域及憑證控制器 | 管理專案路徑端點的網域及憑證。 端點由 DNS 項目和萬用字元憑證組成。 |
| Knative 和 Istio | 管理應用程式的生命週期。 Knative 負責調整應用程式的大小。 Istio 負責將資料流量遞送至應用程式的適當修訂及儲存器。 |
| 批次控制器 | 管理工作及工作執行的生命週期及儲存器。 |
| 建置控制器 | 管理建置和建置執行的生命週期和儲存器。 |
| 服務連結及 IBM Cloud 運算子 | 管理與應用程式及工作之 IBM Cloud 服務連結相關聯的密鑰生命週期。 |
| IBM Cloud Object Storage 事件來源控制器 | 從 IBM Cloud Object Storage 服務管理事件訂閱的生命週期。 |
| 叢集節點 Autoscaler | 根據容量需求來新增及移除工作者節點,以調整 Shard 的大小。 |
| IBM Cloud Monitoring | 將服務度量值傳送至 IBM Cloud Monitoring。 如需這些度量值的相關資訊,請參閱 Monitoring for Code Engine。 |
| IBM® Cloud Logs | 將平台日誌和指標轉送到IBM Cloud Logs。 如需相關資訊,請參閱 審核 Code Engine的事件。 |
Code Engine 工作量隔離
Code Engine 是租戶共用相同網路及計算基礎架構的多租戶地區服務。 特別是,網路及運算基礎架構是共用資源,且部分管理元件是所有租戶的共用元件。Code Engine 會實作下列控制項來區隔租戶:
- Code Engine 專案資源在 IBM Cloud 多區域地區中執行的安全 Kubernetes 環境內區隔。
- Code Engine 專案及其包含的資源,例如在使用共用管理元件的共用叢集上執行的應用程式、建置及工作。
- 若要區隔對專案資源的存取權,Code Engine 會在
apiserver和kube-api-proxy元件內執行數個層次的鑑別及授權檢查 (請參閱上表),- IAM 鑑別及存取原則檢查是在專案層次上執行。
- 若要管理對基礎 Kubernetes API 的多方承租戶存取權,不容許直接存取 API 伺服器。 請改用 Code Engine 自訂
Kube-api-proxyAPI 來存取。 - 角色型存取控制檢查是在資源層次上執行,只容許授權使用者對專案資源執行特定作業。
- 授權由客戶透過將 IAM 內 Code Engine 專案資源的
manager、reader或writer角色指派給使用者來控制。 - 若要限制客戶工作量,Code Engine 會施行下列概念:
- 透過各種 Linux 隔離技術進行儲存器隔離。 這些技術可確保多層安全,以防止儲存器的專用權提升,並限制儲存器使用一組有限的系統專用權。
- 資源配額及
LimitRange,以防止過度耗用資源。 - 網路原則,用於控制環境內的網路流程。
- 共用多租戶元件受到安全保護,例如,在
KubeDNS中停用反向查閱。 - 為了限制爆炸半徑,每個 Shard 叢集都在其自己的 VPC 中執行,該 VPC 與其他 Shard VPC 隔離。
- 會透過 Cloud Internet Services (CIS) 自動啟用所有端點 (包括客戶應用程式) 的 DDoS 保護,且不需額外付費。 DDoS 保護範圍涵蓋系統互連 (OSI) 第 3 層和第 4 層 (TCP/IP) 通訊協定攻擊,但不包括第 7 層 ( ) 攻擊。HTTP 請參閱 DDoS 保護。
- 如果您需要 Web 應用程式防火牆 (WAF) 規則,請在 Code Engine 終點前配置您自己的 IBM Cloud Internet Services ( CIS ) 範例或具有自訂網域的第三方閘道服務,並在此範例中啟用 Web 應用程式防火牆。