使用 OCI Kubernetes Engine 虚拟节点部署无服务器 Kubernetes

Oracle Cloud Infrastructure Kubernetes EngineKubernetes 引擎OKE )提供了不同的操作模式:托管节点和虚拟节点。Oracle Cloud Infrastructure (OCI) 管理控制层,但您可以选择操作模式。通过托管节点,您可以在租户中预配节点,并且您负责维护操作,例如升级、扩展和打补丁 worker 节点。OCI 可为这些操作提供自动化步骤,但您可以自行启动操作。借助虚拟节点,OCI 可部署、监视和管理 OCI 租户中实际节点的软件抽象。如果您希望将精力集中在工作负载、云池和应用逻辑上,而无需管理、扩展、升级和故障排除节点基础设施,则可以利用虚拟节点获得无服务器 Kubernetes 体验,大规模运行容器化应用。

这两种操作模式都可以支持最关键任务的基本应用程序。通过虚拟节点,Kubernetes 操作可以简化,并提供出色的性价比。托管节点与虚拟节点之间的权衡取决于托管节点;您可以更有效地控制节点基础结构。您可以将 Kubernetes 资源配置为使用 HostPortHostNetwork,或者运行 DaemonSets 以及应用程序或工具可能需要的其他选项。在大多数用例中,这些选项不是必需的。

无需微调对容器运行和管理的控制,即可充分利用虚拟节点。如果您的应用需要配置与虚拟节点不可用的节点基础结构,则使用托管节点。

体系结构

此体系结构描述部署在具有虚拟节点的 OCI Kubernetes Engine (OKE) 集群中的应用服务器,该集群允许您在客户租户内的另一个子网中部署的 Oracle MySQL Database Service 数据库上执行、创建、读取、更新和删除 (CRUD) 操作。应用服务器通过映射到 Kubernetes 入站控制器的负载平衡器服务在外部访问。应用程序需要密码才能访问 Oracle MySQL Database Service ,该服务存储在 Oracle Cloud Infrastructure Vault 中。

要将 OKE 集群与 OCI Vault 集成,请在 OKE 集群中部署外部密钥操作员。这样,您可以定义映射到 OCI Vault 的 SecretStore 资源来保存数据库的密码。映射 SecretStore 资源后,OKE 集群可以作为 Kubernetes 密钥访问密码。具有从 OCI Vault 读取权限的 OCI Identity and Access Management 角色允许云池访问密钥。该角色与云池定义中使用的 Kubernetes 服务账户关联,以授予其从 OCI Vault 读取的访问权限。

下图说明了此引用体系结构。

下面是 k8n-virtual-nodes.png 的说明
插图 k8n-virtual-nodes.png 的说明

k8n-virtual-nodes-oracle.zip

该体系结构具有以下组件:

  • Tenancy

    租户是 Oracle 在您注册 Oracle Cloud Infrastructure 时在 Oracle Cloud 中设置的安全隔离分区。您可以在您的租户内的 Oracle Cloud 中创建、组织和管理资源。租户是公司或组织的同义词。通常,公司将具有单个租户并反映其在该租户中的组织结构。单个租户通常与单个订阅关联,单个订阅通常只有一个租户。

  • 区域

    Oracle Cloud Infrastructure 区域是包含一个或多个数据中心(称为可用性域)的本地化地理区域。地区独立于其他地区,远距离可以把它们分开(跨越国家甚至大陆)。

  • 区间

    区间是 Oracle Cloud Infrastructure 租户中的跨区域逻辑分区。使用区间在 Oracle Cloud 中组织资源、控制对资源的访问并设置使用限额。要控制对给定区间中资源的访问,您可以定义策略来指定谁可以访问资源以及可以执行哪些操作。

  • 可用性域

    可用性域是区域中的独立数据中心。每个可用性域中的物理资源与其他可用性域中的资源隔离,从而提供容错能力。可用性域不共享电源或冷却设备等基础设施,也不共享内部可用性域网络。因此,一个可用性域出现故障不会影响区域中的其他可用性域。

  • 容错域

    容错域是可用性域内的一组硬件和基础设施。每个可用性域都有三个容错域,它们具有独立的电源和硬件。在多个容错域之间分配资源时,应用可以承受容错域内的物理服务器故障、系统维护和电源故障。

  • 虚拟云网络 (VCN) 和子网

    VCN 是一个可定制的软件定义网络,您可以在 Oracle Cloud Infrastructure 区域中设置。与传统的数据中心网络一样,VCN 允许您控制您的网络环境。VCN 可以具有多个不重叠的 CIDR 块,您可以在创建 VCN 后更改这些块。您可以将 VCN 划分为子网,子网可以限定为区域或可用性域。每个子网都包含一系列不与 VCN 中的其他子网重叠的连续地址。可以在创建后更改子网的大小。子网可以是公共子网,也可以是专用子网。

  • 负载平衡器

    Oracle Cloud Infrastructure Load Balancing 服务提供从单个入口点到后端多个服务器的自动流量分配。

  • Internet 网关

    通过互联网网关,可以在 VCN 中的公共子网与公共互联网之间进行流量传输。

  • 网络地址转换 (NAT) 网关

    通过 NAT 网关,VCN 中的专用资源可以访问 Internet 上的主机,而不会向传入的 Internet 连接公开这些资源。

  • 服务网关

    通过服务网关,您可以从 VCN 访问其他服务,例如 Oracle Cloud Infrastructure Object Storage 。从 VCN 到 Oracle 服务的流量通过 Oracle 网络结构传输,不会通过互联网传输。

  • Vault

    借助 Oracle Cloud Infrastructure Vault ,您可以集中管理加密密钥,以保护您的数据和用于保护对云中资源的访问的密钥凭证。可以使用 Vault 服务创建和管理 Vault、密钥和密钥。

  • 注册表

    Oracle Cloud Infrastructure Registry 是一个由 Oracle 管理的注册表,可帮助您简化开发到生产工作流。通过注册表,您可以轻松地存储、共享和管理开发对象,例如 Docker 映像。Oracle Cloud Infrastructure 的高可用性和可扩展性架构可确保您能够可靠地部署和管理应用。

  • 安全列表

    对于每个子网,可以创建安全规则来指定必须允许进出子网的通信的源、目标和类型。

  • 路由表

    虚拟路由表包含用于将流量从子网路由到 VCN 之外目的地的规则,通常是通过网关。

  • OCI Kubernetes 引擎

    Oracle Cloud Infrastructure Kubernetes EngineKubernetes EngineOKE )是一项完全托管、可扩展的高可用性服务,可用于将容器化应用部署到云中。您可以指定应用所需的计算资源,Kubernetes Engine 在现有租户的 Oracle Cloud Infrastructure 上预配这些资源。OKE 使用 Kubernetes 跨主机集群自动部署、扩展和管理容器化应用。

  • Oracle MySQL Database Service

    Oracle MySQL Database Service 是完全托管的 Oracle Cloud Infrastructure (OCI) 数据库服务,可帮助开发人员快速开发和部署安全的云原生应用。Oracle MySQL Database Service 针对 OCI 专有功能进行了优化,由 OCI 和 MySQL 工程团队 100% 构建、管理和支持。

    Oracle MySQL Database Service 具有集成的高性能分析引擎 (HeatWave),可直接对可操作的 MySQL 数据库运行复杂的实时分析。

  • 入站控制器

    Ingress 控制器 (ing) 是在 Kubernetes 集群中运行并管理 Ingress 资源的组件。它接收来自外部网络的流量,将其路由到正确的服务,并执行负载平衡和 SSL 终止。Ingress 控制器通常作为群集中的独立 pod 运行,并且可以独立于其管理的服务进行扩展。

  • Kubernetes 密钥

    Kubernetes 密钥可以包括敏感配置数据,例如验证令牌、密码和 SSH 密钥。通过密钥,您可以控制敏感数据,并降低向未经授权的用户公开数据的风险。Oracle Container Engine for Kubernetes 支持静态 Kubernetes 密钥加密。

  • 外部密钥运算符

    Kubernetes External Secrets Operator 将 Oracle Container Engine for KubernetesOracle Cloud Infrastructure Vault 集成。操作员从外部 API 读取信息,并自动将值注入到 Kubernetes 密钥中。

  • SecretStore

    Kubernetes 集群控制层将敏感配置数据(例如身份验证令牌、证书和凭证)存储为 etcd 中的 Kubernetes 密钥对象。Etcd 是 Kubernetes 用于集群协调和状态管理的开源分布式键值存储。在由 Container Engine for Kubernetes 创建的 Kubernetes 集群中,etcdOracle Cloud Infrastructure Block Volumes 服务中向块存储卷写入和读取数据。默认情况下,Oracle 会对块存储卷中的数据进行静态加密,包括 etcd 和 Kubernetes 密钥。Oracle 使用主加密密钥管理此默认加密,而无需您执行任何操作。要进一步控制主加密密钥的生命周期及其使用方式,您可以选择自行管理主加密密钥,而不是由 Oracle 来为您管理。

    创建新集群时,您可以指定使用 Oracle Key Management Cloud Serviceetcd 中的 Kubernetes 密钥进行加密。

  • 云池

    云池由一个或多个容器及其共享存储组成,以及有关这些容器如何一起运行的任何特定选项。通常,云池中的容器共享相同的网络和内存空间,并且可以访问共享卷进行存储。这些共享资源允许 pod 中的容器以无缝方式在内部进行通信,就像它们安装在单个逻辑主机上一样。

  • 虚拟节点

    虚拟节点是实际节点的软件抽象。虚拟节点部署在 OCI 的租户中,完全由 OCI 监视和管理。

