k8s记录-istio基础
参考:https://istio.io/latest/zh/
istio是什么
Istio带给你:
- HTTP、gRPC、WebSocket和TCP流量的自动负载均衡。
- 通过丰富的路由规则、重试、故障转移和故障注入对流量行为进行细粒度控制。
- 支持访问控制、速率限制和配额的可拔插策略层和配置API。
- 自动指标、日志和集群内所有流量的跟踪,包括集群入口和出口。
- 通过集群中的服务之间的强身份断言来实现服务间的身份验证。
通过在整个环境中部署一个特殊的sidecar代理(辅助容器),您可以将Istio支持添加到服务中(这给我留下了深刻的印象,如果您想做到这一点,请参阅后面的内容)。安装了sidecar代理之后,(微)服务之间的所有网络通信都通过这个代理。此外,所有的网络通信都是使用Istio的控制平面功能进行配置和管理的。
Istio是 Service Mesh(服务网格) 。我认为的service mesh定义就是“它是一个专用的基础设施层,使得服务间的通信安全、高效和可靠”。
通过kubectl可以很方便的把istio部署到k8s里,当然使用helm也是可以的,但有时helm版本和istio会有冲突,所以本文主要使用kubectl来进行部署
istio简单的几个概念
在Service Mesh中,我们需要了解Data Plane和Control Plane两个概念:
- Data Plane:作用是处理网格内服务间的通信,并完成服务发现、负载均衡、流量管理、健康检查等功能;
- Control Plane:作用是管理和配置智能代理用于路由流量,同时配置Mixers来应用策略、收集指标。
Istio核心组件
- Envoy:Istio 使用 Envoy调解服务网格中所有服务的入站和出站流量。属于数据平面。
- Mixer:负责在服务网格上执行访问控制和使用策略,以及收集从Envoy和其他服务自动监控到的数据。
- Pilot:为 Envoy sidecar 提供服务发现功能,为智能路由(例如 A/B 测试、金丝雀部署等)和弹性(超时、重试、熔断器等)提供流量管理功能。属于控制平面。
- Citadel:提供访问控制和用户身份认证功能。
Istio可视化管理组件
- Vistio:用于近乎实时地监控应用程序和集群之间的网络流量。
- Kiali:提供可视化服务网格拓扑、断路器和请求率等功能。Kiali还包括 Jaeger Tracing,可以提供开箱即用的分布式跟踪功能。
- jaeger:用于展示istio微服务调用链关系,以及微服务工作状态监测。注意,在生产环境中,应使用Elasticsearch或cassandra持久化存储jaeger数据。
下载istio安装包
curl -L https://git.io/getLatestIstio | sh -
创建namespace
kubectl create namespace istio-system
安装它的CRD资源
for i in install/kubernetes/helm/istio-init/files/crd*yaml; do kubectl apply -f $i; done
显示结果
kubectl get crds | grep 'istio.io' | wc -l
部署核心组件
kubectl apply -f install/kubernetes/istio-demo.yaml
这个过程需要消耗一些时间,它会先下载镜像,然后才能启动容器
[root@i-pcwovafu istio-1.5.1]# kubectl -n istio-system get pods
NAME READY STATUS RESTARTS AGE
grafana-7797c87688-9nwd9 0/1 ContainerCreating 0 11m
istio-citadel-f5974cc7d-tqglf 0/1 ContainerCreating 0 11m
istio-egressgateway-5757854ddd-x6cq9 0/1 Running 0 11m
istio-galley-6799449b85-tnlpm 1/1 Running 0 11m
istio-grafana-post-install-1.5.1-h7ph2 0/1 Completed 0 11m
istio-ingressgateway-7dcf45496f-2cwcm 0/1 Running 0 11m
istio-pilot-7897f5dc-j9jzr 0/2 ContainerCreating 0 11m
istio-policy-5b579b8889-gs4j9 0/2 ContainerCreating 0 11m
istio-security-post-install-1.5.1-xlx2n 0/1 Completed 0 11m
istio-sidecar-injector-5d97f8cb99-rh22f 0/1 ContainerCreating 0 11m
istio-telemetry-d79f68d7d-cnpn2 0/2 ContainerCreating 0 11m
istio-tracing-797d4c8d48-fmrlh 1/1 Running 0 11m
kiali-74fdc898b9-d5w5z 0/1 ImagePullBackOff 0 11m
prometheus-c8fdbd64f-fh7vs 0/1 ContainerCreating 0 11m
需要等待这些pod启动之后,你的istio才算启动起来。
istio核心组件说明
- grafana-* //监控数据可视化工具
- istio-citadel-* //证书管理
- istio-egressgateway-* //出口流量网关
- istio-galley-* //配置检查
- istio-ingressgateway-* //入口流量网关
- istio-pilot-* //Envoy 服务发现,外部化配置
- istio-policy-* //Mixer 混合器策略检查
- istio-sidecar-injector-* //边车注入
- istio-telemetry-* //Mixer混合器指标收集
- kiali-* //Service Mesh可视化工具
- prometheus-* //监控报警
为指定namespace注入istio的sidecar功能
# kubectl label namespace default istio-injection=enable
禁止注入istio的sidecar功能
# kubectl label namespace default istio-injection-
查看istio的sidecar的信息
kubectl get namespace -L istio-injection
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架