微服务治理istio初探上
1102字约4分钟
2024-09-29
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.yamlIngressGateway 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/
