devops学习:lstio详解
lstio提供简单的方式来建立已部署的服务的网格,具备了负载均衡,服务到服务认证,监控等功能,有了lstio,你的服务就不需要任何微服务开发框架(spring cloud,dubbo),也不需要自己手动实现各种复杂的服务治理功能,只要服务的客户端和服务端可以进行简单的直接网络访问,就可以通过网络层委托lstio,从而获取一些列的完整功能。提供强大的服务到服务和终端用户认证,使用交互TLS,内置身份
lstio简介:一个连接,管理,保护微服务的开放平台
lstio提供简单的方式来建立已部署的服务的网格,具备了负载均衡,服务到服务认证,监控等功能,有了lstio,你的服务就不需要任何微服务开发框架(spring cloud,dubbo),也不需要自己手动实现各种复杂的服务治理功能,只要服务的客户端和服务端可以进行简单的直接网络访问,就可以通过网络层委托lstio,从而获取一些列的完整功能
lstio=微服务框架+服务治理
lstio的关键功能:
- HTTP:1.1,HTTP/2,gRPC和TCP流量的自动感知负载均衡和故障切换
- 通过丰富的路由规则,容错和故障注入,对流行为的细粒度控制
- 支持访问控制,速率限制和配额的可插拔策略层和配置API
- 集群内所有流量的自动度量,日志和跟踪,包括集群入口和出口
- 安全的服务身份验证,在集群中的服务之间具有强大的身份标识
服务网格:
Servicce Mesh是专用的基础设置层,轻量级高性能网络代理,提供安全的、快速地可靠地服务间通讯,与实际应用部署在一起,但对应用透明,应用作为服务的发起方,只需要用最简单的方式将请求发送给本地的服务网格代理,然后网格代理会进行后续操作,如服务发现,负载均衡,最后将请求转发给目标服务
lstio关键功能:
- 流量控制
- 可观察性
- 策略执行
- 服务身份和安全
lstio整体框架:
lstio分为控制面板和数据面板:
控制面板:负责管理和配置代理来路由流量,在运行时执行策略
- Mixer
- Pilot
- Auth
数据面板:由一组只能代理组成,代理部署为边车,调解和控制微服务之间的所有的网络通信
- Envoy
控制面板-Pilot
Pilot:Pilot负责收集和验证配置并将其传播到各种lstio组件,从Mixer和Envoy中抽取环境特定的视线细节,为他们提供独立于底层平台的用户服务的抽象表示,此外,流量管理规则可以在运行时通过Pilot进行编程
功能:
- 请求路由
- 服务发现和负载均衡
- 故障处理
- 故障注入
- 规则配置
控制平面-Mixer
负责在服务网格上执行访问控制和使用策略,并收集Envoy代理和其他服务的遥测数据,Mixer提供三个核心功能
- 认证,黑白名单,ACL检查
- 配额管理,使服务能够在多个维度上分配和释放,典型例子就是限速
- 遥测报告,使服务能够上报日志和监控
控制平面-Auth
提供强大的服务到服务和终端用户认证,使用交互TLS,内置身份和凭据管理,可用于升级服务网格中的未加密流量,并为运维人员提供基于服务身份而不是网络实时策略的能力
- 身份
- 密钥管理
- 通信安全
数据平面-Envoy
作为控制平面,在每个服务中注入Envoy代理以sidecar形式来拦截所有进出服务的流量,同时对流量加以控制
Sidecar模式
将应用程序的功能划分为单独的进行可以被视为Sidecar模式,Sidecar涉及模式允许你为应用程序添加许多功能而无需额外第三方组件的配置和代码
使用Sidecar模式的优势
- 通过抽象与功能相关的共同基础设施到一个不同层降低了微服务代码的复杂度
- 因为你不再需要编写相同的第三方组件配置文件和代码,所以能够降低微服务架构中的代码重复度
- 降低应用程序代码和底层平台耦合度
Sidecar模式的部署方式中,你会为每个应用容器部署一个伴生容器,Sidecar接管进出应用容器的所有流量,在k8s的Pod中,原有的应用容器会多一个Sidecar容器,可以理解为两个容器共享存储,网络等资源
在这插入一个概念:Init C,专用容器,在应用程序启动之前运行,用来包含一些应用镜像中不存在的实用工具或安装脚本,一个pod中可以指定多个init容器,如果指定了多个,那么init 容器将会按顺序依次运行,只有当前面的initC完成才会运行下一个initC,当所有的容器运行完成后,k8s才会初始化pod和运行应用容器,在所有的initC成功之前,Pod不会变为Ready状态
apiVersion: v1
kind: Pod
metadata:
name: myapp-pod
labels:
app: myapp
spec:
containers:
- name: myapp-container
image: busybox
command: ['sh', '-c', 'echo The app is running! && sleep 3600']
initContainers:
- name: init1-container
image: registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.1.3
command: ['sh', '-c', 'until nslookup myservice; do echo waiting for myservice; sleep 2; done;'] # until后面的nslookup myservice输出状态必须为非0
- name: init2-container
image: registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.1.3
command: ['sh', '-c', 'until nslookup mydb; do echo waiting for mydb; sleep 2; done;'] # until后面的nslookup myservice输出状态必须为非0
只有当我们真正部署了myservice和mydb服务,上面的 容器才能正常运行
更多推荐
所有评论(0)