什么是服务网格?
服务网格提供了使应用程序更加安全、可靠和可观察的功能。这些功能是在平台层提供的,而不是应用层。
服务网格通常以sidecar模式实现为一系列网络代理,并使用应用程序代码来管理它们的行为。代理管理微服务之间的通信,并为引入服务网格功能提供入口点。总的来说,代理形成了服务网格的数据平面,该数据平面作为控制平面的可扩展单元进行控制。
由于云原生应用程序的广泛采用,服务网格越来越受欢迎。云原生应用程序可以包含数百个服务和数千个服务实例。这些实例通常由Kubernetes管理,在物理节点上动态调度,其状态不断变化。这使得服务到服务的通信变得极其复杂,并直接影响应用程序的运行时行为。
服务网格技术使得管理这种复杂的服务间通信成为可能,以确保可靠性、安全性和端到端性能。
服务网格的优点和缺点
服务网格可以解决管理服务之间通信的一些主要挑战,但它们也有其缺点。服务网格的优点包括:
- 对于容器和微服务来说,服务到服务的通信都得到了简化。
- 通信错误更容易诊断,因为它们发生在自己的基础设施层内。
- 您可以更快地开发、测试和部署应用程序。
- 与容器集群一起放置的Sidecar可以有效地管理网络服务。
- 服务网格支持各种安全功能,包括加密、身份验证和授权。
服务网格的一些缺点是:
- 使用服务网格可以增加运行时实例。
- 通信涉及一个额外的步骤——服务调用首先必须通过sidecar代理运行。
- 服务网格不支持与其他系统或服务集成
- 它们不解决诸如转换映射或路由类型之类的问题。
服务网格架构和概念
服务网格的功能和组件有一个独特的术语:
- 容器编排框架——服务网格架构通常与Kubernetes或Nomad等容器编排器一起运行。
- Sidecar代理——它们与每个Pod或实例一起运行,并相互通信以在它们运行的容器之间路由流量。它们通过编排框架进行管理。
- 服务和实例——实例(或Pod)正在运行微服务的副本。客户端通常通过服务访问实例,服务是实例的可扩展、容错副本。
- 服务发现——实例需要发现它们需要与之交互的服务的可用实例。这通常涉及DNS查找。
- 负载均衡——编排框架通常为传输层(第4层)提供负载均衡,但服务网格也可以为应用层(第7层)提供负载均衡。
- 加密——服务网格可以加密请求和响应,然后解密它们。他们优先考虑重用已建立的连接,从而最大限度地减少创建新连接的需要并提高性能。通常,流量使用双向TLS进行加密,公钥基础设施生成密钥、证书以及sidecar代理使用的密钥。
- 认证和授权。服务网格可以授权和验证应用程序外部和内部发出的请求,仅向实例发送经过验证的请求。
- 断路器模式——这涉及隔离不健康的实例并在需要时将它们逐渐恢复。
- 数据平面是服务网格的一部分,用于管理实例之间的网络流量。控制平面生成并部署控制数据平面的配置。它通常包括(或可以连接到)命令行界面、API和图形用户界面。
服务网格的工作原理
服务网格不会向应用程序的运行时环境引入新功能。对于任何架构,应用程序都需要规则来定义请求的通信方式。服务网格的不同之处在于,它们将管理服务间通信的逻辑抽象到基础设施层(而不是单个服务)。
这是通过将服务网格作为一组网络代理构建到应用程序中来实现的。
代理通常用于从企业设备访问网站。通常,对网页的请求首先由公司的Web代理接收,该代理会检查这些请求是否存在安全问题,然后才将请求发送到主机服务器。来自页面的响应也会发送到代理进行安全检查,然后再返回给用户。
服务网格中的代理也称为边车,因为它们与微服务一起运行,而不是在微服务内部运行。它们在各自基础设施层的微服务之间路由请求。这些代理共同形成一个称为网格的网络。
如果您没有服务网格,则需要使用管理服务之间通信的逻辑对每个微服务需求进行编码。这不仅极大地浪费了您的时间,而且还使诊断通信故障变得更加困难,因为管理服务间通信的逻辑隐藏在服务内部。
零信任安全和服务网格
安全性是云原生应用程序的一个关键问题。许多组织正在采用零信任方法,这种方法特别适合云原生环境。零信任安全模型假设不存在网络边界。它不信任任何实体,即使它位于网络“内部”,并且需要对应用程序组件之间的任何通信以及外部通信进行持续的身份验证和验证。
以下是服务网格可以帮助实现零信任安全的几种方法:
- 为所有微服务通信实施相互传输层安全(mTLS)
- 管理微服务的身份和授权
- 启用访问控制的集中管理并为每个微服务和角色强制执行最小权限(在Kubernetes中,这可以通过RBAC来完成)
- 促进微服务的监控和可观察性,以确保可以识别和阻止可疑的访问尝试或流量
- 添加对入口和出口的控制,并在每个微服务周围设置微边界
服务网格可以帮助减轻以下类型的攻击:
- 服务模拟——攻击者冒充私有网络中的授权服务,并尝试访问其他服务或获取敏感数据的访问权限。
- 数据包嗅探——攻击者渗透专用网络并拦截微服务之间的通信。
- 未经授权的访问——粗心或恶意的内部人员尝试从合法服务向另一服务发出未经授权的请求。
- 数据泄露——受保护网络内的攻击者将数据从受保护资源传输到网络外部的位置。
转载请注明出处:https://www.cloudnative-tech.com/uncategorized/6006.html