Service Proxy #
服务代理是一种工具,它拦截流向或来自某个服务的流量,应用一定的逻辑后再将流量转发到另一个服务。它充当“中介”,既收集流量信息,又应用规则。它可以简单地作为负载均衡器,将流量转发到各个应用程序,也可以作为复杂的服务网格,多个代理与各个容器化应用并行运行,处理所有网络连接。
尽管服务代理本身就很有用,尤其是在将流量从广域网引入 Kubernetes 集群时,但它也是其他系统(如API网关或服务网格)的构建模块。
解决的问题 #
应用程序应该以受控的方式发送和接收网络流量。为了跟踪流量并可能转换或重定向它,我们需要收集数据。传统上,启用数据收集和网络流量管理的代码是嵌入在每个应用程序中的。
服务代理“外部化”了这一功能。它不再需要驻留在应用程序内部,而是嵌入在平台层(即应用程序运行的地方)。这非常强大,因为它使开发人员可以完全专注于编写价值生成的应用程序代码,将处理流量的任务交由平台团队管理,这是平台团队本应承担的责任。从统一的位置集中分发和管理全局所需的服务功能(例如路由或TLS终止)使得服务间的通信更加可靠、安全和高效。
提供的帮助 #
代理充当用户和服务之间或不同服务之间的门卫(gatekeepers)。凭借这一独特的定位,代理提供了关于通信类型的洞察,并能够决定将特定请求发送到哪里,甚至完全拒绝它。
代理收集关键信息,管理路由(均匀分配流量到各个服务,或在某些服务出现故障时重新路由),加密连接,并缓存内容(减少资源消耗)。
技术基础 #
服务代理通过拦截服务间的流量,应用逻辑,然后在允许的情况下将流量转发。代理中嵌入的集中控制功能允许管理员完成多个任务,包括收集关于服务间通信的详细度量、保护服务免受过载,并对服务应用常见标准(如双向 TLS)。服务代理是其他工具(如服务网格)的基础,它们为执行所有网络流量的高级策略提供了一种方法。
请注意,CNCF将load balancers和ingress providers也纳入这一类别。
Keywords #
- Service Proxy
- Ingress
Projects #
- Envoy (graduated)
- Contour (incubating)
- BFE (sandbox)
- LoxiLB (sandbox)
- MetalLB (sandbox)
- OpenELB (sandbox)
- Caddy
- HAProxy
- Nginx