Kubernetes Ingress 基于内容的路由

2020-11-25 11:22:13 浏览数 (1)

在本文中,我们将看到 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)。

  • https://mymediaservice.internal/video,连接到视频后端服务。
  • https://mymediaservice.internal/image,连接到镜像云存储后端存储空间。

内部微服务架构

内部后端服务托管在 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.流量管理组件

  • L7 流量管理系统提供了广泛的功能,可在区域网络中使用流量控制、流量操作和流量策略。
  • URL 网址映射提供 Route Rule、Rule Match、Rule Action 方法,可在区域空间内引导流量连接多个后端服务。
  • HTTP 负载均衡器将流量定向到各种后端服务实例,负载均衡器到后端服务的路由是在区域 URL 映射下定义的。

K8sMeetup

外部流量的 Ingress 负载均衡

多种后端

外部 HTTP 负载均衡器使服务可以与公共后端服务连接,例如,云 CDN、基于内容的存储后端、地理区域服务以及具有单个 IP 地址的后端服务。

1.实例组(Instance Group)

在组成实例组的单个集群中将运行多个 VM,托管实例和非托管实例对 VM 的功能有所不同。

托管实例组(Managed Instance Groups,MIG)

各种类型的无状态和有状态应用程序都在集群的 Pod、Service 中运行。这些实例的性能、可伸缩性可以通过创建多个相同的虚拟机来实现,这些虚拟机可以提供自动扩展、自动修复、区域部署和自动更新。

托管实例组的优势

  • 如果有多个作为实例组运行的 VM 副本,这些副本将提供集群的无缝工作流,如果任何一个 VM 实例出现故障,另一个副本 VM 实例将继续工作。
  • 区域 MIG 会将应用程序负载作为网络中的副本 VM 分布在多个区域中,从而减少了单个 VM 实例的流量负载。
  • 自动伸缩使该功能能够增加应用程序的计算资源需求,因此 MIG 可以根据需求自动增长集群中的实例,如果需求下降,则减少实例组。
  • 软件更新自动部署到实例中非常灵活,因为可以基于整个区域的稳定测试来控制向新版本的迁移。
  • 有状态工作负载将创建唯一的相同副本,这些副本将为各种有状态应用程序进行自动修复、重新创建、更新等操作。

非托管实例组(Unmanaged Instance Group,UIG)

这是手动进行优化、扩展和检查运行状况,以管理虚拟机内部正在运行的实例。UIG 不提供自动处理,例如伸缩、回滚、修复以及集群中任何的自动管理。

2.网络端点组(Network Endpoint Group,NEG)

通常,网络端点组定义为在容器内运行的后端端点或服务的集合。我们可以为在 VM 下运行的每个端点创建一组后端实例。

区域 NEG

  • 区域 NEG 运行的多个组容器在 VM 下运行。
  • 每个容器都有一系列子网 IP,其后是 VM 的别名 IP。

2 个运行 2 个 VM 的区域 NEG

无服务器 NEG

  • 无服务器 NEG 是一种后端服务,可以不与其他服务共享 IPv4 和 IPv6 地址运行。
  • 只有一个基本 URL 可以作为在不同区域的相同无服务器应用程序进行传播。因此,用户可以到达最近的 CDN、数据中心来访问服务。

外部 HTTP 负载均衡器的静态 IP 地址

  • 通常,Ingress 对象创建一个外部 IP 地址,客户端可以使用该 IP 地址连接到公共网络,但是如果 Ingress 服务终止或在集群中重新创建,我们可以将相同的 IP 地址将更改为新的 IP 地址。
  • 我们可以分配一个静态 IP 地址,该地址可以作为 Ingress 注解永久保留。

原文链接:https://deeptiman.medium.com/content-based-routing-using-kubernetes-ingress-73fbeb3cf1e8

0 人点赞