共计 2712 个字符,预计需要花费 7 分钟才能阅读完成。
什么是 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.intern…,连贯到视频后端服务。
- https://mymediaservice.intern…,连贯到镜像云存储后端存储空间。
外部微服务架构
外部后端服务托管在 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