在 Kubernetes 中使用 Service Mesh 实现微服务治理

AI 编程助手,豆包旗下的编程助手,提供智能补全、智能预测、智能问答等能力,节省开发时间,释放脑海中的创造力,支持 VSCode,点击体验 AI

微服务架构的出现,让我们可以将大型应用拆分成独立部署、可维护和扩展的小型微服务。随着微服务数量的增加,治理变得越来越复杂。为了应对这一挑战,Service Mesh 技术应运而生。

本文将介绍在 Kubernetes 中使用 Service Mesh 实现微服务治理,并提供示例代码和指导意义,帮助读者深入学习和理解该技术。

什么是 Service Mesh?

Service Mesh 是一个新兴的微服务治理模型,它提供了一个云原生的解决方案,用于将微服务的部署、管理和监控从应用程序中解耦出来。Service Mesh 实现了对服务间通信的控制和管理,从而可以更好地协调和协作微服务。

在 Service Mesh 的体系结构中,数据流与控制流分离,通过注入 sidecar(代理)容器,来实现服务的路由、负载均衡、服务发现、故障恢复、安全认证和监控等一系列功能,并将这些功能进行统一的管理。

Service Mesh 的组件和架构

让我们来看一下 Service Mesh 的组件和架构,服务网格中的两个最重要的组件是:

  • 控制器(Control Plane):控制器是服务网格中的核心组件,演示实时路由、流量管理、安全认证等操作,并且一般提供图形化的用户界面给管理员使用,方便管理整个服务网格。
  • sidecar 代理容器(Sidecar Proxy Containers):这些容器负责将所有的网络请求和响应拦截下来,然后由控制器进行把控,实现微服务治理和流量控制。

如图所示,整个 Service Mesh 架构中,sidecar 容器被注入到每个服务中,用于处理进出该服务的网络流量,实现微服务治理和流量控制。

Kubernetes 中 Service Mesh 的实现

下面我们来介绍如何在 Kubernetes 中使用 Istio 来实现 Service Mesh 技术。

安装 Istio

首先要确认 Kubernetes 集群是否参考官方安装文档配置了 Istio 的要求。然后,在 Kubernetes 中安装 Istio 的核心组件是使用 Helm 这个包管理工具。文旦这里使用 Helm 3 版本来进行安装:

- ---- -- ----------------------------- - -- -
- -- ------------
- ------ -------------------
- -------- ------- ----- ------------

上面的命令将 Istio 安装到 Kubernetes 集群中,并部署了 Istio 组件和配置相关的 Kubernetes 资源。

部署微服务应用

接下来,我们需要在 Kubernetes 上部署一个简单的微服务应用进行演示。这里我们选择在 Kubernetes 上部署一个 SpringBoot 应用 Helloworld。

----------- -------
----- ----------
---------
  ----- ----------
-----
  --------- -
  ---------
    ------------
      ---- ----------
  ---------
    ---------
      -------
        ---- ----------
    -----
      -----------
      - ----- ----------
        ------ ----------------------
        ------
        - -------------- ----
---
----------- --
----- -------
---------
  ----- ----------
-----
  ---------
    ---- ----------
  ------
  - ----- ----

上面的 YAML 文件定义了一个 Deployment 和一个 Service,其中:

  • Deployment 使用 superleeyom/helloworld 镜像创建了 3 个副本
  • Service 将 HTTP 路由到 helloworld 的 8080 端口

如果您想了解有关如何在 Kubernetes 中部署 SpringBoot 应用的更多信息,请参考我的另一篇博客 《Docker 容器化 SpringBoot 应用部署到 Kubernetes》 进行学习。

Istio Sidecar 注入

现在我们已经准备好部署微服务应用和 Istio,下面我们将使用 Istio sidecar 自动注入功能将 Istio sidecar 副本注入到 Helloworld Deployment 中。

- ------- ----- --------- ------- -----------------------
- ------- ----- -- ---------------

首先,我们需要在 namespace 中启用 istio-injection=enabled 标签。这表明新创建的所有 pods 都将自动注入 Istio sidecar。

其次,应用 Kubernetes 服务清单(yaml)文件:

  • 使用默认命名空间
  • 启用 Istio sidecare 自动注入的标签
  • 启用应用程序和服务

然后,通过使用以下命令来查看您的 Istio sidecar 是否已被注入:

- ------- --- ----

测试 Istio

现在我们已经将 Istio sidecar 注入到 Helloworld Deployment 中,我们需要测试 Istio 是否成功加载,并控制 Kubernetes 群集中的流量。

首先,使用 kubectl apply 应用下面的虚拟服务配置文件(virtual-service.yaml):

----------- ----------------------------
----- --------------
---------
  ----- ----------
-----
  ------
  - ------------------------------------
  -----
  - ------
    - ------------
        ----- ----------
        -----
          ------- ----

该配置文件将 Helloworld 应用程序的所有流量定向到 8080 端口。要查看 Istio Sidecar 是否汇总了运行的 pod,请使用以下命令:

- -------- --

最后,要查看哪些部署处理了请求,使用以下 Istio 命令:

- -------- ------------

监控与可视化

要将 Istio dashboard 用于监视 Kubernetes 上的微服务治理,您需要为其创建一个 NodePort。然后,您就可以在 Kubernetes 外部使用这个 NodePort 来访问 Istio。

- ------- ----- -- -----------------------------------------------------------------------------------------
- ------- ----- -- --------------------------------------------------------------------------------------
- ------- ----- -- ------------------------------------------------------------------------------------
- ------- ----- -- -------------------------------------------------------------------------------------
- ------- ----- -- --------------------------------------------------------------------------------------------
- ------- ----- -- -------------------------------------------------------------------------------------------

现在可以通过访问 Istio Gateway 了解 Istio 群集中的详细信息:

- -------- --------- -----

结论

在 Kubernetes 中使用 Service Mesh 实现微服务治理是保持技术创新的迈出的一步。本文介绍了 Service Mesh 的概念、技术组件、Kubernetes 环境下的部署和安装指南,以及如何使用 Istio 进行监视和可视化。

Service Mesh 在微服务和云原生架构中具有很大的前途和潜力,帮助团队更好地管理和扩展应用程序。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/67176ecaad1e889fe2217ed7


猜你喜欢

  • 调试 Serverless 应用程序中的 Lambda 函数

    简介 在 Serverless 应用程序中,Lambda 函数是重要的组成部分。相比于传统的应用程序,Serverless 应用程序具有更高的弹性、可伸缩性和可靠性,然而由于使用服务器无关架构,调试 ...

    20 天前
  • 如何使用 Babel 实现 ES6+API 的支持

    JavaScript 是一门动态、解释型的编程语言,它被广泛应用于前端开发。随着时间的推移,JavaScript 的版本也不断升级,其中 ECMAScript 6(简称 ES6)是目前最新的正式版本。

    20 天前
  • 响应式设计中如何选择合适的前端框架

    随着移动设备和平板电脑的普及,响应式设计成为现代web应用程序的必备功能。响应式设计允许web应用程序在不同设备的显示器上呈现出不同的布局和样式,从而提供更好的用户体验。

    20 天前
  • Webpack 代码分离的原理与实践

    Webpack 代码分离的原理与实践 前言 Webpack 是当下前端最流行的打包工具之一,它的优点众所周知:处理模块化、自动化,优化代码结构,加速页面加载速度等。

    20 天前
  • RxJS 中 mergeAll 操作符的应用场景

    RxJS 中 mergeAll 操作符的应用场景 RxJS 是一个流行的函数响应式编程库,它提供了许多操作符来处理大量的数据流。其中一个常用的操作符是 mergeAll,它非常适合用于从多个可观察对象...

    20 天前
  • 使用 Jest 框架测试 React Hooks 的指导与建议

    随着 React Hooks 的出现,前端开发者们在组件开发过程中得到了更加优秀和强大的实现方式。而测试在开发过程中也变得越来越重要,以确保组件的正确性和维护性。在这篇文章中,我们将会探讨如何使用 J...

    20 天前
  • 基于 Tailwind CSS 实现响应式背景图的技巧

    Tailwind CSS 是一种相对较新和流行的 CSS 框架,它采用了一种不同于传统 CSS 的工作思路,提供了一系列可复用的类,可以大大简化前端开发中的 CSS 编写工作。

    20 天前
  • Dockerfile 构建 Java 应用时的常见问题及解决方法

    Docker 可以帮助我们轻松地部署应用程序,同时还能确保应用程序在不同环境中的一致性。本文将介绍在使用 Dockerfile 构建 Java 应用程序时可能遇到的一些常见问题以及解决方法。

    20 天前
  • 解析 ES10 中的异步迭代器 (AsyncIterator) 及使用方式

    异步迭代器概念 在 ES10 中,异步迭代器 (AsyncIterator) 是实现了一个[Symbol.asyncIterator]的对象,它可以在迭代过程中返回 Promise 对象,使得迭代过程...

    20 天前
  • 在 Fastify 中实现微服务架构

    随着云计算、容器化等技术的广泛应用,微服务架构在企业级应用中越来越受欢迎。微服务架构通过将应用拆分成多个独立的小服务单元,提高了应用的可伸缩性、可维护性和可测试性。

    20 天前
  • Gulp + Mocha:使用 Stream 进行自动测试

    前端开发离不开自动化工具,而 Gulp 和 Mocha 是两个很有用的工具。Gulp 是一个基于流的自动化构建工具,可以帮助前端开发者自动化地处理重复性的工作。而 Mocha 是一个 JavaScri...

    20 天前
  • 在 Deno 中如何实现任务调度?

    简介 Deno 是一款基于 V8 引擎的 JavaScript/TypeScript 运行时,它具有安全、快速、轻量、易用等优点。它为前端/后端/中间件等多个场景提供支持,并且可以通过模块化方式扩展功...

    20 天前
  • Serverless 框架实现微服务:一个全面指南

    什么是 Serverless Serverless,中文翻译为“无服务器”,其实并不是真的没有服务器,而是指开发者可以不需要管理服务器或运行环境,专注于应用程序的业务代码编写。

    20 天前
  • 响应式设计中如何解决视觉框架缩放失真问题?

    当我们打开一个网站时,可以随意地改变浏览器的大小,但是有些网站在改变浏览器大小后,网站的布局和内容会出现缩放失真的情况,这对用户体验来说并不友好。这就是视觉框架缩放失真问题(Visual Framew...

    20 天前
  • 处理 Jest 测试中的 timeout 及其原因

    在进行前端自动化测试时,我们经常使用 Jest 这个测试框架,它提供了一些强大的功能,如快照测试、模拟函数和异步测试等。然而,在进行异步测试时,我们常常会遇到 Jest 的 timeout 问题,本文...

    20 天前
  • 如何在 Chai.js 中测试大型 JSON 字符串

    Chai.js 是一款流行的 JavaScript 测试库,它可以与各种测试框架结合使用,例如 Mocha 和 Jasmine。在前端开发中,我们通常需要测试数据的正确性和完整性,特别是当我们处理大型...

    20 天前
  • 如何解决 Vue-Router 层级嵌套模式下导航条 Bug

    在使用 Vue-Router 搭建前端路由时,层级嵌套模式是经常使用的一种方式。但是在这种模式下,我们可能遇到一个导航条的 BUG,即当前激活的菜单项与当前页面的路由不匹配。

    20 天前
  • Vue.js 单页面应用 SEO 问题及其解决技巧

    如果您是一个前端开发者或開發者,您肯定熟悉 Vue.js,一个流行的 JavaScript 框架。Vue.js 提供了用于开发单页面应用程序 (SPA) 的工具,并且可以使用其高效且灵活的 API 来...

    20 天前
  • ECMAScript 2019(ES10)新特性之 Array.flat()

    在 JavaScript 的开发中,经常需要处理多维数组。如果需要将多维数组转换为单一维度数组,以前的做法通常是使用循环或递归遍历所有的数组元素,将它们加入到一个新的数组中。

    20 天前
  • 使用 Mocha 测试 JavaScript 应用程序

    Mocha 是一个 JavaScript 测试框架,用于测试 Node.js 和浏览器中的 JavaScript 应用程序。它提供了一种简单的方式来编写和运行测试,并生成可读性强的报告。

    20 天前

相关推荐

    暂无文章