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

阅读时长 8 分钟读完

微服务架构的出现,让我们可以将大型应用拆分成独立部署、可维护和扩展的小型微服务。随着微服务数量的增加,治理变得越来越复杂。为了应对这一挑战,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

纠错
反馈