Service Mesh

Service Mesh 的中文译为 “服务网格” ,是一个用于处理服务 和服务之间通信的基础设施层,它负责为构建复杂的云原生应用 传递可靠的网络请求,并为服务通信实现了微服务所需的基本组 件功能,例如服务发现、负载均衡、监控、流量管理、访问控制 等。在实践中,服务网格通常实现为一组和应用程序部署在一起 的轻量级的网络代理,但对应用程序来说是透明的。

右图,绿色方块为应用服务,蓝色方块为 Sidecar Proxy,应用 服务之间通过 Sidecar Proxy 进行通信,整个服务通信形成图中 的蓝色网络连线,图中所有蓝色部分就形成一个网络,这个就是 服务网格名字的由来。

Service Mesh特点

Service Mesh有以下特点:

  • 治理能力独立(Sidecar)

  • 应用程序无感知

  • 服务通信的基础设施层

  • 解耦应用程序的重试/超时、监控、追踪和服务发现

Istio概述

Isito是Service Mesh的产品化落地,是目前最受欢迎的服务网格,功能丰富、成熟度高。

Linkerd是世界上第一个服务网格类的产品。

  • 连接(Connect)

  • 流量管理

  • 负载均衡

  • 灰度发布

  • 安全(Secure)

  • 认证 - 鉴权

  • 控制(Control)

  • 限流

  • ACL

  • 观察(Observe)

  • 监控

  • 调用链

Istio版本变化

在Istio1.5版本发生了一个重大变革,彻底推翻原有控制平面的架构,将有原有多个组件整合为单体结构 “istiod”,同时废弃了Mixer 组件,如果你正在使用之前版本,必须了解这些变化。

Istio架构与组件

Istio服务网格在逻辑上分为数据平面和控制平面。

  • 控制平面:使用全新的部署模式:istiod,这个组件负责处理Sidecar注入、证书分发、配置管理等功能,替 代 原有组件,降低复杂度,提高易用性。

Pilot:策略配置组件,为Proxy提供服务发现、智能路由、错误处理等。

Citadel:安全组件,提供证书生成下发、加密通信、访问控制。

Galley:配置管理、验证、分发。

  • 数据平面:由一组Proxy组成,这些Proxy负责所有微服务网络通信,实现高效转发和策略。使用envoy实现, envoy是一个基于C++实现的L4/L7 Proxy转发器,是Istio在数据平面唯一的组件。

Istio基本概念

Istio 有 4 个配置资源,落地所有流量管理需求:

  • VirtualService(虚拟服务):实现服务请求路由规则的功能。

  • DestinationRule(目标规则):实现目标服务的负载均衡、服务发现、故障处理和故障注入的功能。

  • Gateway(网关):让服务网格内的服务,可以被全世界看到。

  • ServiceEntry(服务入口) :允许管理网格外的服务的流量。

部署Istio

官方文档:https://preliminary.istio.io/latest/zh/docs/setup/getting-started

curl -L https://istio.io/downloadIstio | sh -
tar zxvf istio-1.8.2-linux.tar.gz
cd istio-1.8.2
mv bin/istioctl /usr/bin
istioctl profile list
istioctl install
或者istioctl install --set profile=default -y
#查看具体的profile开启了哪些组件可用如下命令
istioctl profile dump [default|demo|minimal|remote|empty|preview]
kubectl get pods -n istio-system
kubectl get svc -n istio-system

#卸载:
istioctl manifest generate | kubectl delete -f -

Sidercar注入

部署httpbin Web示例:

cd istio-1.8.2/samples/httpbin

手动注入

kubectl apply -f <(istioctl kube-inject -f httpbin-nodeport.yaml)
或者
istioctl kube-inject -f httpbin-nodeport.yaml |kubectl apply -f -

自动注入(给命名空间打指定标签,启用自动注入)

kubectl label namespace default istio-injection=enabled
kubectl get ns --show-labels
kubectl apply -f httpbin-gateway.yaml

IngressGateway NodePort访问地址:http://192.168.0.11:32615/

Istio与K8s集成流程

服务网关:Gateway

Gateway为网格内服务提供负载均衡器,提供以下功能:

  • L4-L7的负载均衡

  • 对外的mTLS

Gateway根据流入流出方向分为:

  • IngressGateway:接收外部访问,并将流量转发到网格内的服务。

  • EgressGateway:网格内服务访问外部应用。

在实际部署中,K8s集群一般部署在内网,为了将暴露到互联 网,会在前面加一层负载均衡器,用于流量入口,将用户访问 的域名传递给IngressGateway,IngressGateway再转发到不 同应用。

学习:

https://www.it610.com/article/1292898160674414592.htm

https://blog.csdn.net/lswzw/article/details/104745617/