使用 Cloud Shell 在 OKE 上部署 OCI 服务网格和微服务
您的应用可以在云中运行,但云是否原生?新应用正在转向微服务而不是单体应用。微服务提供了更小、更细粒度的服务,其业务逻辑与轻量级通信协议紧密结合。
在微服务生态系统中,每个微服务需要相互通信,需要实施额外的业务逻辑或端点,以便微服务进行通信。通常不会保护群集中的这种微服务到微服务通信,有时需要将重试逻辑添加到每个微服务,以实现成功的通信。您还需要监视微服务的性能。发生什么错误?正在发送多少个请求?微服务响应需要多长时间?
Oracle Cloud Infrastructure (OCI) 服务网格是一项免费服务,可简化云原生应用的开发和运行。服务网格支持安全、可观察性和网络流量管理,而无需更改应用。服务网格会自动加密微服务之间的所有通信,并收集遥测、度量和日志以实现应用性能和健康状况监视。微服务使您能够利用自己的业务逻辑隔离服务,从而更快地引导新团队成员。您还可以在微服务生态系统中更快地修复、测试和部署 bug 修复。
体系结构
此体系结构旨在部署 Service Mesh 并将微服务通信重定向到 sidecar 代理。有两个微服务:家庭和价格。服务网格用于定义住宅和价格之间的流量拆分百分比。
- 主目录微服务有两个虚拟部署:主目录 v1 和主目录 v2。主页 v1 是显示价格的 Bootstrap 静态网页。主页 v2 是使用 VueJS 创建的动态 Web 页,通过 REST 从价格微服务检索价格。本地部署有一个路由表,用于在 v1 和 v2 之间拆分流量(来自入站网关)。默认拆分为 20:80,最初大部分流量都转到 v2。Home 使用端口 3000。
- Price 微服务有一个部署,用于从 Oracle Autonomous Database 和 Node Database Library 检索和更新价格。如果方案为空,价格将在首次调用时在 Oracle Autonomous Database 中创建方案和数据。价格还具有后台管理用户界面,用于在网页上维护价格。价格使用端口 3010。
应用程序容器与同一云池中的代理 sidecar 容器一起放置。两个容器共享相同的网络名称空间和 IP 地址,从而允许容器通过本地主机进行通信。sidecar 与应用程序代码分离,从而实现流量、安全和连接管理,而无需任何应用程序代码更改。
这些微服务作为容器存储在 Oracle Cloud Infrastructure Registry (OCIR) 中。创建入站网关以从 Internet 访问“主页”和“价格”管理页。访问策略允许从入站网关到主页和价格的流量,以及从主页到价格的流量。允许家庭和价格与外部服务之间的流量,以允许流向 Oracle Autonomous Database。
示例代码包含使用 Kubernetes CLI 工具 kubectl
构建和部署服务网格和 Oracle Autonomous Database 所需的 shell 脚本。实施示例代码的先决条件是在 Oracle Container Engine for Kubernetes (OKE) 上运行一个 Kubernetes 集群,并使用 kubectl
访问功能安装 Oracle Services Operator for Kubernetes。DNS 和 OCI 监视样例是可选的,并且仅使用 OCI 命令行界面。或者,可以使用 /etc/hosts
文件配置在本地访问服务网格。OCI 监视使用 Grafana,并在安装过程中创建自己的入站(OCI 负载平衡器)。这些脚本设计为从 OCI Cloud Shell 运行,但也可以从本地环境运行。成功部署服务网格后,可以轻松地针对流量拆分路由测试主页流量。最后,该示例还包含第三方工具 Kubeshark,可用于查看服务网格内的组件和流量。
下图说明了此参考体系结构。
service-mesh-cloud-shell-architecture.zip
该体系结构包含以下组件:
- 区域
Oracle Cloud Infrastructure 区域是一个局部地理区域,包含一个或多个称为可用性域的数据中心。区域独立于其他区域,广阔的距离可以将其分开(跨国家甚至大陆)。
- 故障域
故障域是可用性域内一组硬件和基础设施。每个可用性域都具有三个具有独立电源和硬件的容错域。在多个容错域中分配资源时,您的应用可以承受容错域中的物理服务器故障、系统维护和电源故障。
- 虚拟云网络 (VCN) 和子网
VCN 是您在 Oracle Cloud Infrastructure 区域中设置的可定制软件定义网络。与传统数据中心网络一样,VCN 允许您完全控制您的网络环境。一个 VCN 可以具有多个不重叠的 CIDR 块,您可以在创建 VCN 后对其进行更改。您可以将 VCN 细分为多个子网,这些子网可以限定到区域或可用性域。每个子网包含一系列不与 VCN 中的其他子网重叠的连续地址。创建后可以更改子网的大小。子网可以是公共子网,也可以是专用子网。
- 路由表
虚拟路由表包含将流量从子网路由到 VCN 外部的目标(通常通过网关)的规则。
- Internet 网关
互联网网关允许 VCN 中的公共子网与公共互联网之间的通信。
- 动态路由网关 (DRG)
DRG 是虚拟路由器,用于为同一区域中的 VCN 之间、VCN 与区域外的网络(例如另一个 Oracle Cloud Infrastructure 区域中的 VCN、内部部署网络或其他云提供商中的网络)的专用网络流量提供路径。
- 网络地址转换 (NAT) 网关
通过 NAT 网关,VCN 中的专用资源可以访问互联网上的主机,而不向传入的互联网连接公开这些资源。
- 安全列表
对于每个子网,您可以创建安全规则来指定必须允许进出子网的流量源、目标和类型。
- DNS
Oracle Cloud Infrastructure 域名系统 (Domain Name System,DNS) 服务是一个高度可扩展的全局任播域名系统 (Domain Name System,DNS) 网络,可提供增强的 DNS 性能、可恢复性和可扩展性,从而最终用户可以尽可能快地从任何位置连接到客户的应用。
- 适用于 Kubernetes 的容器引擎
Oracle Cloud Infrastructure Container Engine for Kubernetes 是一项完全托管、可扩展的高可用性服务,可用于将容器化应用部署到云中。您可以指定应用所需的计算资源,而适用于 Kubernetes 的容器引擎将在现有租户的 Oracle Cloud Infrastructure 上预配这些资源。适用于 Kubernetes 的容器引擎使用 Kubernetes 在主机集群中自动部署、扩展和管理容器化应用。
- Autonomous Database
Oracle Cloud Infrastructure Autonomous Database 是一个完全托管的预配置数据库环境,可用于事务处理和数据仓库负载。您不需要配置或管理任何硬件,也不需要安装任何软件。Oracle Cloud Infrastructure 可处理数据库创建以及备份、打补丁、升级和调优数据库。
- 服务网格
Oracle Cloud Infrastructure (OCI) 服务网格是 OCI 管理的应用程序基础结构层,用于服务到服务通信。它通过定义可观察性、安全性和流量管理标准来简化云原生应用的开发和部署。服务网格作为一组轻量级代理实施,这些代理与应用程序代码一起部署在客户的云池中,而无需应用程序识别它们。
- 注册表
Oracle Cloud Infrastructure Registry 是 Oracle 管理的注册表,可用于简化开发到生产工作流。通过注册表,您可以轻松存储、共享和管理开发构件,例如 Docker 映像。Oracle Cloud Infrastructure 的高可用性和可扩展的体系结构可确保您可以可靠地部署和管理应用。
- 内部部署网络
此网络是组织使用的本地网络。它是拓扑的发言人之一。
考虑事项
实施此服务网格示例代码时,请考虑这些功能。
- CI/CD
使用 GitHub 中的脚本添加 CI/CD 相对简单。OCI DevOps 和 GitHub 操作已成功用于构建和部署微服务。可以从 CI/CD 部署服务网格。
- 安全性
在代码样本中,允许从 Internet 对价格管理员进行通信,但在现实生活中,应该仅限于专用子网。还请考虑使访问策略更具体。
- API 规范
价格组件 API 是使用 OCI API Management 生成的,其中包含
price/api-docs/
中的 swagger.json。