Istio 服务网格
参考:Istio / Istio 服务网格
Istio 使用功能强大的 Envoy 服务代理扩展了 Kubernetes,以建立一个可编程的、可感知的应用程序网络。Istio 与 Kubernetes 和传统工作负载一起使用,为复杂的部署带来了标准的通用流量管理、遥测和安全性。
Istio 解决了开发人员和运营商在分布式微服务架构中面临的挑战。无论您是从头构建还是将现有的应用程序迁移到本地云,Istio 都能提供帮助
通过在部署的每个应用程序中添加代理“sidecar”,Istio 让您可以为应用程序感知流量管理、不可思议的可观察性和强大的安全功能编程到网络中。
服务网格介绍
现代应用程序通常被设计成微服务的分布式集合,每个服务执行一些离散的业务功能。服务网格是专门的基础设施层,包含了组成这类体系结构的微服务网络。 服务网格不仅描述了这个网络,而且还描述了分布式应用程序组件之间的交互。所有在服务之间传递的数据都由服务网格控制和路由。
随着分布式服务的部署——比如基于 Kubernetes 的系统——规模和复杂性的增长,它可能会变得更加难以理解和管理。需求可以包括发现、负载平衡、故障恢复、度量和监视。微服务体系结构通常还有更复杂的操作需求,比如 A/B 测试、canary 部署、速率限制、访问控制、加密和端到端身份验证。
服务到服务的通信使分布式应用成为可能。在应用程序集群内部和跨应用程序集群路由这种通信变得越来越复杂。 Istio 有助于减少这种复杂性,同时减轻开发团队的压力。
Istio 介绍
Istio 是一个开源服务网格,它透明地分层到现有的分布式应用程序上。 Istio 强大的特性提供了一种统一和更有效的方式来保护、连接和监视服务。 Istio 是实现负载平衡、服务到服务身份验证和监视的路径——只需要很少或不需要更改服务代码。
它强大的控制平面带来了重要的特点,包括:
- 使用 TLS 加密、强身份认证和授权的集群内服务到服务的安全通信
- 自动负载均衡的 HTTP, gRPC, WebSocket,和 TCP 流量
- 通过丰富的路由规则、重试、故障转移和故障注入对流量行为进行细粒度控制
- 一个可插入的策略层和配置 API,支持访问控制、速率限制和配额
- 对集群内的所有流量(包括集群入口和出口)进行自动度量、日志和跟踪
Istio 是为可扩展性而设计的,可以处理不同范围的部署需求。Istio 的控制平面运行在 Kubernetes 上,您可以将部署在该集群中的应用程序添加到您的网格中,将网格扩展到其他集群,甚至连接 VM 或运行在 Kubernetes 之外的其他端点。
Istio 由两个部分组成:控制平面和数据平面。
数据平面是业务之间的通信平面。如果没有一个服务网格,网络就无法理解正在发送的流量,也无法根据它是哪种类型的流量,或者它从谁那里来,到谁那里去做出任何决定。
服务网格使用代理拦截所有的网络流量,允许根据您设置的配置提供广泛的应用程序感知功能。
代理与您在集群中启动的每个服务一起部署,或者与运行在虚拟机上的服务一起运行。
控制平面获取您所需的配置和服务视图,并动态地对代理服务器进行编程,随着规则或环境的变化更新它们。
概念
流量管理
Istio 的流量路由规则可以让您轻松地控制服务之间的流量和 API 调用。 Istio 简化了服务级别属性(如断路器、超时和重试)的配置,并使设置重要任务(如 A/B 测试、canary 部署和基于百分比的流量分割的分阶段部署)变得容易。 它还提供了开箱即用的故障恢复特性,帮助您的应用程序更健壮地应对依赖服务或网络的故障。
可观测性
Istio 的遥测技术包括详细的指标、分布式跟踪和完整的访问日志。有了 Istio,您就可以得到全面全面的服务网格可观察性。
安全性能
微服务有特殊的安全需求,包括防止中间人攻击、灵活的访问控制、审计工具和相互的 TLS。 Istio 包括一个全面的安全解决方案,使运营商能够解决所有这些问题。 它提供了强大的身份、强大的策略、透明的 TLS 加密,以及验证、授权和审计(AAA)工具来保护您的服务和数据。
Istio 的安全模型是基于默认安全的,旨在提供深度防御,允许您部署安全的应用程序,甚至跨不可信的网络。
TLS 是Transport Layer Security的缩写,中文名为传输层安全性协议。这是一个用于在互联网上保护通信的协议,尤其是在网页浏览器和服务器之间。其目的是确保数据在传输过程中的完整性、机密性和身份验证。
TLS 的前身是 SSL(Secure Sockets Layer),但后来由于一些安全漏洞和设计的局限性,SSL 被逐渐淘汰,取而代之的是 TLS。目前,大多数的网页浏览和服务都使用 TLS 来加密数据。
当你访问一个使用 HTTPS(HyperText Transfer Protocol Secure)的网站时,你的浏览器和服务器之间就建立了一个 TLS 连接。这意味着两者之间传输的所有数据都被加密,使得第三方难以窃取或篡改这些信息。
TLS 协议涉及到握手、密钥交换、数据加密和身份验证等多个步骤,确保两个通信方能够安全、秘密地交换信息。
-------------------------------------
启用安全性
Istio 将在网格中配置服务以在相互通信时尽可能使用 mTLS。
mTLS是Mutual TLS的缩写,中文可以翻译为双向TLS。
在普通的TLS连接中,只有客户端验证服务器的身份。但在mTLS中,服务器和客户端都会验证对方的身份。这种双向身份验证增加了额外的安全性,确保只有拥有有效证书的客户端和服务器可以通信。
因此,mTLS尤其适用于需要高安全性的场景,例如银行、金融、医疗和企业内部应用等。
默认情况下,Istio 将以 permissive mTLS
模式运行,这意味着服务将接受加密和未加密的流量,以允许来自非网格服务的流量保持功能。 在所有服务都加入网格后,您可以改变认证策略,只允许加密流量。 然后您可以确定所有流量都已加密。
permissive mTLS是宽松的双向TLS认证模式。在这种模式下,可以进行双向TLS认证,也可以不进行认证从而发送明文数据。
Istio 将配置网格中的服务,使其在相互交谈时尽可能使用 mTLS。 Istio 默认以"允许的 mTLS" 模式运行,这意味着服务将同时接受加密和未加密的流量,以允许来自非网格服务的流量保持正常流通。 在所有的服务都进入网格后,您可以改变认证策略,只允许加密的流量,然后您可以确定所有的流量都是加密的。
Istio 的两类 API
Istio 为平台所有者和服务所有者提供 API。根据您扮演的角色,您只需要考虑一个子集。 例如,平台所有者将拥有安装、认证和授权资源。流量管理资源将由服务所有者处理。
在虚拟机上连接服务
Istio 不仅适用于 Kubernetes;还可以将虚拟机(或裸机)上的服务添加到网格中, 以获得 Istio 提供的所有功能,例如 TLS、丰富的遥测和高级流量管理功能。
监测您的服务
使用 Kiali 检查流经您的网格的流量,或者使用 Zipkin 或 Jaeger追踪请求。
使用 Istio 的默认 Grafana 仪表板,自动报告在网格中运行的服务的关键信号。
安装
借助 istioctl,您可以使用内置配置文件之一轻松安装 Istio。 当您自定义安装以满足您的要求时,建议使用 IstioOperator 自定义资源 (CR) 定义您的配置。 这使您可以选择将安装管理工作完全委托给 Istio Operator,而不是使用 istioctl 手动完成。 仅将 IstioOperator CR 用于控制平面,将额外的 IstioOperator CR 用于网关,以提高升级的灵活性。