在 Kubernetes 应用上启用 Oracle Cloud Infrastructure Service Mesh

Oracle Cloud Infrastructure (OCI) 客户越来越多地转向微服务架构,该架构及其优势也带来了新的挑战。在微服务架构中,单体应用程序分为较小的微服务,使用 API 通过网络进行通信。这会导致网络流量激增,并增加架构中的复杂性和整体攻击面。

将服务网格添加到微服务可以缓解微服务架构带来的许多挑战,并具有以下优势:
  • 允许您控制微服务流量。
  • 提供对应用程序的可见性。
  • 使微服务无需对应用代码进行任何更改即可安全地连接。
通过 OCI Service Mesh,您可以将托管服务网格架构部署到 Oracle Cloud Infrastructure Kubernetes EngineOCI Kubernetes Engine 或 OKE)集群。此参考体系结构提供了在 OKE 集群中部署的 OCI 服务网格体系结构的详细示例。

OCI 服务网络功能

安全
  • 执行与安全相关的策略

    OCI 服务网络使用访问策略定义访问规则。访问策略强制实施微服务之间的通信,并且只允许来自应用程序内部和外部的已验证请求。访问策略还用于定义允许与外部服务的通信。

  • 零信任

    OCI Service Mesh 可在所有微服务中自动实施零信任安全架构。微服务之间的数据是加密的。在通信开始时需要微服务到微服务的标识。双方必须与其身份信息交换凭证。这样,服务可以相互识别,以确定他们是否有权进行交互。这是通过双向 TLS 实现的,使用 Oracle Cloud Infrastructure Certificates ( OCI Certificates ) 服务和 Oracle Key Management Cloud Service 来管理证书和密钥。

流量管理
  • 流量转移

    OCI Service Mesh 支持您进行金丝雀部署。当您将代码的新版本发布到生产环境时,您只允许部分流量访问它。通过该功能,您可以快速部署应用程序并尽可能减少干扰。您可以定义用于管理网格内所有微服务间通信的路由规则。您可以将部分流量路由到服务的特定版本。

观测
  • 监视和日志记录

    OCI 服务网络在提供遥测信息方面具有独特优势,因为所有微服务间通信都必须通过它。这样,服务网格可以捕获遥测数据,例如源、目标、协议、URL、持续时间、状态代码、延迟、日志记录和其他详细统计信息。您可以将日志记录信息导出到 Oracle Cloud Infrastructure Logging ( OCI Logging ) 服务。OCI 服务网络提供两种类型的日志:错误日志和流量日志。可以使用这些日志调试 404 或 505 个问题或生成基于日志的统计信息。度量和遥测数据可以导出到 Prometheus 并使用 Grafana 进行可视化。两者都可以直接部署到 OKE 集群中。

体系结构

Oracle Cloud Infrastructure Service Mesh (OCI Service Mesh) 使用 Sidecar 模型。此体系结构将实现网络功能的代码封装到网络代理中,然后依赖于要重定向到 sidecar 代理的来自和到服务的通信。它被称为 sidecar,因为一个代理连接到每个应用程序,就像一个 sidecar 连接到摩托车。在 OKE 中,应用程序容器与代理 sidecar 容器位于同一 pod 中。由于它们位于同一个 pod 中,因此它们共享相同的网络名称空间和 IP 地址,从而允许容器通过“localhost”进行通信。

OCI Service Mesh 包含以下两个主要组件:
  • 控制层

    OCI 服务网格控制层管理和配置用于路由流量的整个代理集合。它处理遥测的转发、运行状况检查、负载平衡、验证、授权和聚合。控制层与 OCI 证书服务和 OCI 密钥管理服务交互,为每个代理提供其证书。

  • 数据层

    数据层由部署在环境中的 Sidecar 代理的集合组成,负责应用程序的安全性、网络功能和可观察性。他们还收集并报告所有网格流量的遥测。Envoy 代理用于 OCI 服务网格的数据层。

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



oci_service_mesh_oke_arch-oracle.zip

此引用体系结构显示在具有三个服务的 OKE 集群中部署的应用程序。在其中部署应用程序的名称空间已“网格化”。“网格化”名称空间表示在名称空间中部署的服务将成为服务网格的一部分,并且部署的每个新 pod 将注入一个特使代理容器。在部署每个 pod 时,OCI 服务网格控制层会将配置和证书发送到每个代理容器。OCI Service Mesh 控制层与 OCI Certificates 服务和 Oracle Key Management Cloud Service 通信,以获取每个代理的证书。

部署入站网关以提供对应用程序的外部访问。入站网关是 OCI 服务网格数据层的一部分,也是从 OCI 服务网格控制层接收配置和证书的特使代理。

代理容器负责对目标服务执行服务搜索、流量加密和验证。代理容器还应用网络策略,例如在不同服务版本之间分配流量的方式以及强制执行访问策略。入站网关对服务网格外的流量执行相同的功能。

Prometheus 和 Grafana 部署在 OKE 集群中的独立名称空间中,该名称空间不属于服务网格。服务网格数据层将关键操作统计信息(如延迟、故障、请求和遥测)发送到 Prometheus 部署。Grafana 从 Prometheus 部署中提取数据,该部署可用于创建用于可视化的仪表盘。

OCI Service Mesh 与 OCI Logging 服务集成,创建服务网格后可以启用日志记录。OCI 服务网络提供两种类型的日志:错误日志和流量日志。这些日志可用于调试 404 或 505 个问题或生成基于日志的统计信息。

此体系结构具有以下 OCI 服务:

  • OCI Kubernetes 引擎 (OKE)

    提供可用于生产环境的高度可用、可扩展的 Kubernetes 集群,以便在云中部署容器化的应用。

  • 负载平衡器

    提供对 OKE 集群中入站网关的访问。入站将流量定向到 OKE 集群中请求的服务。

  • 证书颁发机构

    管理 OCI 服务网格服务的 TLS 证书。

  • 密钥管理

    管理证书颁发机构服务使用的密钥。

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

  • 区域

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

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

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

  • 安全列表

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

OCI 服务网格资源

在 OKE 集群中配置部署的 OCI 服务网格时,定义了多个映射到应用程序关键组件的 Kubernetes 资源。

下图描述了配置的 OCI 服务网格资源的方式:访问策略、入站网关、虚拟服务和虚拟部署映射到您的应用程序资源:K8s 服务、K8s 服务负载平衡器、部署和云池。


后面是 oci_service_mesh_oke_config.png 的说明
图 oci_service_mesh_oke_config.png 的说明

推荐

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

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

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

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

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

  • 负载平衡器带宽

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

注意事项

部署此引用体系结构时,请考虑以下选项。

  • 成本

    OKE 集群上 OCI 服务网格的控制层不收费。对于服务网格数据层的代理容器的资源利用率,将向客户收费。但是,在实践中,客户已经为 OKE 集群中的节点池支付资源,除非代理容器的利用率超过 100%,否则将 OCI 服务网格添加到微服务体系结构中不会产生额外费用。

  • 可用性

    OCI 服务网格的控制层始终以高可用性部署。

确认

  • Author: Chiping Hwang
  • Contributors: Dusko Vukmanovic, Anupama Pundpal