微服务治理istio初探上
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 - |
Sidercar注入
部署httpbin Web示例:
cd istio-1.8.2/samples/httpbin |
手动注入
kubectl apply -f <(istioctl kube-inject -f httpbin-nodeport.yaml) |
自动注入(给命名空间打指定标签,启用自动注入)
kubectl label namespace default istio-injection=enabled |
IngressGateway NodePort访问地址:http://192.168.0.11:32615/
Istio与K8s集成流程
服务网关:Gateway
Gateway为网格内服务提供负载均衡器,提供以下功能:
-
L4-L7的负载均衡
-
对外的mTLS
Gateway根据流入流出方向分为:
-
IngressGateway:接收外部访问,并将流量转发到网格内的服务。
-
EgressGateway:网格内服务访问外部应用。
在实际部署中,K8s集群一般部署在内网,为了将暴露到互联 网,会在前面加一层负载均衡器,用于流量入口,将用户访问 的域名传递给IngressGateway,IngressGateway再转发到不 同应用。
学习: