K8S 服务网格

K8s(Kubernetes)服务网格是一种将服务之间的通信从应用层解耦到基础设施层的技术,它提供了一种透明且独立于语言的方式来自动化运维应用程序的网络功能。以下是对K8s服务网格的详细解读:

一、基本概念

  • 服务网格(Service Mesh):是一种网络架构模式,它用于处理服务间的通信,并提供诸如负载均衡、服务发现、认证授权、监控和追踪等功能。服务网格将这些功能从服务代码中解耦出来,由专门的代理(通常是Sidecar模式)来处理。
  • Sidecar模式:在这种模式下,每个服务都会附带一个代理容器(Sidecar),该容器负责处理所有进出该服务的流量。这种方式使得服务代码可以保持简洁,专注于业务逻辑,而网络和安全等问题则由Sidecar容器来处理。

二、主要组件

  • 控制平面(Control Plane):负责管理和配置数据平面上的代理。它类似于Kubernetes的API Server,提供了配置、监控和日志等功能。
  • 数据平面(Data Plane):由一系列代理组成,这些代理部署在每个服务的旁边,作为Sidecar容器运行。它们负责处理所有进出服务的流量,并根据控制平面的指令进行路由、认证、授权等操作。

三、主要功能

  1. 流量管理:服务网格提供了细粒度的流量控制功能,如流量分割、路由规则配置、故障注入和断路器等。这些功能使得DevOps工程师可以轻松地控制服务间的流量流向,进行金丝雀部署、蓝绿部署等测试。
  2. 安全性:服务网格通过TLS加密、JWT认证和RBAC访问控制等机制,为服务间的通信提供了安全保障。它还可以实现跨集群边界的一致性安全策略。
  3. 可观察性:服务网格提供了对整个网络拓扑的可观察性,包括延迟、流量、错误和饱和度等指标的监控。它还支持分布式跟踪,帮助理解请求的生命周期和分析服务依赖关系。
  4. 自动化运维:通过Sidecar模式,服务网格实现了对服务网络功能的自动化运维。开发人员可以专注于业务逻辑的开发,而无需关心网络和安全等底层问题。

四、常用实现

  • Istio:Istio是目前最流行的开源服务网格实现之一。它使用Envoy代理作为Sidecar,并提供了丰富的控制平面功能。Istio支持多种云平台和Kubernetes环境,并得到了Google、IBM、Microsoft等公司的支持。
  • Linkerd:Linkerd是另一个轻量级的开源服务网格实现。它提供了基本的服务网格功能,并注重性能和可扩展性。Linkerd也支持Kubernetes环境,并得到了社区的广泛认可。

五、实施步骤

  • 创建一个Kubernetes集群:可以在云平台或本地环境上创建一个Kubernetes集群。
  • 部署服务到集群中:将微服务应用打包成Docker镜像,并部署到Kubernetes集群中。
  • 安装和配置服务网格:选择适合的服务网格实现(如Istio或Linkerd),并进行安装和配置。
  • 配置服务网格的路由规则:根据业务需求配置服务网格的路由规则,控制流量的分发和策略。
  • 监控和管理服务:通过服务网格的监控和管理工具来监控和管理微服务应用。

K8s服务网格是一种强大的网络架构模式,它通过将服务之间的通信从应用层解耦到基础设施层,提供了丰富的网络、安全和可观察性功能。通过实施服务网格,企业可以更容易地管理大规模的微服务应用,并提升系统的可靠性和安全性。

六、Istio

架构

下图是一个 Istio 的典型架构
在这里插入图片描述
Istiod 作为控制面的统一组件,负责对接服务注册发现、路由规则管理、证书管理等能力,Envoy Proxy 作为数据面Sidecar代理业务流量,Istio 和Envoy Proxy 之间通过XDS 接口完成服务发现、路由规则等数据的传递,同时Istio 也提供了MCP Over XDS接口对接外部注册中心,如Nacos。

Istio除了支持东西向的流量代理之外,还支持南北流量的代理,通过Istio Ingress Gateway 作为入口的网关,通过Istio Egress Gateway作为出口网关,这样Istio将可以对全域流量进行治理。
在这里插入图片描述

流量劫持能力

在这里插入图片描述

基于Envoy Filter的服务治理

在这里插入图片描述

安装

1、准备阶段

  • 安装Kubernetes集群
    • 确保你已经有一个运行中的Kubernetes集群。安装Kubernetes集群的方法可以参考Kubernetes官方文档
  • 下载Istio
    • 访问Istio官方网站,下载最新版本的Istio安装文件。
    • 将下载的文件解压到本地目录,例如解压到~/istio目录。

2、安装Istio

  1. 安装istioctl工具(可选,但推荐)
  • istioctl是Istio的命令行工具,用于Istio的部署和管理。
  • 可以通过Istio官方网站下载页面找到适合操作系统的istioctl版本进行安装。
  • 例如,在Mac上可以使用Homebrew安装:brew install istioctl(注意:此命令可能需要更新为适用于当前版本的命令)。
  1. 设置环境变量(如果使用istioctl安装)
  • 如果安装了istioctl,可以将其添加到PATH环境变量中,以便全局访问。例如:export PATH=$PATH:/istio/bin(假设istioctl位于/istio/bin目录下)。
  1. 部署Istio的控制平面
  • 切换到Istio安装目录(如果下载了Istio并解压到了特定目录)。
  • 使用istioctl或kubectl命令部署Istio的控制平面组件。如果使用istioctl,可以运行如下命令(注意:版本和配置可能有所不同):
istioctl install --set profile=demo -y

或者,使用kubectl和YAML文件,可以运行:

kubectl apply -f install/kubernetes/istio-demo.yaml

(注意:文件名istio-demo.yaml可能因版本而异,请根据实际下载的Istio版本中的文件名进行调整。)

  1. 验证Istio控制平面是否安装成功
  • 使用kubectl命令查看Istio服务是否成功部署:
kubectl get svc -n istio-system
  • 如果服务列表中包含Istio的各个组件,如istio-pilot、istio-ingressgateway等,则表示Istio控制平面已安装成功。

3、部署示例应用并启用Istio

  1. 部署示例应用
  • Istio官方提供了一个Bookinfo示例应用,用于展示Istio的功能。
  • 切换到Istio安装目录的samples/bookinfo子目录。
  • 使用kubectl命令部署Bookinfo应用的所有组件:
kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
  1. 启用Istio的sidecar自动注入
  • 为了让Istio能够管理应用的流量,需要将Istio的sidecar(Envoy代理)注入到应用的Pod中。
  • 为默认命名空间启用sidecar自动注入(或者打算部署应用的任何命名空间启用):
kubectl label namespace default istio-injection=enabled
  • 或者,如果正在使用其他命名空间,请将default替换为相应的命名空间名称。
  1. 验证示例应用是否部署成功
  • 使用kubectl命令查看Bookinfo应用的服务是否成功部署:
kubectl get services
  • 如果服务列表中包含Bookinfo的各个组件,如details、productpage、ratings、reviews等,则表示示例应用已部署成功。
  1. 部署Istio网关并配置路由
  • 如果需要通过Istio的Ingress Gateway访问Bookinfo应用,还需要部署Istio网关并配置相应的路由规则。
  • 这通常涉及到创建Gateway和VirtualService资源,具体步骤和YAML配置文件可以参考Istio官方文档或示例。

4、后续操作

  • 访问应用:
    • 通过Istio的Ingress Gateway访问Bookinfo应用,验证Istio的流量管理、安全、监控等功能是否按预期工作。
  • 进一步配置Istio:
    • 根据实际需求,配置Istio的路由规则、安全策略、监控指标等。
  • 29
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值