作者:古琦
随着云技术的发展与普及,以 K8s 为代表的云原生概念越来越被企业所接受,成为企业数字化转型的坚实基础。其所倡导的不可变基础设施、以资源为管理对象、描述性的 API、最终一致性等等理念,已经成为行业对基础设施的统一认知标准。
如何实现微服务应用的快速上云,实现标准化的治理能力,服务网格是一个重要的组成部分,服务网格是一个专门处理服务通讯的基础设施层,它的职责是在复杂的拓扑结构下进行微服务间可靠的请求传送,在实践中,它是一组和应用服务部署在一起的轻量级的网络代理,并且对应用服务透明。
服务网格的产品有非常多,比如 Istio、Linkerd,Open Service Mesh 等等,还有出现类似 ebpf + envoy,proxylessMesh,在 CNStack 中我们提供了基于 Istio 增强的服务网格能力,构建微服务的统一流量治理标准。 除了治理外,零信任安全也是非常重要的能力,零信任是指无论在网络边界内部还是外部,都没有任何隐含的信任,CNStack 服务网格将身份认证和授权从应用程序代码集成到服务网格中,开箱即用、动态配置更加容易,并且立即生效。
下面通过流量治理、零信任安全两个方面介绍 CNStack 服务网格产品。
在 CNStack 平台上拥有可以快速搭建服务网格的能力,部署在 CNStack2.0 中的服务网格可以自动发现被 CNStack 管理的 Kubernetes 集群,通过创建网格将服务网格组件部署到对应集群,支持配置网关高可用、配置懒加载、资源、Accesslog 等能力,可以选择部署 1.14 版本、1.13 版本的服务网格,兼容不同版本的 K8s 集群。
服务网格的架构图:
通过 Proxy 代理请求的流量,服务网格可以构建统一的服务治理能力,流量从 Service A 发出后被 Iptables 流量劫持到 Proxy 中,Proxy 通过一系列的 Filter 处理找到满足规则的 Service B 的 Pod,转发请求,Service B 的 Proxy 通过 Iptables 获取到接收到的请求,然后转发给 Service B,Istiod 负责服务发现、规则下发、Auth 等能力,服务网格的统一的治理能力都是构建在无侵入的 Proxy 基础上。
流量管理的能力如下所示:
包含以下的能力:
A、负载均衡:支持常规的负载均衡算法,如轮询、随机、最小连接数。
B、服务预热:提供慢启动预热功能,支持在用户配置的时间段内逐步增加请求量,避免出现请求超时、数据丢失等问题。
C、离群摘除:服务某些 pod 出现请求处理报错的时候,可以将这些 pod 进行隔离,避免出现更多错误。
D、连接池管理:管理连接数量、请求数量等。
E、超时:配置服务端的超时,如果超时会直接报错。
F、重试:在请求返回比如 4XX、5XX 的失败后进行重试。
G、限流:单机限流,支持服务级别、header、path 限流,支持配置限流后的返回。
H、故障注入:可以实现服务故障注入、单机的故障注入。
I、流量镜像:支持流量的复制。
J、服务 Mock:支持服务指定接口的返回。
限流的能力提供了单机的限流、基于 header 的限流、Path 的限流、支持配置限流后的返回值。
故障注入中除了开源社区的服务级别的故障外,还提供了针对服务单个 Pod 的故障注入,这样可以进行单个 Pod 的测试。
服务 Mock 的能力可以为开发人员 Mock 指定接口的返回,在接口还没有开发完成的时候,提高开发测试的效率,服务 Mock 的配置中可以选择请求的路径、端口号、方法、状态码、Header、返回 Json 数据。
通过标签路由可以选择好基线的版本,然后选择对应的路由版本,配置路由策略,比如基于权重的策略、基于内容的策略,通过简单的配置轻松完成路由规则的配置。
1、流量比例:支持配置服务端的流量比例配置。
2、按内容:支持 header、uri、cookie 的匹配。
服务注册其实顾名思义就是将微服务注册到注册中心,这个能力主要是为了帮助一些非 Java 类型的服务实现跟已有 Java 类型服务的通信,比如 Spring Cloud 服务需要与非 Java 互通,为了方便代码编写,Spring Cloud 服务需要像调用其他 Spring Cloud 服务一样去调用非 Java 服务,因此就需要非 Java 的服务注册到对应的注册中心,这里我们支持了非 Java 服务注册到 Nacos、Eureka 注册中心。
展示服务的运行监控数据,比如平均处理请求的次数、请求的成功率、请求时延。
可以通过发布版本的方式发布一个灰度版本的镜像,填写对应的版本号、镜像,可以配置权重、内容路由规则,可以使用回滚、灰度成功能力。
微服务提供了诸多价值,包括可伸缩性、敏捷性、独立扩展、业务逻辑隔离、独立生命周期管理和更容易的分布式开发。然而,这些分布众多的微服务也会增加安全的挑战,每个微服务都是一个被攻击的目标。Kubernetes 为托管和编排您的微服务提供了一个出色的平台。但是默认情况下,微服务之间的所有交互都不安全。它们通过纯文本 HTTP 进行通信,但这不足以满足安全要求。只依赖网络边界来保证安全是不够的,因为一旦内部的某个服务被攻陷,攻击者能够以该机器为跳板来攻击内网。所以,内部的调用也必须安全,这就是零信任安全的价值。零信任是指任何地方都需要显式认证,并使用最小权限原则来限制对资源的访问。
服务网格技术的一个重要的价值主张就是它如何有效地保护应用的生产环境,同时又不降低开发人员的生产力。通过服务网格技术,为微服务架构采用零信任网络安全方法提供必要的基础,以此实现所有访问都经过强身份认证、基于上下文授权、记录监控等安全目标。使用这些网格功能,您可以为属于网格的所有应用程序提供安全控制能力,例如所有流量都已加密、到应用程序的所有流量都通过策略执行点(PEP)的验证等。
CNStack 服务网格能够减小云原生环境中的被攻击面积,并提供零信任应用网络所需的基础框架。通过服务网格管理服务到服务的安全性,可以确保微服务间端到端加密、服务级别身份认证和细粒度授权策略。
在服务网格体系下,可以支持: