在本文中,我们将看到 Kubernetes Ingress 为集群内部基于内容的路由和流量控制提供的功能。
作者:Deeptiman Pattnaik 翻译:Bach(才云) 校对:星空下的文仔(才云)、bot(才云)
什么是 Kubernetes Ingress?
Kubernetes Ingress 提供了一个基于规则的工作流,该工作流将在集群内部设置路由 API 对象。Ingress 的 API 将使用与公共网络所连接的 HTTP(S)负载均衡器,为具有外部端点的服务提供基于内容的路由。
什么是 Anycast 路由?
Anycast 是一种路由方法,它基于区域、基于内容或任何其他优先级方法将传入请求(单个 IP 地址)分配到多个路由中。路由节点的优先级为用户提供了低延迟带宽内的服务。Anycast 网络的最短路径算法确定了最近的节点。在实际情况下,网络请求需要到达任何最近的 CDN 数据中心,以减少高流量应用中的流量拥挤。
K8sMeetup
内部流量的 Ingress 负载均衡
内部 HTTP 负载均衡器只能使用内部 IP 地址从虚拟私有云(VPC)网络访问选定区域。
Envoy Proxy
内部 HTTP 负载均衡器使用 Envoy Proxy 来管理集群中的服务。代理服务使用 Sidecar 代理,以提供服务网格来管理控制区域或节点中的内部流量。Envoy Proxy 负责集群中的服务发现、负载均衡、流量控制、熔断、健康检查。
Sidecar
它是作为容器、配置元素、日志记录、代理服务应用的应用程序的一项支持功能。Sidecar 服务是应用程序生命周期中的可连接和可拆卸组件。
基于路径的路由(Path-based routing)
内部负载均衡器遵循 L7 路由方法,该方法允许形成某些 URL 类型,以定义使用单个内部 IP 地址与后端服务连接的各种路径。URL 网址映射创建路径规则来控制基于内容的路由后端服务流量。
示例
现在有一个具有两个后端服务“video”、“image”的 BASE URL “mymediaservice.internal”,路径规则将决定使用单个 URL 连接到多个内部后端服务或存储空间(Bucket)。
内部微服务架构
内部后端服务托管在 VM 内的多个实例组中,这些实例组充当内部客户端的内部微服务。
L7 流量管理
L7 内部路由以下流量管理的方法来智能地路由流量,以提供高性能的生产环境中的路由设备。
1.流量定向(基于 Header 的路由,header-based routing)
HTTP(s)请求 Header 将通过设置用户代理将流量定向到目标服务实例。
示例
如果用户拥有移动设备,请求参数的 Header 应为“user-agent:Mobile ”,其他用户的请求参数为“user-agent:Desktop”,流量可以根据用户的请求,重定向到所需的服务实例设备可用性。因此,流量控制机制可在区域路由应用程序中实现智能路由。
基于用户设备类型的流量导向
2.流量操作(基于权重的流量分配,weight-based traffic splitting)
流量操作对于管理网络中较新版本的服务很有用。“version-2”服务迁移可以分为“95%”和“5%”的多个集合。第一组流量将运行服务的“version-1”,其他流量将运行服务的“version-2”,直到性能稳定为止,网络中的释放率将缓慢增加。流量操作在生产环境中具有高性能的服务中迁移,可用于 A/B 测试和其他服务发布过程。
通过流量拆分更新服务
3.流量管理组件
K8sMeetup
外部流量的 Ingress 负载均衡
多种后端
外部 HTTP 负载均衡器使服务可以与公共后端服务连接,例如,云 CDN、基于内容的存储后端、地理区域服务以及具有单个 IP 地址的后端服务。
1.实例组(Instance Group)
在组成实例组的单个集群中将运行多个 VM,托管实例和非托管实例对 VM 的功能有所不同。
托管实例组(Managed Instance Groups,MIG)
各种类型的无状态和有状态应用程序都在集群的 Pod、Service 中运行。这些实例的性能、可伸缩性可以通过创建多个相同的虚拟机来实现,这些虚拟机可以提供自动扩展、自动修复、区域部署和自动更新。
托管实例组的优势
非托管实例组(Unmanaged Instance Group,UIG)
这是手动进行优化、扩展和检查运行状况,以管理虚拟机内部正在运行的实例。UIG 不提供自动处理,例如伸缩、回滚、修复以及集群中任何的自动管理。
2.网络端点组(Network Endpoint Group,NEG)
通常,网络端点组定义为在容器内运行的后端端点或服务的集合。我们可以为在 VM 下运行的每个端点创建一组后端实例。
区域 NEG
2 个运行 2 个 VM 的区域 NEG
无服务器 NEG
外部 HTTP 负载均衡器的静态 IP 地址
原文链接:https://deeptiman.medium.com/content-based-routing-using-kubernetes-ingress-73fbeb3cf1e8