推荐

使用以下建议作为起点。 您的要求可能与此处描述的体系结构不同。
  • VCN

    创建 VCN 时,请根据您计划附加到 VCN 中子网的资源数量,确定所需的 CIDR 块数和每个块的大小。使用标准专用 IP 地址空间内的 CIDR 块。

    选择不与要设置专用连接的任何其他网络(在 Oracle Cloud Infrastructure 、您的内部部署数据中心或其他云提供商中)重叠的 CIDR 块。

    创建 VCN 后,您可以更改、添加和删除其 CIDR 块。

    设计子网时,请考虑流量和安全要求。将特定层或角色中的所有资源附加到可以用作安全边界的同一子网。

    使用区域子网。

  • 网络安全组 (NSG)

    可以使用 NSG 定义一组适用于特定 VNIC 的入站和出站规则。我们建议使用 NSG 而非安全列表,因为 NSG 使您能够将 VCN 的子网体系结构与应用的安全要求分开。

    可以使用 NSG 定义一组适用于特定 VNIC 的入站和出站规则。我们建议使用 NSG 而非安全列表,因为 NSG 使您能够将 VCN 的子网体系结构与应用的安全要求分开。

  • 负载平衡器带宽

    创建负载平衡器时,您可以选择提供固定带宽的预定义配置,也可以指定定制(灵活)配置,在其中设置带宽范围并允许服务根据流量模式自动扩展带宽。通过任一方法,您都可以在创建负载平衡器后随时更改配置。

注意事项

使用虚拟节点时,请考虑以下事项。

要从虚拟节点开始,必须先创建具有虚拟节点池的 OCI Kubernetes Engine 集群,或将虚拟节点池添加到现有的 Kubernetes 引擎 (OKE) 集群。

  • 选择虚拟节点的配置和位置。
    • 配置确定处理器的类型以及可分配给每个 pod 的 CPU 和内存资源量。每个云池最多可以分配到所选配置的内存和 CPU 限制。

    • 虚拟节点将通过水平云池自动缩放器 (HPA) 的配置来扩展云池。无需配置节点自动缩放器。

    • 您可以将虚拟节点放在特定的可用性域和容错域中,这些可用性域和容错域非常适合您的高可用性 (HA) 需求。要实现最大冗余级别,请将虚拟节点放在 OKE 集群的可用性域内的每个容错域中。

    • 使用 Kubernetes 节点标签指定云池在虚拟节点上的位置。要获得云池在节点间平均分布,请使用 PodTopologySpread 约束条件。

  • 虚拟节点使用 VCN 本机云池网络。集群中的可用云池数受子网中可用的 IP 地址数限制。

    • 本机云池网络为每个云池提供 VCN 子网原生的 IP 地址,使每个云池都可以利用内置的 OCI 网络安全功能,例如 VCN 流日志、路由策略、VTAP 和安全组。
    • 考虑使用一个子网范围,该范围允许您预期使用的云池和节点数量,并为增长提供空间。
    • 定义网络安全组 (Network Security Group,NSG),以限制可以从云池入站和出站的流量类型。
    • 使用 VCN 流日志检查云池之间的所有网络流量,或使用 VTAP 捕获网络流量。
  • 允许虚拟节点中的云池访问具有工作负载标识的其他 OCI 服务。

    在某些情况下,云池可能需要访问 OCI 中的其他服务。

    • 使用工作量身份向虚拟节点中的云池授予权限。工作负载身份将 OCI Identity and Access Management 角色与分配给云池的 Kubernetes 服务账户关联。
  • 虚拟节点为您的云池提供虚拟机管理程序级隔离。

    安全漏洞可能允许容器内的恶意进程“逃避”并影响节点的内核,从而可能导致节点关闭。恶意代码还可以访问内存或存储中的数据并泄露数据。泄漏的数据可能属于多租户环境中的其他租户。

    • 虚拟节点为云池提供虚拟机管理程序级隔离。云池不与集群中的其他云池共享计算、内存和网络,从而降低了由恶意代码导致的节点关闭或属于其他租户的泄露数据的可能性。

确认

  • Author: Chiping Hwang