了解 Code Engine 体系结构和工作负载隔离
IBM Cloud® Code Engine 是 IBM Cloud 平台,用于将容器映像,12 因子应用程序,函数和批处理作业统一为一站式商店。 它是一个多租户系统,由三个主要构建块组成: 一个控制平面,一个 (一组) 分片 (或分片) 和一个路由层。 控制平面和分片作为单独的多专区 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 项目资源,并请求将项目放置在分片上。 |
项目布置控制器 | 选择片段,并请求在该片段上创建,删除和隔离项目。 |
API 服务器 | 提供所选项目的目标信息 (KUBECONFIG 文件)。 它还会执行 IAM 访问策略检查并写入审计记录。 |
Kube API proxy |
将每个 API 请求代理到正确的分片集群,执行 IAM 策略检查并写入审计记录。 |
分片正在运行客户工作负载,例如构建,批处理作业或应用程序。 因此,分片集群运行以下微服务来控制客户工作负载。
组件 | 用途 |
---|---|
项目隔离控制器 | 管理和隔离对应于 Code Engine 项目资源的 Kubernetes 名称空间。 它监视并确保实施隔离方面,例如基于角色的访问控制 (RBAC),pod 安全策略,资源配额和网络策略。 |
项目域和证书控制器 | 管理项目的路由端点的域和证书。 端点由 DNS 条目和通配符证书组成。 |
Knative 和 Istio | 管理应用程序的生命周期。 Knative 负责扩展应用程序。 Istio 负责将流量路由到应用程序的正确修订版和容器。 |
批处理控制器 | 管理作业和作业运行的生命周期和容器。 |
构建控制器 | 管理构建和构建运行的生命周期和容器。 |
服务绑定和 IBM Cloud 操作程序 | 管理与应用程序和作业的 IBM Cloud 服务绑定相关联的私钥的生命周期。 |
IBM Cloud Object Storage 事件源控制器 | 管理来自 IBM Cloud Object Storage 服务的事件预订的生命周期。 |
集群节点自动缩放器 | 通过根据容量需求添加和除去工作程序节点来扩展分片。 |
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-proxy
API 进行访问。 - 将在资源级别执行基于角色的访问控制检查,以仅允许授权用户对项目资源执行某些操作。
- 客户通过将
manager
,reader
或writer
角色分配给 IAM 中 Code Engine 项目资源的用户来控制授权。 - 为限制客户工作负载,Code Engine 强制实施以下概念:
- 通过各种 Linux 隔离技术进行容器隔离。 这些方法可确保多层安全性,以防止容器的特权升级,并限制容器使用一组有限的系统特权。
- 资源配额和
LimitRange
可防止过度资源消耗。 - 用于控制环境中的网络流的网络策略。
- 例如,通过在
KubeDNS
中禁用逆向查找来保护共享多租户组件。 - 为了限制爆炸半径,每个分片集群都在自己的 VPC 中运行,该 VPC 与其他分片 VPC 隔离。
- 通过 Cloud Internet Services (CIS) 为所有端点 (包括客户应用程序) 自动启用 DDoS 保护,而无需额外费用。 DDoS 保护范围包括系统互连 (OSI) 第 3 层和第 4 层(TCP/IP)协议攻击,但不包括第 7 层( )攻击。HTTP 参见 DDoS 保护。
- 如果需要网络应用程序防火墙(WAF)规则,请在 Code Engine 端点前配置自己的 IBM Cloud Internet Services ( CIS ) 实例或带有自定义域的第三方网关服务,并在此实例中启用网络应用程序防火墙。